Skip to content

Releases: google/perfetto

Perfetto v48.1

15 Oct 10:02
Compare
Choose a tag to compare
v48.1 - 2024-10-14:
  SDK:
    * Fix build with MSVC.

Perfetto v48.0

11 Oct 18:06
Compare
Choose a tag to compare
v48.0 - 2024-10-11:
  Tracing service and probes:
    * Improved accuracy of ftrace event cropping when there are multiple
      concurrent tracing sessions. See `previous_bundle_end_timestamp` in
      ftrace_event_bundle.proto.
    * Increased watchdog timeout to 180s from 30s to make watchdog crashes
      much less likely when system is under heavy load.
  SQL Standard library:
    * Improved CPU cycles calculation in `linux.cpu.utilization` modules:
     `process`, `system` and `thread` by fixing a bug responsible for too high
      CPU cycles values.
    * Introduces functions responsible for calculating CPU cycles with
      breakdown by CPU, thread, process and slice for a given interval.
    * Added `linux.perf.samples` module for easy querying of perf samples
      in traces.
    * Added `stacks.cpu_profiling` module for easy querying of all CPU
      profiling data in traces.
  Trace Processor:
    * Added (partial) support for the Gecko (Firefox) JSON profiler format.
      Parsing is optimized for CPU profiling collected with `perf` and converted
      to the Gecko format. Only parsing of samples is supported; parsing of
      markers and any other features (e.g. colours) is *not* supported.
    * Added (partial) suppoort for the perf script text format from both perf
      and simpleperf. Only parsing files with the default formating or with pids
      included (i.e. `-F +pid`) is supported. Any other formatting options are
      *not* supported.
    * Added support for parsing non-streaming ART method tracing format.
    * Added support for parsing GZIP files with multiple gzip streams.
    * Added support for parsing V8 CPU profling samples from proto traces.
    * Renamed Trace Processor's C++ method `RegisterSqlModule()` to
     `RegisterSqlPackage()`, which better represents the module/package
      relationship. Package is the top level grouping of modules, which are
      objects being included with `INCLUDE PERFETTO MODULE`.
      `RegisterSqlModule()` is still available and runs `RegisterSqlPackage()`.
      `RegisterSqlModule()` will be deprecated in v50.0.
  UI:
    * Scheduling wakeup information now reflects whether the wakeup came
      from an interrupt context. The per-cpu scheduling tracks now show only
      non-interrupt wakeups, while the per-thread thread state tracks either
      link to an exact waker slice or state that the wakeup is from an
      interrupt. Older traces that are recorded without interrupt context
      information treat all wakeups as non-interrupt.
    * Nest global/user async tracks according to their parent/child relationship
      in the trace.
    * Introduced new workspace API which allows nested tracks & multiple
      workspace support.
    * Introduced middle ellipsis in track titles when title text is longer than
      the available space, while preserving the start and end of title text &
      add popup of full title text on hover.
    * Fixed spurious judder issue in popups with tall content.
    * Fixed bug where marker durations were not rendered on selected markers.
    * Removed ChromeScrollJank V1 track (V2 should be used from now on).
    * Major internal changes (affecting pugin developers and core contributors):
      * Removed legacy selection types, use track event selection types going
        forward for all single event selections.
      * Details panels are now attached to the track rather than registered
        separately.
      * Introduced `registerSqlSelectionResolver`, which allow plugins to add
        handlers allowing other parts of the codebase to make selection on
        tracks from other plugins based on a sql table name and id.
      * Changed lifetime of track instances; they are now created on trace load
        by plugins and survive the lifetime of the trace, rather than getting
        created and destroyed as they appear/disappear on the timeline.
      * Fix circular dependencies and turn future instances into errors.

Perfetto v47.0

07 Aug 17:47
Compare
Choose a tag to compare
v47.0 - 2024-08-07:
  SQL Standard library:
    * Removed `cpu.cpus` and `cpu.size` modules. The functions inside
      for guessing core type were inaccurate and often misleading.
      There is no replacement for these as there is no accurate data
      source available.
    * Moved `cpu.utilization` package to `linux.cpu.utilization`. The
      functionality inside this package only works properly on Linux
      and Linux derived OSes (e.g. Android).
    * Moved `cpu.freq` module to `linux.cpu.frequency` and renamed
      `cpu_freq_counters` to `cpu_frequency_counters` for the same
      reason as above.
    * Moved `gpu.frequency` to `android.gpu.frequency` for the same reason as
      above.
    * Moved `cpu.idle` module to `linux.cpu.idle` or `linux.cpu.idle_stats` for
      the same reason as above.
    * Moved content of `linux.cpu_idle` into `linux.cpu.idle` and
      `linux.cpu.idle_stats` to make it consistent with above changes.
    * Moved `memory.android.gpu` to `android.memory.gpu`  to make it consistent
      with above changes.`
    * Moved contents of `memory.linux.process` to `linux.memory.process` and
      `android.memory.process` to make it consistent with above changes.
    * Moved `memory.linux.high_watermark` to `linux.memory.high_watermark` to
      make it consistent with above changes.
    * Moved `memory.heap_graph_dominator_tree` to
      `android.memory.heap_graph.dominator_tree`. This is to allow for the
      addition of more modules related to heap graphs.
    * Added `linux_kernel_threads` table to `linux.threads` module.
  Trace Processor:
    * Change `NotifyEndOfFile` method to return a Status object. For backwards
      compatibility, this value can be ignored but in the future a [[nodiscard]]
      annotation will be added.
    * Added `CREATE PERFETTO INDEX` to add sqlite-like indexes to Perfetto
      tables. Has the same API as `CREATE INDEX`.
  UI:
    * Updated to Typescript 5.5.2, lib es2022, & upreved various packages.
    * Made `Disposable`, `DisposableStack`, and their async variants available
      to use in the UI.
    * Vastly improved flamegraph.
    * Added track filter which can be used to search for tracks by name.
    * Added Wattson cpu power estimation plugin.
    * Added option to show thread slice ancestor/descendant slices in thread
      slice details panel context menu.
    * Added feature where plugin can ask tracks to be automatically pinned when
      adding tracks on trace load.
    * Fixed inconsistent y-range for all CPU SS tracks.
    * Switched to using explicit de/serialization when creating/loading
      permalinks.
    * Improved sched slice details query efficiency.
    * Added `TagInput` widget.
    * Added `ui/format-sources` script to run eslint and prettier in one go.
    * Reduced number of circular imports.
    * Added `SharedAsyncDisposable` for management of shared async resources.
    * Fixed rendering of negative counter tracks.
    * Improved data loss notification using a popup
    * Tidied up `TrackDescriptor`.
    * Added Android trace probes for ChromeOS
    * Added feature to try reconnect when websocket connection is lost.
    * Fixed bug in 1ns event rendering.
    * Tidied up details panel font sizes and weights.
    * Added segmented buttons widget.
    * Added 'main thread' chip to main thread tracks.
    * Added plugin API to add menu items to the sidebar.
    * Added `onTraceReady` plugin hook.
    * Various clean-ups and bugfixes.

Perfetto v46.0

05 Aug 15:58
Compare
Choose a tag to compare
Perfetto v46.0 Pre-release
Pre-release
v46.0 - 2024-06-13:
  SQL Standard library:
    * Added megacycles support to CPU package. Added tables:
      `cpu_cycles_per_process`, `cpu_cycles_per_thread` and
      `cpu_cycles_per_cpu`.
    * Improved `memory` package. Added `memory.linux.process`,
      `memory.linux.high_watermark` and `memory.android.gpu` modules.
    * Created `gpu` package with `gpu.frequency` module.
    * Migrated `sched.utilization` package to `cpu.utilization`.
  Trace Processor:
    * Added "time to initial display" and "time to full display" metrics to
      the Android startup metric.
  UI:
    * Added plugin for synchronizing two instances of the UI - search for
      'Enable timeline sync with other Perfetto UI tabs' in the command palette.
    * Add builtin prompt functionality to the plugin API:
      I.e. `await PluginContextTrace.prompt('...')`
    * Fixed various bits of tech debt.
  SDK:
    * The TRACE_COUNTER macro and CounterTrack constructor no longer accept
      `const char *` track names. In case your code fails to compile,
      https://perfetto.dev/docs/instrumentation/track-events#dynamic-event-names
      explains how to fix the problem.

Perfetto v45.0

09 May 18:03
Compare
Choose a tag to compare
v45.0 - 2024-05-09:
  Trace Processor:
    * Optimised single column `DISTINCT` queries.
    * Optimised `LIMIT` and `OFFSET` queries.
  SQL Standard library:
    * Improved support for querying startups on Android 9 (API level 28) and
      below. Available in `android.startup.startups` module.
    * Added tables for querying "Time To Initial Display" and "Time To Full
      Display" metrics for app startups. Available in new module
      `android.startup.time_to_display`.
    * Added table for querying hardware power rail counters in new
      `android.power_rails` module.
  UI:
    * Add tracks to the list of searchable items.
    * Use mipmaps to improve track query performance on large traces.
    * Fix slow scrolling bug in ftrace explorer tab on low DPI machines.
    * Overhaul track decider queries to improve trace load times.
    * Add track
    * Tidy up command names & remove some example ones.
    * Remove arg auto-completion in pivot table.
    * Show dominator tree views by default.
    * Fix counter event selection off-by-one error.
    * Add viewport control to the plugin API.
    * Sticky track titles to improve track button accessibility in tall tracks.
    * A handful of small bugfixes.
  SDK:
    * The TRACE_EVENT macro used to reject `const char *` event names: either
      `StaticString` or `DynamicString` needed to be specified. In the last year
      (since https://r.android.com/2494614), TRACE_EVENT mistakenly accepted
      `const char *` as an event name. This has been fixed now. In case your
      code fails to compile,
      https://perfetto.dev/docs/instrumentation/track-events#dynamic-event-names
      explains how to fix the problem.

Perfetto v44.0

10 Apr 12:59
Compare
Choose a tag to compare
v44.0 - 2024-04-10:
  Trace Processor:
    * New modules added to standard library: `frames.timeline`,
      `frame.per_frame_metrics`, `sched.time_in_state`.
  UI:
    * Per-cpu scheduling tracks now distinguish real-time priority threads with
      a hatched pattern and name prefix. Based on priority during switch-in.
    * Added ftrace event cropping for traces recorded by perfetto v44+.
      Events are ignored if they precede the earliest timestamp covered by all
      per-cpu data streams. This should significantly improve the presentation
      of RING_BUFFER traces, removing artifacts such as never-ending slices
      starting at the beginning of the trace.
    * Significantly improved trace load times.
    * Improved counter track view modes, including log scale, expanded view, and
      the ability for plugin authors to link scales of several counter tracks
      together.
    * Add dominated size and objects to Java heap graph view.
      Added hotkey Q to open and close bottom drawer.
    * Fixed bug where timeline header and tracks could become horizontally
      misaligned when using browser zoom.
    * Fixed crash when hot-reloading Sass during development.
    * Fixed bug where crashed debug tracks could not be closed.
    * Fixed missing flame graph details for area selections.
    * Consistent reporting of durations for incomplete slices.
    * Switch to using prettier for formatting TS & Sass instead of ESLint.
  SDK:
    * "track_event" categories are disabled by default in the C API, if they
      don't match anything in the data source config. This behavior differs from
      the C++ API. Configs should include either `enabled_categories: "*"` or
      `disable_categories: "*"` to explicitly specify the desired behavior that
      work both for C and C++.

Perfetto v43.1

05 Mar 18:41
Compare
Choose a tag to compare
https://android.googlesource.com/platform/external/perfetto/+/refs/tags/v43.1
https://github.com/google/perfetto/tree/v43.1

v43.1 - 2024-03-05:
  Tracing service and probes:
    * Cherry-pick of https://r.android.com/2988674, which fixes the android x86
      standalone build.

v43.0 - 2024-03-05:
  Tracing service and probes:
    * Buffers marked as `transfer_on_clone` will be flushed independently when
      cloning.
    * ftrace: added drain_buffer_percent option to read kernel ring buffer
      based on occupancy in addition to existing periodic reads. Requires Linux
      kernel v6.1+.
    * ftrace: changed default kernel per-cpu ring buffer sizes if a config
      doesn't request an explicit size via buffer_size_kb. Added
      buffer_size_lower_bound option that lets the service choose a bigger ring
      buffer size than requested.
    * "linux.process_stats" data source: added options to record: process age,
      time spent running in userspace, and time spent running in kernel mode,
      using /proc/pid/stat. See "record_process_age" and
      "record_process_runtime" options.
  Trace Processor:
    * Added `decompress_packets` mode to the traceconv tool.
    * Support memory mapped file access on Windows.
    * Deprecated `common` standard library module, it will be removed by v45.
      Some of the functionality have been migrated to other parts of standard
      library.
  UI:
    * Added a "defaultPlugins" list to allow control over which plugins are
      enabled by default.
    * Added a feature to allow enabling/disabling plugins permanently from the
      plugins page.
    * Added plugin load times to the plugin page.
    * Added scrolling to the pinned track area.
    * Added commands for expanding and closing all tracks.
    * Added {expand,collapse}GroupsByPredicate to plugin API.
    * Added SimpleSliceTrack & SimpleCounterTrack which have the same
      functionality of debug tracks but may be added on trace load from within
      plugins.
    * Added naive track crash containment, which means tracks that crash should
      not crash the entire UI.
    * Don't render "idle" kernel thread slices in thread state tracks.
    * Fixed crash when using autofill in text inputs in chrome.
    * Fixed bug where "incomplete" slices were sometimes not rendered.
    * Fixed crash when calls to CacheStorage fail via promise rejection.
    * Fixed bug causing slices to occasionally disappear in tracks v2.
    * Fixes crash in tracksV2 when visible window is negative.
    * Fix bug when toggling the sidebar without a trace loaded would either
      crash the UI or simply not work.
    * Various TabsV2 QoL improvements.
    * Various AndroidLongBatteryTracing plugin improvements.

v42.0 - 2024-02-02:
  Tracing service and probes:
    * Linux/Android: kernel scheduling data (sched_switch and sched_waking
      ftrace events) is now serialised in a more compact format by default
      (previously required setting ftrace_config.compact_sched.enabled).
  UI:
    * Added "Realtime (Trace TZ)" timestamp formatting option to see timestamps
      in the local time of the traced device. It requires recent versions of the
      tracing service which set the system_info.timezone_off_mins field.
    * Added tab support to the plugin API.
    * Added a plugin to improve visualization of Android power traces containing
      ODPM (on-device power rail monitor) data.
    * Added support to attach the UI via ?rpc_port=1234 to multiple instances of
      trace_processor --httpd --http-port=1234 (see UI docs).
    * Fixed OOM detection message on in-memory tables.
    * Fixed rendering of events at the every beginning and end of the trace.
    * Fixed rendering of low density slices.
    * Fixed bug in filterVisibleSlices (Thanks to Liangliang Sui).
  SDK:
    * Fixed a bug that would cause DataSource::OnStop to be called twice upon
      service disconnection with HandleStopAsynchronously().
    * Fixed a long standing bug that caused the last TracePacket for every
      sequence to be lost during scraping, for data sources that do not support
      flushing. The fix works with old versions of the tracing service.

Perfetto v42.0

05 Mar 18:41
Compare
Choose a tag to compare
v42.0 - 2024-02-02:
  Tracing service and probes:
    * Linux/Android: kernel scheduling data (sched_switch and sched_waking
      ftrace events) is now serialised in a more compact format by default
      (previously required setting ftrace_config.compact_sched.enabled).
  UI:
    * Added "Realtime (Trace TZ)" timestamp formatting option to see timestamps
      in the local time of the traced device. It requires recent versions of the
      tracing service which set the system_info.timezone_off_mins field.
    * Added tab support to the plugin API.
    * Added a plugin to improve visualization of Android power traces containing
      ODPM (on-device power rail monitor) data.
    * Added support to attach the UI via ?rpc_port=1234 to multiple instances of
      trace_processor --httpd --http-port=1234 (see UI docs).
    * Fixed OOM detection message on in-memory tables.
    * Fixed rendering of events at the every beginning and end of the trace.
    * Fixed rendering of low density slices.
    * Fixed bug in filterVisibleSlices (Thanks to Liangliang Sui).
  SDK:
    * Fixed a bug that would cause DataSource::OnStop to be called twice upon
      service disconnection with HandleStopAsynchronously().
    * Fixed a long standing bug that caused the last TracePacket for every
      sequence to be lost during scraping, for data sources that do not support
      flushing. The fix works with old versions of the tracing service.

Perfetto v41.0

11 Jan 14:54
Compare
Choose a tag to compare
v41.0 - 2023-01-02:
  Tracing service and probes:
    * Added support for ADB_SERVER_SOCKET in the websocket bridge.
    * Added support for reading Pressure Stall Information (PSI) from the kernel.
  Trace Processor:
    * Added capability to control trace processor using stdin/stdout when using
      shell binary. This acts as a simpler alternative to the existing HTTP
      control API.
    * Fixed multiple edge-case issues in RestoreInitialTables.
  SDK:
    * Fixed a long standing bug that caused the last TrackEvent event for each
      thread to be lost during scraping. The fix works with old versions of the
      tracing service.

Perfetto v40.0

05 Dec 12:48
Compare
Choose a tag to compare
v40.0 - 2023-12-04:
  Tracing service and probes:
    * Added support for collecting battery voltage from the Android Power HAL.
    * Added support for emitting machine id from producers on remote hosts.
  Trace Processor:
    * Added of flow id from trace as a column in the flow table.
    * Fixed computation of trace_bounds table when using UI native acceleration.
  UI:
    * Switched to use "v2" querying and rendering system for tracks by default.