Skip to content

Perfetto v54.0

Latest

Choose a tag to compare

@primiano primiano released this 02 Mar 13:03
· 290 commits to main since this release
7616314
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.