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.