v54.0 - 2026-02-27:
Tracing service and probes:
* Breaking change: Removed `TraceConfig.no_flush_before_write_into_file` and
replaced it with `TraceConfig.write_flush_mode` enum to provide more
granular control over flushing behavior when streaming traces into a file.
* Breaking change for traced_relay users: data sources no longer match
remote machine producers by default. To restore the previous behaviour,
set `TraceConfig.trace_all_machines` to true.
* Added `perfetto --no-clobber` CLI option to prevent overwriting existing
files.
* Fixed a bug that would cause remote producers (data sources in VMs) to
lose data on the end of the trace due to lack of scraping.
* Added `android.user_list` data source to list Android users.
* Added support for FWTP counter traces and `fwtp_perfetto_slice` ftrace
event.
* Added suppport for referring to target buffers by name rather than index.
Trace Processor:
* Added support for Collapsed Stack format (from Brendan Gregg's FlameGraph
tools). This format uses semicolon-separated stack frames with a count,
e.g., "main;foo;bar 100".
* Added support for Firefox Profiler's preprocessed JSON format.
* Removed deprecated `RegisterSqlModule()` C++ API (use
`RegisterSqlPackage()` instead) and
`--add-sql-module`/`--override-sql-module` shell flags (use
`--add-sql-package`/`--override-sql-package` instead). These were
deprecated in v48.0.
* Added support for specifying custom package names in `--add-sql-package`
and `--override-sql-package` flags using `PATH[@PACKAGE]` syntax. The
Python API now provides a `SqlPackage` class for typed configuration.
* Breaking change: Removed `stack_id` and `parent_stack_id`
columns from the slice table. The `ancestor_slice_by_stack` and
`descendant_slice_by_stack` table functions have been moved to the
`slices.stack` stdlib module. These features were poorly named and often
misused. See https://perfetto.dev/docs/analysis/perfetto-sql-backcompat
for migration guidance.
* Breaking change: TrackEvent log messages are now parsed into
"track_event.log_message.message" arg instead of "track_event.log_message"
to ensure that arg set can be converted into a valid json.
* Breaking change: `machine_id` is now a non-nullable column in all Trace
Processor tables. The host machine is now consistently represented by 0
instead of NULL.
* Breaking change: Refactored the `metadata` table to support multi-trace
and multi-machine traces. Added `trace_id` and `machine_id` columns to
associate entries with their specific context.
* Added support for R8 retracing during deobfuscation. Improves
deobfuscation quality for some supported profiling types.
SQL Standard library:
* Added `heap_graph_stats` module and added dmabuf support.
* Added `intent` and `component` columns to `android_anrs` table.
* Added relevant threads jank CUJ module and counter-based weighted jank
metrics.
UI:
* Added support for opening any public-readable https:// trace using url=
parameter. See https://perfetto.dev/docs/visualization/deep-linking-to-perfetto-ui#option-1-direct-url-for-public-traces
for more information.
* Changed the way heap profiles are rendered: rather than an arrow with a
snapshot from start, use a slice that represents the time period covered
since the last snapshot. Also support aggregation on area selection.
* Added summary tracks for slice tracks and merged them with scheduling
summaries.
* Added present configs to the recording page to allow easy configuration
of traces for common system health problems on Android and Chrome.
* Added capability to download trace config files in one click from
the recording page.
* Landed various improvements for DataGrid (table viewer component):
* Added configurable pivot table support.
* Added glob, contains, and not-contains filters.
* Added a distinct value picker for filters.
* Added snap-to-boundaries feature for precise time selection. When
dragging selection handles or creating area selections, the cursor
automatically snaps to nearby slice boundaries to enable exact
measurement of slice durations. Hold Alt to temporarily disable snapping.
* Performance optimizations:
* Improved dataset search performance
* Optimized visualization of argument values.
* Reduced jank when panning/zooming on busy tracks.
SDK:
* Added inotify support for UNIX sockets: if traced is unavailable or
crashes, on Linux and Android we reconnect immediately after the socket
has been recreated rather than relying on periodic retries.
* Added `ClearIncrementalState` method to data source traits to allow
data sources to have custom clearing logic instead of creating/destroying
state on every clear.
Misc:
* Added automatic detection of profile type when using `traceconv profile`.
* Upgraded standalone Bazel version to 8.5.0.
* Switched Bazel usage to be fully based on bzlmod as, on Bazel 8,
WORKSPACE builds are no longer supported.