Skip to content

Releases: google/perfetto

Perfetto v27.0

04 Jul 11:56

Choose a tag to compare

v27.0 - 2022-07-01:
  Tracing service and probes:
    * Fix rare crash due to watchdog timeout being too short.
  Trace Processor:
    * Removed enable_perfetto_x64_cpu_opt by default for x64 MacOS
      since it caused issues for CIs.
    * Improved performance of filtering and sorting on most queries.
  UI:
    * Changed sorting of process groups to take slice count and presence of
      perf profiles into account.
  SDK:
    * 

Perfetto v26.1

13 Jun 18:19

Choose a tag to compare

v26.1 - 2022-06-13:
  Trace Processor:
    * Fixed build failures on Windows.


v26.0 - 2022-06-13:
  Tracing service and probes:
    * Added wildcard (*) support when targeting processes by their command line
      in the Android perf profiler ("linux.perf" data source) and Java heap
      snapshots ("android.java_hprof").
    * Added support for kernel thread sampling, and kernel-only callstacks in
      the Android perf profiler.
    * Fixed rare crash when parsing zero-length ftrace __data_loc strings.
    * Fixed rare crash on 4.19 kernel when encountering unexpected zero-padded
      ftrace pages.
    * Removed capturing of thread_time_in_state (per-UID, per-OOM-adj time).
      The data was unused and subsumed by correlating sched data with power
      rail monitors.
  Trace Processor:
    * Added CREATE_VIEW_FUNCTION operator to define a SQL function that can
      return a temporary table and yield multiple rows and columns.
    * Changed kernel threads to be represented as single-thread processes in
      Linux system traces. The (incorrect) legacy behaviour was to treat them
      as threads of the kthreadd process.
    * Added ABS_TIME_STR function which converts a trace timestamp to
      an ISO8601 string.
    * Added ingestion for phase='R' events, used by performance.{now,mark}().
    * Changed 'trace_to_text' to be named 'traceconv'. The source
      location also moved from 'tools/trace_to_text' to 'src/traceconv'.
    * Changed compiler flags, added -mavx2. The previous patch in v22.0 was
      supposed to add AVX2 support but added only AVX.
    * Changed the handling of the last per-cpu sched slices: rather than
      extending the last event to the end of the trace, the last scheduling
      event has a -1 duration. UIs are supposed to deal with visual extension.
    * Removed android_thread_time_in_state metric. It was an experiment and was
      unused.
    * Removed `instant` table. All instant events are now 0-duration events in
      the `slice` table.
    * Removed the /raw_query REST endpoint from --httpd. This will break very
      old clients that have not switched over the new streaming-based /query
      endoint or even newer /websocket.
  UI:
    * Changed detail panel to separate slice args from generic slice properties.
    * Automatically enabled sched_compact when generating trace configs for 
      Android S+ targets.
  SDK:
    * Added option for recording thread CPU times at the beginning and end of
      each slice.
    * Added perfetto::DynamicString() to use non-literal strings as event names
      in the TRACE_EVENT API.
    * Remove the pre-SDK consumer_api_deprecated interface. It was introduced
      for iorapd, now deleted from the Android tree.

Perfetto v25.0

04 Apr 21:17

Choose a tag to compare

v25.0 - 2022-04-01:
  Tracing service and probes:
    * Added prebuilts for mac-arm64.
    * Removed merged trace and config protos from Bazel. Embedder should
      instead depend on the non-merged proto targets.
    * Added FtraceConfig.disable_generic_events. If set, the ftrace data source
      will not emit events for which it doesn't have a compile-time proto
      message.
    * Added ingestion support for cros_ec (CrOS sensors) ftrace events.
    * Added ingestion support for kvm trace events.
    * Added reporting of atrace failures. Now they are bubbled up to the UI
      rather than causing atrace data to be silently missing.
  Trace Processor:
    * Added prebuilts for mac-arm64.
    * Changed LIKE comparisions to be case-insenstive. This reverts the change
      introduced in v22. GLOB should be used where case senstive searches are
      desired; built-in metrics continue to require the use of GLOB.
    * Added an optional dependency from trace processor onto a subset of
      sources from llvm-project for function name demangling. Bazel embedders
      might need to update their PERFETTO_CONFIG in perfetto_cfg.bzl to opt in
      or out of the new dependency. See
      perfetto/bazel/standalone/perfetto_cfg.bzl for details.
  UI:
    * Added flow arrows between binder transaction pairs (request/reply
      and async send/async recv).
  SDK:
    * Added support for writing typed proto messages inside DebugAnnotations.
    * Added support for delta encoding of timestamps for TrackEvents.
      To disable it, refer to `disable_incremental_timestamps` flag in
      `track_event_config.proto`.
  Tools:
    * Added support of gzip-compressed traces to traceconv.
    * Changed `traceconv text` to use an internal proto->pbtx converter rather
      than relying on libprotobuf. It could cause some small divergencies in the
      output format vs past releases.
    * Added tools/cpu_profile helper script to capture traces with callstack
      samples.

Perfetto v24.2

11 Feb 09:48

Choose a tag to compare

v24.2 - 2022-02-10:
  SDK:
    * Revert of incremental timestamps, introduced in v24.0.
      Some clients were depending on non-incremental timestamps.
      Future releases will re-enable this but offer an opt-out.


v24.1 - 2022-02-09:
  Tracing service and probes:
    * Fixed build failures on Windows.
  Trace Processor:
    * Fixed build failures on Windows.


v24.0 - 2022-02-08:
  Tracing service and probes:
    * Added "cpufreq_period_ms" in data source "linux.sys_stats" to poll
      /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq periodically.
    * Added support for Trusty TEE workqueue events.
    * Added support for more PMU events in traced_perf.
    * Changed output format of perfetto --query. Made the output more compact
      and added a summary of ongoing tracing sessions for the caller UID.
    * Changed timeout for traced stall detection from 2s to 4s.
    * Changed internal buffer management to split trace filtering in smaller
      tasks and avoid too large memory allocation when filtering.
    * Fixed a bug that could cause producers to see Flush() requests after an
      OnStop() and mis-behave if the tracing session is extremely short.
  Trace Processor:
    * Added support for passing multiple SQL statements to ExecuteQuery(). All
      queries will be executed fully, with the returned iterator yielding rows
      for the final statement.
    * Added support for multi-line SQL comments; previously only single line
      comments were supported.
  UI:
    * Added support for parsing instant events from legacy systrace formats.
    * Added ingestion and visualization for inet_sock_set_state and
      tcp_retransmit_skb events, showing TCP connections on dedicated tracks.
    * Changed HTTP+RPC to use the /websocket endpoint available in newer
      versions of trace_processor --httpd.
    * Changed text selection/copy: now allowed by default for DOM elements.
    * Changed search to also lookup slices by ID when the term is a number.
    * Changed postMessage() API, suppressed confirmation dialog when the opener
      is in the same origin, for cases when the UI is self-hosted.
  SDK:
    * Changed timestamps emitted by the SDK to be incremental by default, using
      ClockSnapshot + TracePacketDefaults.

Perfetto v24.1

09 Feb 14:47

Choose a tag to compare

v24.1 - 2022-02-09:
  Tracing service and probes:
    * Fixed build failures on Windows.
  Trace Processor:
    * Fixed build failures on Windows.
  UI:
    *
  SDK:
    *


v24.0 - 2022-02-08:
  Tracing service and probes:
    * Added "cpufreq_period_ms" in data source "linux.sys_stats" to poll
      /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq periodically.
    * Added support for Trusty TEE workqueue events.
    * Added support for more PMU events in traced_perf.
    * Changed output format of perfetto --query. Made the output more compact
      and added a summary of ongoing tracing sessions for the caller UID.
    * Changed timeout for traced stall detection from 2s to 4s.
    * Changed internal buffer management to split trace filtering in smaller
      tasks and avoid too large memory allocation when filtering.
    * Fixed a bug that could cause producers to see Flush() requests after an
      OnStop() and mis-behave if the tracing session is extremely short.
  Trace Processor:
    * Added support for passing multiple SQL statements to ExecuteQuery(). All
      queries will be executed fully, with the returned iterator yielding rows
      for the final statement.
    * Added support for multi-line SQL comments; previously only single line
      comments were supported.
  UI:
    * Added support for parsing instant events from legacy systrace formats.
    * Added ingestion and visualization for inet_sock_set_state and
      tcp_retransmit_skb events, showing TCP connections on dedicated tracks.
    * Changed HTTP+RPC to use the /websocket endpoint available in newer
      versions of trace_processor --httpd.
    * Changed text selection/copy: now allowed by default for DOM elements.
    * Changed search to also lookup slices by ID when the term is a number.
    * Changed postMessage() API, suppressed confirmation dialog when the opener
      is in the same origin, for cases when the UI is self-hosted.
  SDK:
    *

Perfetto v23.0

12 Jan 19:09

Choose a tag to compare

v23.0 - 2022-01-11:
  Tracing service and probes:
    * Added workaround for a kernel ftrace bug causing some "comm" fields to be
      not null-terminated. https://github.com/torvalds/linux/commit/f0a5157803 .
    * Added ability to talk to the newer AIDL-based health hal in traced_probes.
      It still falls back on the older HIDL interface for older devices.
  Trace Processor:
    * Changed the argument for the trace path in constructor of TraceProcessor
      in the Python API from |file_path| to |trace|.
      |file_path| is deprecated and may be removed in the future.
    * Changed the Python API constructor. Now it takes a TraceProcessorConfig
      instead of passing parameters directly. This may break existing code
      but migration should be trivial (all current options are still
      supported).
    * Fixed a HTTP keepalive bug in trace_processor --httpd. The bug, introduced
      in v22.0, caused each RPC request to close the connection, effectively
      defeating the 'Connection: Keep-Alive', after each query made by the UI.
    * Added parsing of netif_receive_skb events from proto traces.
    * Added android_netperf metric based on netif events.
    * Fixed a bug that would cause fetch errors when loading traces > 32 MB when
      using trace_processor --httpd.
    * Added a workaround to tokenize properly /proc/pid/cmdline for chrome
      processes on Linux/CrOS. Chrome rewrites its cmdline replacing \0 -> ' '.
  UI:
    *
  SDK:

Perfetto v22.1

07 Dec 20:57

Choose a tag to compare

v22.1 - 2021-12-07:
  Tracing service and probes:
    * Added workaround for a Linux kernel bug causing some ftrace strings to
      be non-null-terminated (https://github.com/torvalds/linux/commit/f0a5157).
  Trace Processor:
    * Fixed build failures on Windows.


v22.0 - 2021-12-03:
  Tracing service and probes:
    * Added Android SDK version to the SystemInfo trace packet.
    * Changed compiler flags. Assume recent x64 CPUs (-msse4.2 -mavx -mpopcnt).
      This behavior affects only standalone builds and can be changed by setting
      enable_perfetto_x64_cpu_opt=false in the GN args.
    * The java heap profiler now rescans all the processes every time for
      continous_dump_config. The scan_pids_only_on_start can be used to restore
      the old behavior.
    * Added support for building on ARM Macs.
    * Added support for the rss_stat_throttled event on Android via
      FtraceConfig.throttle_rss_stat. In newer Android kernels the base rss_stat
      event is now unthrottled. rss_stat used to be throttled by a downstream
      kernel change, unnecessary after https://lkml.org/lkml/2021/10/25/1411 .
      atrace.rc configures throttling from userspace at boot.
    * Fixed a bug that caused IPCs to stall traced and hit the watchdog if in
      the middle of a suspend/resume. Switched from SND_TIMEO to poll(POLLOUT).
    * Added "linux.sysfs_power" data source to poll /sys/class/power_supply/
      and report periodically battery charge and drain rate if supported.
  Trace Processor:
    * Speeded up proto trace ingestion by 2x (~20 MB/s -> ~40 MB/s).
    * Changed LIKE comparisions to be case-senstive. This may break existing
      queries but was a necessary from a performance perspective.
      Going forward, GLOB must be used, instead of LIKE, for checked in metrics
      to avoid unnecessary slowdowns.
    * Changed compiler flags, assume recent x64 CPUs (see above).
    * Changed how displayTimeUnit is handled in JSON traces to match catapult.
    * Added websocket endpoint to RPC interface to reduce query latency.
    * Added support for hot-reloading metrics (see //docs/analysis/metrics.md).
  UI:
    * Added ability to save/restore record config. Remember last used config.
    * Fixed bug causing the recording page to hold onto the USB interface making
      adb unusable after a recording session.
  SDK:
    * Added UpdateDataSource() descriptor IPC endpoint to allow updates of the
      data source capabilities (e.g., category list for track event).

Perfetto v21.0

02 Nov 23:48

Choose a tag to compare

v21.0 - 2021-11-01:
  Tracing service and probes:
    * Added reporting of last 8 PERFETTO_LOG() entries and crash keys to
      crash tombstones on Android.
    * Changed kallsym parser to save 100ms for starting a tracing session with
      enable_ksyms=true.
    * Removed advertisement of the built-in data sources "android.heapprofd",
      "android.java_hprof", "linux.perf" on Linux and other platforms. Built-in
      data sources are only used to lazy-start daemons on Android OS.
    * Changed ACL files on Android atrace.rc to support to up to 24 ftrace cpus.
      No change on Linux which remains unlimited.
  Trace Processor:
    * Changed protobuf decoders to use less stack and fall back on heap sooner
      (before: 16KB of stack per decoder, after: 1.6KB). It caused problems with
      some embedders which use smaller per-thread stacks.
    * Added support for SPAN OUTER JOIN on unpartitioned tables.
    * Improved performance of as_pandas_dataframe() in the Python API by 16x.
  UI:
    * Added visualization of direct_reclaim ftrace events.
  SDK:
    * Added perfetto::{Flow,TerminatingFlow} to the track-event library.

Perfetto v20.1

05 Oct 10:11

Choose a tag to compare

v20.1 - 2021-10-05:
  Tracing service and probes:
    * Fixed standalone Windows build. Updated the llvm-win toolchain.


v20.0 - 2021-10-03:
  Tracing service and probes:
    * Removed DCHECK that would cause crashes when a debug build of the service
      is used with a producer built with -DNDEBUG.
    * Changed the service-side field-level filtering configuration protobuf
      field number, because the feature had a bug. This is effectively
      equivalent to deprecating the feature and reintroducing it under a
      different name.
    * Added support for boot tracing on Android. Early kernel tracing (prior to
      the point when /data is mounted) is not yet supported. For instructions
      see /docs/case-studies/android-boot-tracing.md .
  Trace Processor:
    * Added reqiurement of separating queries by semi-colon (;) followed by
      new-line when specifying a query file with -q to trace processor shell.
    * Added "ancestor_slice_by_stack" and "descendant_slice_by_stack" table
      functions to walk up and down the slice stacks.
    * Overhauled windowed sorting to be based on packet ordering and
      lifecycle events inside the trace instead of time-based ordering.
    * Removed |SortingMode::kForceFlushPeriodWindowedSort| due to changes to the
      sorting algorithm, which is now based on Flush events rather than time.
      Embedders should switch to |SortingMode::kDefaultHeuristics|. Other
      SortingMode enum values are no-ops and will be removed in future versions.
  UI:
    * Added initial flamegraph support for traced_perf callstack samples.
    * Added initial Pivot table for aggregation of userspace slices. The feature
      is disabled by default for and requires manual enabling via
      https://ui.perfetto.dev/#!/flags .
  SDK:
    * Changed DCHECK and DLOGs to be always disabled in SDK builds, regardless
      of NDEBUG.

Perfetto v19.0

23 Sep 10:02

Choose a tag to compare

v19.0 - 2021-09-02:
  Tracing service and probes:
    * Added ftrace clock reporting to the trace.
  Trace Processor:
    * Added support for longs/doubles to RUN_METRIC.
    * Added power profile data for sunfish, redfin, and bramble.
    * Added experimental Python library for computing slice breakdowns.
    * Fixed parsing of JSON escape sequences.
    * Fixed JSON trace detection.
  UI:
    * Added local cacheing of traces. Traces are reloaded in case of refresh or
      tab being discarded by the browser.
    * Added icon to distinguish metric-derived tracks.
    * Added release channel selector to feature flags page.
    * Fixed crash with null slice names.
  SDK:
    * Added some missing NESTABLE_ASYNC legacy trace macros.
    * Fixed reporting of producer uid in --query.
    * Fixed version numbering scheme for minor versions. Previously versions
      were numbered as like v19.0.42 where 42 represented the number of commits
      since the last major version release. This was ambiguous in the presence
      of branches. Now versions are numbered like v19.0-ab12cd34 where ab12cd34
      is the shortened Git commit-ish.