Note: v57.0 was never released due to an issue with the install of the newly introduced AI skill. v57.1 includes a fix for this issue.
Perfetto now ships an AI skill that teaches coding agents how to record, query, and analyze traces, including guided workflows for common investigations. It works with any Agent Skills-compatible agent (Claude Code, OpenAI Codex, Gemini CLI, OpenCode, and others) and bundles a working trace_processor for the agent to use:
# Claude Code
/plugin marketplace add google/perfetto@ai-agents
# Codex
codex plugin marketplace add google/perfetto --ref ai-agents
# Other agents
curl -fsSL https://get.perfetto.dev/agents-install | python3 - --agent <opencode|antigravity|pi>
See the Using AI with Perfetto docs for agent-specific install paths and what the skill can do.
Perfetto now imports overlapping "ph": "X" (complete) events in JSON (Chrome Trace Event Format) traces instead of silently dropping them. This was a long-standing pain point (#4280) for tools which emit overlapping synchronous events, notably traces from the PyTorch profiler: the affected slices vanished from both the timeline and SQL, and some users were resorting to self-hosting old versions of the UI. Overlapping events are now ingested onto overflow tracks which the UI merges back into a single thread track, so everything is visible in the timeline and queryable in SQL.
Note that overlapping "X" events remain outside the Trace Event Format spec: the importer records stats naming the offending events (surfaced in the UI’s import warnings) so you can flag them to your tracing tool’s maintainers. If you maintain such a tool, prefer async ("b"/"e") events, which is how the format natively represents genuinely overlapping intervals.
Slices and counters have a new sibling: state tracks, a first-class way to record the state of a system or subsystem over time (e.g. “Buffering”, “Playing”, “Paused”). A state track always has exactly one current value; each event simply transitions it to a new state, and clearing it marks the track as idle.
You can emit states from all the SDKs:
// C++ SDK
perfetto::StateTrack track("Player state");
TRACE_STATE("player", "Buffering", track);
// C SDK (high-level API)
PERFETTO_TE(player, PERFETTO_TE_STATE("Buffering"),
PERFETTO_TE_REGISTERED_TRACK(&player_state_track));
The Android Java SDK gets the same capability. Trace Processor ingests state events into a new state SQL table, and the UI renders state tracks natively with a dedicated details panel.
Linux system logs can now be captured as part of a trace, end to end:
linux.systemd_journald data source records journald entries while tracing, with filters for minimum syslog priority, SYSLOG_IDENTIFIERs, and systemd unit names.log_source column (plus a linux_systemd_journald_logs view in the standard library).Big thanks to @staticfloat for contributing this feature!
The query results grid got a big upgrade: columns can be sorted, reordered, and hidden, the sidebar is collapsible, and SQL errors are now surfaced properly in the grid.
oom_score_adj in the overview./proc/<pid>/smaps data.PerfettoTrack): build multi-level track hierarchies and control how sibling tracks are sorted and merged in the UI.PERFETTO_TE_CORRELATION_ID() / PERFETTO_TE_CORRELATION_ID_STR() in the C SDK and PerfettoTrackEventBuilder.setCorrelationId() in the Java SDK.TRACE_STATE / PERFETTO_TE_STATE() APIs for state tracks described above.heapprofd’s process_cmdline now supports partial wildcard matching (e.g. system_* or /system/bin/*), with the same semantics as the perf profiling and Java heap dump data sources. Wildcards only match already-running processes, so configs using them must set no_startup = true.
trace_processor can now load traces directly from URLs and ui.perfetto.dev permalinks:trace_processor query "https://ui.perfetto.dev/#!/?s=<hash>" "select count(*) from slice"
adreno_cmdbatch_retired and adreno_cmdbatch_sync ftrace events are now parsed into GPU timeline slices.perfetto Python package now defaults to a trace_processor binary pinned to the package version instead of downloading the latest build at runtime, making analysis scripts reproducible. Opt back into the old behavior with TraceProcessorConfig.fetch_latest_trace_processor.--enable-relay-endpoint-on=<sock> flag enables it per-socket, while --enable-relay-endpoint keeps its existing semantics.psci_domain_idle_enter / psci_domain_idle_exit for finer-grained CPU power-state insight than cpu_idle alone, plus disp_dpu_line_underrun and panel settings events.system_io_provider_events.trace_processor wrapper. The wrapper now ships inside the skill directory itself, for every install method and agent.A huge thanks to everyone, both inside and outside of Google, who contributed to making Perfetto v57 a success. ♥️
Happy Tracing!
For complete details, see the changelog or view all changes on GitHub.
Download Perfetto v57.1 from our releases page, get started at docs.perfetto.dev, or try the UI directly at ui.perfetto.dev.