1Unreleased: 2 Tracing service and probes: 3 * Removed mm_events support as it is no longer maintained. 4 SQL Standard library: 5 * 6 Trace Processor: 7 * Added `thread_or_process_slice` to the `slices.with_context` module for 8 a unified table which contains all thread and process slices in the trace. 9 This is often useful for ad-hoc queries on Android or Linux traces. 10 * Removed `slices.slices` module and `_slice_with_thread_and_process_info` 11 view. This is replaced by `thread_or_process_slice` (see above). 12 UI: 13 * 14 SDK: 15 * Added `TraceWriter::drop_count` function for determining the number of 16 of times the writer started dropping data due to exhaustion of the shared 17 memory buffer. This can be used by SDK users to diff this value and 18 reemit interned data if necessary. 19 20 21v49.0 - 2025-01-06: 22 Tracing service and probes: 23 * Add `--clone-by-name` to the perfetto command line. This allows cloning a 24 tracing session by its unique_session_name. 25 * Fixed a bug that would delay the trace start acknowledgement, resulting 26 in a 30s when using --background-wait, if an Android producer process is 27 frozen, as it would be considered unresponsive. 28 * Added basic support for kprobes with ftrace. 29 SQL Standard library: 30 * Removed the `type` column from all non-track tables. Please see 31 https://perfetto.dev/docs/analysis/perfetto-sql-backcompat#change-in-semantic-of-code-type-code-column-on-track-tables 32 for more information. 33 * Changed the semantic of `type` column from all track tables. Please see 34 https://perfetto.dev/docs/analysis/perfetto-sql-backcompat#removal-of-code-type-code-column-from-all-non-track-tables 35 for more information. 36 * Removed the `linux_device_track` table. Linux RPM (runtime power 37 management) tracks formerly in this table now can be found in the `track` 38 table with `type` `linux_rpm`. 39 * Removed the `energy_counter_track` table. Android energy estimate 40 breakdown tracks formerly in this table now can be found in the `track` 41 table with `type` `android_energy_estimation_breakdown`. 42 * Removed the `energy_per_uid_counter_track` table. Android energy estimate 43 breakdown tracks formerly in this table now can be found in the `track` 44 table with `type` `android_energy_estimation_breakdown_per_uid`. 45 * Moved the `gpu_work_period_track` table into the `android.gpu.work_period` 46 standard library module and renamed it to `android_gpu_work_period_track`. 47 * Removed the `irq_counter_track` table. Irq counter tracks formerly in this 48 table now can be found in the `track` table with `type` 49 `irq_counter`. 50 * Removed the `softirq_counter_track` table. Softirq counter tracks formerly 51 in this table now can be found in the `track` table with `type` 52 `softirq_counter`. 53 * Removed the `uid_counter_track` table. It was redundant as no data was 54 inserted directly into it. 55 * Removed the `uid_track` table. It was redundant as no data was 56 inserted directly into it. 57 * Removed `common` package. It has been deprecated since `v42` and most 58 functionality has been moved into other packages. Notably, the time 59 conversion functions can be found in `time.conversion` module, and 60 `thread_slice` is available with `slices.with_context`. 61 * Deprecated UINT and INT integer types in Perfetto SQL. Please use LONG in 62 Perfetto SQL schema. 63 * Deprecated FLOAT flating type in Perfetto SQL. Please use DOUBLE in 64 Perfetto SQL schema. 65 * Added TIMESTAMP, DURATION, ID and JOINID types to Perfetto SQL schema. 66 TIMESTAMP and DURATION refers to time columns in nanoseconds. ID column 67 is a primary key for the column and JOINID is referencing ID 68 column of other table. 69 * Removed the `experimental_sched_upid` table. Prefer the joining `sched` 70 and `thread` tables directly instead. 71 * Removed the experimental_counter_dur table. Prefer using the 72 `counter_leading_intervals` macro from the `counters.intervals` standard 73 library module. 74 UI: 75 * Introduced `Open table:` command which would open any Perfetto Standard 76 Library table in a new tab. 77 * Fixed behaviour of sorting and nesting of track event tracks for counter 78 tracks, thread tracks and process tracks. 79 * Various improvements to timeline rendering performance. 80 * Added workspace switcher and menu to move tracks between workspaces. 81 * Completely overhauled recording page. 82 * Improved area selection UX. 83 * Improved fuzzy search. 84 * Hide 'Open with legacy UI' by default. 85 SDK: 86 * Added `NamedTrack`, it allows creating arbitrarily named tracks. 87 88 89v48.1 - 2024-10-14: 90 SDK: 91 * Fix build with MSVC. 92 93 94v48.0 - 2024-10-11: 95 Tracing service and probes: 96 * Improved accuracy of ftrace event cropping when there are multiple 97 concurrent tracing sessions. See `previous_bundle_end_timestamp` in 98 ftrace_event_bundle.proto. 99 * Increased watchdog timeout to 180s from 30s to make watchdog crashes 100 much less likely when system is under heavy load. 101 SQL Standard library: 102 * Improved CPU cycles calculation in `linux.cpu.utilization` modules: 103 `process`, `system` and `thread` by fixing a bug responsible for too high 104 CPU cycles values. 105 * Introduces functions responsible for calculating CPU cycles with 106 breakdown by CPU, thread, process and slice for a given interval. 107 * Added `linux.perf.samples` module for easy querying of perf samples 108 in traces. 109 * Added `stacks.cpu_profiling` module for easy querying of all CPU 110 profiling data in traces. 111 Trace Processor: 112 * Added (partial) support for the Gecko (Firefox) JSON profiler format. 113 Parsing is optimized for CPU profiling collected with `perf` and converted 114 to the Gecko format. Only parsing of samples is supported; parsing of 115 markers and any other features (e.g. colours) is *not* supported. 116 * Added (partial) suppoort for the perf script text format from both perf 117 and simpleperf. Only parsing files with the default formating or with pids 118 included (i.e. `-F +pid`) is supported. Any other formatting options are 119 *not* supported. 120 * Added support for parsing non-streaming ART method tracing format. 121 * Added support for parsing GZIP files with multiple gzip streams. 122 * Added support for parsing V8 CPU profling samples from proto traces. 123u * Renamed Trace Processor's C++ method `RegisterSqlModule()` to 124 `RegisterSqlPackage()`, which better represents the module/package 125 relationship. Package is the top level grouping of modules, which are 126 objects being included with `INCLUDE PERFETTO MODULE`. 127 `RegisterSqlModule()` is still available and runs `RegisterSqlPackage()`. 128 `RegisterSqlModule()` will be deprecated in v50.0. 129 UI: 130 * Scheduling wakeup information now reflects whether the wakeup came 131 from an interrupt context. The per-cpu scheduling tracks now show only 132 non-interrupt wakeups, while the per-thread thread state tracks either 133 link to an exact waker slice or state that the wakeup is from an 134 interrupt. Older traces that are recorded without interrupt context 135 information treat all wakeups as non-interrupt. 136 * Nest global/user async tracks according to their parent/child relationship 137 in the trace. 138 * Introduced new workspace API which allows nested tracks & multiple 139 workspace support. 140 * Introduced middle ellipsis in track titles when title text is longer than 141 the available space, while preserving the start and end of title text & 142 add popup of full title text on hover. 143 * Fixed spurious judder issue in popups with tall content. 144 * Fixed bug where marker durations were not rendered on selected markers. 145 * Removed ChromeScrollJank V1 track (V2 should be used from now on). 146 * Major internal changes (affecting pugin developers and core contributors): 147 * Removed legacy selection types, use track event selection types going 148 forward for all single event selections. 149 * Details panels are now attached to the track rather than registered 150 separately. 151 * Introduced `registerSqlSelectionResolver`, which allow plugins to add 152 handlers allowing other parts of the codebase to make selection on 153 tracks from other plugins based on a sql table name and id. 154 * Changed lifetime of track instances; they are now created on trace load 155 by plugins and survive the lifetime of the trace, rather than getting 156 created and destroyed as they appear/disappear on the timeline. 157 * Fix circular dependencies and turn future instances into errors. 158 SDK: 159 * 160 161 162v47.0 - 2024-08-07: 163 SQL Standard library: 164 * Removed `cpu.cpus` and `cpu.size` modules. The functions inside 165 for guessing core type were inaccurate and often misleading. 166 There is no replacement for these as there is no accurate data 167 source available. 168 * Moved `cpu.utilization` package to `linux.cpu.utilization`. The 169 functionality inside this package only works properly on Linux 170 and Linux derived OSes (e.g. Android). 171 * Moved `cpu.freq` module to `linux.cpu.frequency` and renamed 172 `cpu_freq_counters` to `cpu_frequency_counters` for the same 173 reason as above. 174 * Moved `gpu.frequency` to `android.gpu.frequency` for the same reason as 175 above. 176 * Moved `cpu.idle` module to `linux.cpu.idle` or `linux.cpu.idle_stats` for 177 the same reason as above. 178 * Moved content of `linux.cpu_idle` into `linux.cpu.idle` and 179 `linux.cpu.idle_stats` to make it consistent with above changes. 180 * Moved `memory.android.gpu` to `android.memory.gpu` to make it consistent 181 with above changes.` 182 * Moved contents of `memory.linux.process` to `linux.memory.process` and 183 `android.memory.process` to make it consistent with above changes. 184 * Moved `memory.linux.high_watermark` to `linux.memory.high_watermark` to 185 make it consistent with above changes. 186 * Moved `memory.heap_graph_dominator_tree` to 187 `android.memory.heap_graph.dominator_tree`. This is to allow for the 188 addition of more modules related to heap graphs. 189 * Added `linux_kernel_threads` table to `linux.threads` module. 190 Trace Processor: 191 * Change `NotifyEndOfFile` method to return a Status object. For backwards 192 compatibility, this value can be ignored but in the future a [[nodiscard]] 193 annotation will be added. 194 * Added `CREATE PERFETTO INDEX` to add sqlite-like indexes to Perfetto 195 tables. Has the same API as `CREATE INDEX`. 196 UI: 197 * Updated to Typescript 5.5.2, lib es2022, & upreved various packages. 198 * Made `Disposable`, `DisposableStack`, and their async variants available 199 to use in the UI. 200 * Vastly improved flamegraph. 201 * Added track filter which can be used to search for tracks by name. 202 * Added Wattson cpu power estimation plugin. 203 * Added option to show thread slice ancestor/descendant slices in thread 204 slice details panel context menu. 205 * Added feature where plugin can ask tracks to be automatically pinned when 206 adding tracks on trace load. 207 * Fixed inconsistent y-range for all CPU SS tracks. 208 * Switched to using explicit de/serialization when creating/loading 209 permalinks. 210 * Improved sched slice details query efficiency. 211 * Added `TagInput` widget. 212 * Added `ui/format-sources` script to run eslint and prettier in one go. 213 * Reduced number of circular imports. 214 * Added `SharedAsyncDisposable` for management of shared async resources. 215 * Fixed rendering of negative counter tracks. 216 * Improved data loss notification using a popup 217 * Tidied up `TrackDescriptor`. 218 * Added Android trace probes for ChromeOS 219 * Added feature to try reconnect when websocket connection is lost. 220 * Fixed bug in 1ns event rendering. 221 * Tidied up details panel font sizes and weights. 222 * Added segmented buttons widget. 223 * Added 'main thread' chip to main thread tracks. 224 * Added plugin API to add menu items to the sidebar. 225 * Added `onTraceReady` plugin hook. 226 * Various clean-ups and bugfixes. 227 228 229v46.0 - 2024-06-13: 230 SQL Standard library: 231 * Added megacycles support to CPU package. Added tables: 232 `cpu_cycles_per_process`, `cpu_cycles_per_thread` and 233 `cpu_cycles_per_cpu`. 234 * Improved `memory` package. Added `memory.linux.process`, 235 `memory.linux.high_watermark` and `memory.android.gpu` modules. 236 * Created `gpu` package with `gpu.frequency` module. 237 * Migrated `sched.utilization` package to `cpu.utilization`. 238 Trace Processor: 239 * Added "time to initial display" and "time to full display" metrics to 240 the Android startup metric. 241 UI: 242 * Added plugin for synchronizing two instances of the UI - search for 243 'Enable timeline sync with other Perfetto UI tabs' in the command palette. 244 * Add builtin prompt functionality to the plugin API: 245 I.e. `await PluginContextTrace.prompt('...')` 246 * Fixed various bits of tech debt. 247 SDK: 248 * The TRACE_COUNTER macro and CounterTrack constructor no longer accept 249 `const char *` track names. In case your code fails to compile, 250 https://perfetto.dev/docs/instrumentation/track-events#dynamic-event-names 251 explains how to fix the problem. 252 253 254v45.0 - 2024-05-09: 255 Trace Processor: 256 * Optimised single column `DISTINCT` queries. 257 * Optimised `LIMIT` and `OFFSET` queries. 258 SQL Standard library: 259 * Improved support for querying startups on Android 9 (API level 28) and 260 below. Available in `android.startup.startups` module. 261 * Added tables for querying "Time To Initial Display" and "Time To Full 262 Display" metrics for app startups. Available in new module 263 `android.startup.time_to_display`. 264 * Added table for querying hardware power rail counters in new 265 `android.power_rails` module. 266 UI: 267 * Add tracks to the list of searchable items. 268 * Use mipmaps to improve track query performance on large traces. 269 * Fix slow scrolling bug in ftrace explorer tab on low DPI machines. 270 * Overhaul track decider queries to improve trace load times. 271 * Add track 272 * Tidy up command names & remove some example ones. 273 * Remove arg auto-completion in pivot table. 274 * Show dominator tree views by default. 275 * Fix counter event selection off-by-one error. 276 * Add viewport control to the plugin API. 277 * Sticky track titles to improve track button accessibility in tall tracks. 278 * A handful of small bugfixes. 279 SDK: 280 * The TRACE_EVENT macro used to reject `const char *` event names: either 281 `StaticString` or `DynamicString` needed to be specified. In the last year 282 (since https://r.android.com/2494614), TRACE_EVENT mistakenly accepted 283 `const char *` as an event name. This has been fixed now. In case your 284 code fails to compile, 285 https://perfetto.dev/docs/instrumentation/track-events#dynamic-event-names 286 explains how to fix the problem. 287 288 289v44.0 - 2024-04-10: 290 Trace Processor: 291 * New modules added to standard library: `frames.timeline`, 292 `frame.per_frame_metrics`, `sched.time_in_state`. 293 UI: 294 * Per-cpu scheduling tracks now distinguish real-time priority threads with 295 a hatched pattern and name prefix. Based on priority during switch-in. 296 * Added ftrace event cropping for traces recorded by perfetto v44+. 297 Events are ignored if they precede the earliest timestamp covered by all 298 per-cpu data streams. This should significantly improve the presentation 299 of RING_BUFFER traces, removing artifacts such as never-ending slices 300 starting at the beginning of the trace. 301 * Significantly improved trace load times. 302 * Improved counter track view modes, including log scale, expanded view, and 303 the ability for plugin authors to link scales of several counter tracks 304 together. 305 * Add dominated size and objects to Java heap graph view. 306 Added hotkey Q to open and close bottom drawer. 307 * Fixed bug where timeline header and tracks could become horizontally 308 misaligned when using browser zoom. 309 * Fixed crash when hot-reloading Sass during development. 310 * Fixed bug where crashed debug tracks could not be closed. 311 * Fixed missing flame graph details for area selections. 312 * Consistent reporting of durations for incomplete slices. 313 * Switch to using prettier for formatting TS & Sass instead of ESLint. 314 SDK: 315 * "track_event" categories are disabled by default in the C API, if they 316 don't match anything in the data source config. This behavior differs from 317 the C++ API. Configs should include either `enabled_categories: "*"` or 318 `disable_categories: "*"` to explicitly specify the desired behavior that 319 work both for C and C++. 320 321 322v43.2 - 2024-03-07: 323 UI: 324 * Added redirection to pinned UI version when using 325 `trace_processor_shell --httpd` and pinned version is available. 326 327 328v43.1 - 2024-03-05: 329 Tracing service and probes: 330 * Cherry-pick of https://r.android.com/2988674, which fixes the android x86 331 standalone build. 332 333 334v43.0 - 2024-03-05: 335 Tracing service and probes: 336 * Buffers marked as `transfer_on_clone` will be flushed independently when 337 cloning. 338 * ftrace: added drain_buffer_percent option to read kernel ring buffer 339 based on occupancy in addition to existing periodic reads. Requires Linux 340 kernel v6.1+. 341 * ftrace: changed default kernel per-cpu ring buffer sizes if a config 342 doesn't request an explicit size via buffer_size_kb. Added 343 buffer_size_lower_bound option that lets the service choose a bigger ring 344 buffer size than requested. 345 * "linux.process_stats" data source: added options to record: process age, 346 time spent running in userspace, and time spent running in kernel mode, 347 using /proc/pid/stat. See "record_process_age" and 348 "record_process_runtime" options. 349 Trace Processor: 350 * Added `decompress_packets` mode to the traceconv tool. 351 * Support memory mapped file access on Windows. 352 * Deprecated `common` standard library module, it will be removed by v45. 353 Some of the functionality have been migrated to other parts of standard 354 library. 355 UI: 356 * Added a "defaultPlugins" list to allow control over which plugins are 357 enabled by default. 358 * Added a feature to allow enabling/disabling plugins permanently from the 359 plugins page. 360 * Added plugin load times to the plugin page. 361 * Added scrolling to the pinned track area. 362 * Added commands for expanding and closing all tracks. 363 * Added {expand,collapse}GroupsByPredicate to plugin API. 364 * Added SimpleSliceTrack & SimpleCounterTrack which have the same 365 functionality of debug tracks but may be added on trace load from within 366 plugins. 367 * Added naive track crash containment, which means tracks that crash should 368 not crash the entire UI. 369 * Don't render "idle" kernel thread slices in thread state tracks. 370 * Fixed crash when using autofill in text inputs in chrome. 371 * Fixed bug where "incomplete" slices were sometimes not rendered. 372 * Fixed crash when calls to CacheStorage fail via promise rejection. 373 * Fixed bug causing slices to occasionally disappear in tracks v2. 374 * Fixes crash in tracksV2 when visible window is negative. 375 * Fix bug when toggling the sidebar without a trace loaded would either 376 crash the UI or simply not work. 377 * Various TabsV2 QoL improvements. 378 * Various AndroidLongBatteryTracing plugin improvements. 379 380 381v42.0 - 2024-02-02: 382 Tracing service and probes: 383 * Linux/Android: kernel scheduling data (sched_switch and sched_waking 384 ftrace events) is now serialised in a more compact format by default 385 (previously required setting ftrace_config.compact_sched.enabled). 386 UI: 387 * Added "Realtime (Trace TZ)" timestamp formatting option to see timestamps 388 in the local time of the traced device. It requires recent versions of the 389 tracing service which set the system_info.timezone_off_mins field. 390 * Added tab support to the plugin API. 391 * Added a plugin to improve visualization of Android power traces containing 392 ODPM (on-device power rail monitor) data. 393 * Added support to attach the UI via ?rpc_port=1234 to multiple instances of 394 trace_processor --httpd --http-port=1234 (see UI docs). 395 * Fixed OOM detection message on in-memory tables. 396 * Fixed rendering of events at the every beginning and end of the trace. 397 * Fixed rendering of low density slices. 398 * Fixed bug in filterVisibleSlices (Thanks to Liangliang Sui). 399 SDK: 400 * Fixed a bug that would cause DataSource::OnStop to be called twice upon 401 service disconnection with HandleStopAsynchronously(). 402 * Fixed a long standing bug that caused the last TracePacket for every 403 sequence to be lost during scraping, for data sources that do not support 404 flushing. The fix works with old versions of the tracing service. 405 406 407v41.0 - 2024-01-11: 408 Tracing service and probes: 409 * Added support for ADB_SERVER_SOCKET in the websocket bridge. 410 * Added support for reading Pressure Stall Information (PSI) from the kernel. 411 Trace Processor: 412 * Added capability to control trace processor using stdin/stdout when using 413 shell binary. This acts as a simpler alternative to the existing HTTP 414 control API. 415 * Fixed multiple edge-case issues in RestoreInitialTables. 416 SDK: 417 * Fixed a long standing bug that caused the last TrackEvent event for each 418 thread to be lost during scraping. The fix works with old versions of the 419 tracing service. 420 421 422v40.0 - 2023-12-04: 423 Tracing service and probes: 424 * Added support for collecting battery voltage from the Android Power HAL. 425 * Added support for emitting machine id from producers on remote hosts. 426 Trace Processor: 427 * Added of flow id from trace as a column in the flow table. 428 * Fixed computation of trace_bounds table when using UI native acceleration. 429 UI: 430 * Switched to use "v2" querying and rendering system for tracks by default. 431 432 433v39.0 - 2023-11-15: 434 Tracing service and probes: 435 * Added reporting of TZ offset under system_info.timezone_off_mins . 436 * Added no_flush option to DataSourceDescriptor to avoid unnecessary IPC 437 roundtrips to flush data sources like track_event that rely uniquely on 438 server-side scraping. 439 * Added support for running on Linux & Android systems configured with 16K 440 pagetables. 441 Trace Processor: 442 * Added android_boot metric. 443 * Added new PerfettoSQL syntax (CREATE PERFETTO VIEW) for adding schemas to views. 444 * Added support for the perf.data import format. 445 * Added dvfs and cpu_idle to stdlib. 446 UI: 447 * Added a new type of debug tracks: counter. 448 * Improved visualization of timestamps for durations. 449 450 451v38.0 - 2023-10-10: 452 Tracing service and probes: 453 * Added capability to transfer and clear buffers on CLONE_SNAPSHOT. 454 * Added new service for relaying IPC messages from local producers to a 455 remote tracing instance. 456 Trace Processor: 457 * Added new PerfettoSQL syntax (INCLUDE PERFETTO MODULE) for including 458 tables/views/functions defined in SQL modules. 459 * Added new PerfettoSQL syntax (CREATE PERFETTO TABLE) for defining analytic 460 tables in SQL. 461 * Added new PerfettoSQL syntax (CREATE PERFETTO MACRO) for defining macros 462 in SQL. 463 * Added TO_REALTIME function to convert timestamps to the realtime clock. 464 * Added support for parsing binder_command and binder_return events. 465 UI: 466 * Added support for zooming when using deep-links. 467 * Added track for displaying screenshots in traces. 468 * Added support for displaying UTC timestamps. 469 * Added capability to list, search and debug plugin tracks. 470 * Added plugins with commands for pinning tracks for latency and large 471 screen debugging in Android. 472 473 474v37.0 - 2023-08-10: 475 Tracing service and probes: 476 * Fixed a bug which would cause sessions cloned with CLONE_SNAPSHOT to not 477 inherit the trace filtering config. 478 * Fixed a bug that would cause flushes to be acked prematurely in 479 traced_probes if the android.package_list data source is present. 480 SDK: 481 * Fix build with MSVC. 482 UI: 483 * Added command palette (CTRL/Meta+Shift+P). 484 * Added grouping of global tracks into groups to reduce visual pollution. 485 * Added ability to toggle timestamps between trace / boot / wall time. 486 * Added recording UI for callstack sampler. 487 * Added "Viz" page to run chart query results with Vega-Lite. 488 * Highlight debuggable apps, which might have worse performance 489 characteristics, with a chip on the corresponding tracks. 490 Misc: 491 * master -> main branch migration. HEAD is now main, master is for now a 492 mirror and will become a stale frozen snapshot. 493 494 495v36.1 - 2023-07-06: 496 Trace Processor: 497 * Fix compile on Windows. 498 499 500v36.0 - 2023-07-05: 501 Tracing service and probes: 502 * Fixed unnecessary reads of thread files /proc when scraping process names. 503 Trace Processor: 504 * Rewrote filtering engine to be significantly faster on a wide range of 505 common queries. 506 * Significantly improved quality of PerfettoSQL error messages. 507 * Added API to retrieve last executed statement from iterator. 508 * Added support for filtering rows by a regex. 509 UI: 510 * Fixed flow events working for async tracks. 511 * Added table viewer for slice-like tables. 512 SDK: 513 * Reduce binary size impact of macro and template expansions. 514 515 516v35.0 - 2023-06-07: 517 Tracing service and probes: 518 * Compression has been moved from perfetto_cmd to traced. Now compression is 519 supported even with write_into_file. The `compress_from_cli` config option 520 can be used to restore the old behavior. 521 * Changed the android.statsd datasource to batch multiple atoms into 522 a single trace packet. This improves performance and information 523 density. 524 Trace Processor: 525 * Fixed protozero parsing code to support field ids larger than 526 2^16 - 1. protozero now supports field ids up to 1,000,000 527 See https://github.com/google/perfetto/issues/510. 528 UI: 529 * Add support for deep links into the UI via query parameters. 530 * Fixed multiple issues around the display of track event log 531 messages See https://github.com/google/perfetto/issues/507. 532 533 534v34.0 - 2023-05-02: 535 Tracing service and probes: 536 * --continuous-dump in tools/java_heap_dump now keeps recording until it 537 receives CTRL+C. 538 * Add CLONE_SNAPSHOT triggers for non-destructive snapshots of the trace 539 buffer without tracing interruption. 540 UI: 541 * Add support for parsing large integers from Trace Processor into 542 bigint. This is the default behaviour for unknown fields and can 543 be enabled specifically via the LONG and LONG_NULL column types. 544 SDK: 545 * Changed the type of the static constexpr metadata on protozero 546 generated bindings from a function returning the metadata to 547 metadata itself. For a field 'foo' the variable kFoo previously 548 defined as: 549 `static constexpr FieldMetadata_Foo kFoo() = { return {}; };` 550 it is now defined as: 551 `static constexpr FieldMetadata_Foo kFoo;` 552 This is a breaking change for users who directly access field 553 metadata. 554 * The new DataSourceBase::OnFlush() method allows users to properly handle 555 Flush requests. 556 557 558v33.1 - 2023-03-03: 559 Identical to v33.0. Version was bumped to work around prebuilt infra failures. 560 561 562v33.0 - 2023-03-02: 563 All: 564 * Switched to a C++17-only project by removing C++11 opt-out. This completes 565 the migration started in v31.0. 566 SDK: 567 * Tracing::Initialize() can be called more than once to initialize different 568 backends separately. 569 * Reduce binary size impact of autogenerated code. 570 571 572v32.2 - 2023-02-16: 573 SDK: 574 * Fix MSVC warnings. 575 576 577v32.1 - 2023-02-01: 578 Trace Processor: 579 * Fix build on windows. 580 581 582v32.0 - 2023-02-01: 583 Tracing service and probes: 584 * Added an explicit TraceUuid packet. The tracing service now always 585 generates a UUID, even if TraceConfig.trace_uuid_msb/lsb is empty. 586 Trace Processor: 587 * 588 UI: 589 * 590 SDK: 591 * Add perfetto::Tracing::ActivateTriggers() function. 592 * Made it possible to declare track event categories in a C++ namespace 593 with PERFETTO_DEFINE_CATEGORIES_IN_NAMESPACE, allowing multiple category 594 sets to be used in one same translation unit. Correspondingly, the 595 PERFETTO_COMPONENT_EXPORT and PERFETTO_TRACK_EVENT_NAMESPACE macros have 596 been deprecated in favor of this new functionality. 597 * Deprecated the PERFETTO_COMPONENT_EXPORT macro in favor of 598 PERFETTO_DEFINE_CATEGORIES_IN_NAMESPACE_WITH_ATTRS. 599 * Added TracingInitArgs::enable_system_consumer configuration option, that 600 allows the linker to discard the consumer IPC, if not required. 601 602 603v31.0 - 2022-11-10: 604 Tracing service and probes: 605 * Added support for collecting Android Trusty ftrace events. 606 * Fixed resetting syscall filter when recording selected syscalls. 607 Trace Processor: 608 * Improved error messages on SQL syntax errors. 609 * Improved performance of queries containing GLOB. Handling of GLOB 610 constraints now happens inside trace processor instead of SQLite. 611 * Added support for parsing Android Trusty ftrace events. 612 UI: 613 * Added support for metatracing UI code and integrate with trace processor 614 metatracing. 615 * Added support for scrolling to a time region using the postMessage API. 616 * Enabled Pivot table functionality by default. 617 * Fixed downloading of Java heap profiles. 618 SDK: 619 * Switched to require C++17 by default. A time-limited opt-out exists but 620 is planned to be removed in v34. Please contact us at 621 perfetto-dev@googlegroups.com if you have thoughts or concerns on this 622 move. 623 624 625v30.0 - 2022-10-06: 626 Trace Processor: 627 * Fixed parsing of "R+" (preempted) and "I" (idle kernel thread) end states 628 of sched_switch events, collected on Linux kernels v4.14 and above. 629 Previously, preemption was not recognised, and idle was reported as 630 "x" (task dead). See commit c60a630cfe0. 631 * Add support for parsing sys_write syscalls. 632 * Remove the thread_slice table: all columns have moved to the slice table 633 and thread_slice exists as a view for backwards compatibility. This view 634 will also be removed in the future 635 * Add Base64 encode SQL function. 636 * Add support for importing function graph ftrace events. 637 * Add support for importing V4L2 ftrace events. 638 * Add support for importing virtio-video ftrace events. 639 UI: 640 * Fix downloading profiles from flamegraphs. 641 * Enable Pivot table support by default. 642 SDK: 643 * Add support for disallowing concurrent tracing sessions. 644 645 646v29.0 - 2022-09-06: 647 Tracing service and probes: 648 * Add support for only tracing selected syscalls. By selecting only syscalls 649 of interest, usage of the trace buffer and performance impact on device 650 is reduced. 651 * Add support for parsing DSI ftrace events. 652 Trace Processor: 653 * Make calling NotifyEndOfFile more than once an error: this was deprecated 654 in v28. Flush should be used instead for all by the final call. 655 * Add parsing and ingestion for V4L2 events. 656 * Upgraded SQLite to 3.39.2. 657 UI: 658 * Add support for searching Android log events. 659 * Group kernel wakelock tracks into a single track group. 660 SDK: 661 * Added support for startup tracing. Tracing can be started in an app 662 before it connects to the tracing service. 663 The data sources which are started for startup tracing, will 664 be automatically adopted to normal tracing session once we start 665 normal tracing session. 666 * Added the |first_packet_on_sequence| boolean which is set the first packet 667 emitted on each TraceWriter. 668 669 670v28.0 - 2022-08-02: 671 Tracing service and probes: 672 * Add android.statsd datasource. 673 * Removed log spam about sys.trace.traced_started in standalone builds. 674 * Changed kallsyms parsing in traced_probes (ftrace) to be always 675 synchronous (when starting the trace, rather than on the first batch). 676 * Added ksyms_mem_policy = KSYMS_RETAIN_FOREVER config to avoid destroying 677 and re-parsing kallsysm repeatedly in benchmark runs. 678 * Improve heap profiling shutdown: now the shared memory buffer where 679 alloc/free records are stored is properly flushed when stopping the data 680 source. 681 * Fixed race condition in the daemonization path of perfetto --background. 682 It would cause daemonization failures if the TTY is destroyed immediately. 683 Trace Processor: 684 * Deprecate calling NotifyEndOfFile more than once: Flush should instead be 685 used for all but the final call. 686 * Added ingestion and visualization of I2C transactions. 687 UI: 688 * Changed callstack sampling selection: selecting one sample now only shows 689 one stacktrace, selecting multiple samples shows the aggregation. 690 SDK: 691 * Fixed a bug (b/239725760) that would cause abstract sockets using the 692 "@name" syntax in PERFETTO_CONSUMER_SOCK_NAME/PERFETTO_PRODUCER_SOCK_NAME 693 to have a trailing \0 in the socket name. This breaks interoperability 694 with adb forwarding. This is a tracing protocol breaking change. Nobody 695 seems to be relying on @abstract syntax across different versions of 696 client vs service. 697 * Changed the mangling scheme for protozero enums nested in another message: 698 instead of OuterClass_Enum_VALUE, the enum values will be just named 699 VALUE with the enum itself wrapped in a perfetto_pbzero_enum_OuterClass 700 namespace to prevent naming collisions. This will allow the users 701 to alias the enum directly and use throughout their code. 702 The exact name mangling scheme is a carry-over from libprotobuf and 703 an internal implementation detail, so nobody should be relying on that. 704 * Added protozero::EnumToString() to convert enum keys to string literals. 705 706 707v27.1 - 2022-07-11: 708 SDK: 709 * Added an API for shutting down Perfetto. 710 711 712v27.0 - 2022-07-01: 713 Tracing service and probes: 714 * Fix rare crash due to watchdog timeout being too short. 715 Trace Processor: 716 * Removed enable_perfetto_x64_cpu_opt by default for x64 MacOS 717 since it caused issues for CIs. 718 * Improved performance of filtering and sorting on most queries. 719 UI: 720 * Changed sorting of process groups to take slice count and presence of 721 perf profiles into account. 722 SDK: 723 * 724 725 726v26.1 - 2022-06-13: 727 Trace Processor: 728 * Fixed build failures on Windows. 729 730 731v26.0 - 2022-06-13: 732 Tracing service and probes: 733 * Added wildcard (*) support when targeting processes by their command line 734 in the Android perf profiler ("linux.perf" data source) and Java heap 735 snapshots ("android.java_hprof"). 736 * Added support for kernel thread sampling, and kernel-only callstacks in 737 the Android perf profiler. 738 * Fixed rare crash when parsing zero-length ftrace __data_loc strings. 739 * Fixed rare crash on 4.19 kernel when encountering unexpected zero-padded 740 ftrace pages. 741 * Removed capturing of thread_time_in_state (per-UID, per-OOM-adj time). 742 The data was unused and subsumed by correlating sched data with power 743 rail monitors. 744 Trace Processor: 745 * Added CREATE_VIEW_FUNCTION operator to define a SQL function that can 746 return a temporary table and yield multiple rows and columns. 747 * Changed kernel threads to be represented as single-thread processes in 748 Linux system traces. The (incorrect) legacy behaviour was to treat them 749 as threads of the kthreadd process. 750 * Added ABS_TIME_STR function which converts a trace timestamp to 751 an ISO8601 string. 752 * Added ingestion for phase='R' events, used by performance.{now,mark}(). 753 * Changed 'trace_to_text' to be named 'traceconv'. The source 754 location also moved from 'tools/trace_to_text' to 'src/traceconv'. 755 * Changed compiler flags, added -mavx2. The previous patch in v22.0 was 756 supposed to add AVX2 support but added only AVX. 757 * Changed the handling of the last per-cpu sched slices: rather than 758 extending the last event to the end of the trace, the last scheduling 759 event has a -1 duration. UIs are supposed to deal with visual extension. 760 * Removed android_thread_time_in_state metric. It was an experiment and was 761 unused. 762 * Removed `instant` table. All instant events are now 0-duration events in 763 the `slice` table. 764 * Removed the /raw_query REST endpoint from --httpd. This will break very 765 old clients that have not switched over the new streaming-based /query 766 endoint or even newer /websocket. 767 UI: 768 * Changed detail panel to separate slice args from generic slice properties. 769 * Automatically enabled sched_compact when generating trace configs for 770 Android S+ targets. 771 SDK: 772 * Added option for recording thread CPU times at the beginning and end of 773 each slice. 774 * Added perfetto::DynamicString() to use non-literal strings as event names 775 in the TRACE_EVENT API. 776 * Remove the pre-SDK consumer_api_deprecated interface. It was introduced 777 for iorapd, now deleted from the Android tree. 778 779 780v25.0 - 2022-04-01: 781 Tracing service and probes: 782 * Added prebuilts for mac-arm64. 783 * Removed merged trace and config protos from Bazel. Embedder should 784 instead depend on the non-merged proto targets. 785 * Added FtraceConfig.disable_generic_events. If set, the ftrace data source 786 will not emit events for which it doesn't have a compile-time proto 787 message. 788 * Added ingestion support for cros_ec (CrOS sensors) ftrace events. 789 * Added ingestion support for kvm trace events. 790 * Added reporting of atrace failures. Now they are bubbled up to the UI 791 rather than causing atrace data to be silently missing. 792 Trace Processor: 793 * Added prebuilts for mac-arm64. 794 * Changed LIKE comparisions to be case-insenstive. This reverts the change 795 introduced in v22. GLOB should be used where case senstive searches are 796 desired; built-in metrics continue to require the use of GLOB. 797 * Added an optional dependency from trace processor onto a subset of 798 sources from llvm-project for function name demangling. Bazel embedders 799 might need to update their PERFETTO_CONFIG in perfetto_cfg.bzl to opt in 800 or out of the new dependency. See 801 perfetto/bazel/standalone/perfetto_cfg.bzl for details. 802 UI: 803 * Added flow arrows between binder transaction pairs (request/reply 804 and async send/async recv). 805 SDK: 806 * Added support for writing typed proto messages inside DebugAnnotations. 807 * Added support for delta encoding of timestamps for TrackEvents. 808 To disable it, refer to `disable_incremental_timestamps` flag in 809 `track_event_config.proto`. 810 Tools: 811 * Added support of gzip-compressed traces to traceconv. 812 * Changed `traceconv text` to use an internal proto->pbtx converter rather 813 than relying on libprotobuf. It could cause some small divergencies in the 814 output format vs past releases. 815 * Added tools/cpu_profile helper script to capture traces with callstack 816 samples. 817 818 819v24.2 - 2022-02-10: 820 SDK: 821 * Revert of incremental timestamps, introduced in v24.0. 822 Some clients were depending on non-incremental timestamps. 823 Future releases will re-enable this but offer an opt-out. 824 825 826v24.1 - 2022-02-09: 827 Tracing service and probes: 828 * Fixed build failures on Windows. 829 Trace Processor: 830 * Fixed build failures on Windows. 831 832 833v24.0 - 2022-02-08: 834 Tracing service and probes: 835 * Added "cpufreq_period_ms" in data source "linux.sys_stats" to poll 836 /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq periodically. 837 * Added support for Trusty TEE workqueue events. 838 * Added support for more PMU events in traced_perf. 839 * Changed output format of perfetto --query. Made the output more compact 840 and added a summary of ongoing tracing sessions for the caller UID. 841 * Changed timeout for traced stall detection from 2s to 4s. 842 * Changed internal buffer management to split trace filtering in smaller 843 tasks and avoid too large memory allocation when filtering. 844 * Fixed a bug that could cause producers to see Flush() requests after an 845 OnStop() and mis-behave if the tracing session is extremely short. 846 Trace Processor: 847 * Added support for passing multiple SQL statements to ExecuteQuery(). All 848 queries will be executed fully, with the returned iterator yielding rows 849 for the final statement. 850 * Added support for multi-line SQL comments; previously only single line 851 comments were supported. 852 UI: 853 * Added support for parsing instant events from legacy systrace formats. 854 * Added ingestion and visualization for inet_sock_set_state and 855 tcp_retransmit_skb events, showing TCP connections on dedicated tracks. 856 * Changed HTTP+RPC to use the /websocket endpoint available in newer 857 versions of trace_processor --httpd. 858 * Changed text selection/copy: now allowed by default for DOM elements. 859 * Changed search to also lookup slices by ID when the term is a number. 860 * Changed postMessage() API, suppressed confirmation dialog when the opener 861 is in the same origin, for cases when the UI is self-hosted. 862 SDK: 863 * Changed timestamps emitted by the SDK to be incremental by default, using 864 ClockSnapshot + TracePacketDefaults. 865 866 867v23.0 - 2022-01-11: 868 Tracing service and probes: 869 * Added workaround for a kernel ftrace bug causing some "comm" fields to be 870 not null-terminated. https://github.com/torvalds/linux/commit/f0a5157803 . 871 * Added ability to talk to the newer AIDL-based health hal in traced_probes. 872 It still falls back on the older HIDL interface for older devices. 873 Trace Processor: 874 * Changed the argument for the trace path in constructor of TraceProcessor 875 in the Python API from |file_path| to |trace|. 876 |file_path| is deprecated and may be removed in the future. 877 * Changed the Python API constructor. Now it takes a TraceProcessorConfig 878 instead of passing parameters directly. This may break existing code 879 but migration should be trivial (all current options are still 880 supported). 881 * Fixed a HTTP keepalive bug in trace_processor --httpd. The bug, introduced 882 in v22.0, caused each RPC request to close the connection, effectively 883 defeating the 'Connection: Keep-Alive', after each query made by the UI. 884 * Added parsing of netif_receive_skb events from proto traces. 885 * Added android_netperf metric based on netif events. 886 * Fixed a bug that would cause fetch errors when loading traces > 32 MB when 887 using trace_processor --httpd. 888 * Added a workaround to tokenize properly /proc/pid/cmdline for chrome 889 processes on Linux/CrOS. Chrome rewrites its cmdline replacing \0 -> ' '. 890 UI: 891 * 892 SDK: 893 * 894 895 896v22.1 - 2021-12-07: 897 Tracing service and probes: 898 * Added workaround for a Linux kernel bug causing some ftrace strings to 899 be non-null-terminated (https://github.com/torvalds/linux/commit/f0a5157). 900 Trace Processor: 901 * Fixed build failures on Windows. 902 903 904v22.0 - 2021-12-03: 905 Tracing service and probes: 906 * Added Android SDK version to the SystemInfo trace packet. 907 * Changed compiler flags. Assume recent x64 CPUs (-msse4.2 -mavx -mpopcnt). 908 This behavior affects only standalone builds and can be changed by setting 909 enable_perfetto_x64_cpu_opt=false in the GN args. 910 * The java heap profiler now rescans all the processes every time for 911 continous_dump_config. The scan_pids_only_on_start can be used to restore 912 the old behavior. 913 * Added support for building on ARM Macs. 914 * Added support for the rss_stat_throttled event on Android via 915 FtraceConfig.throttle_rss_stat. In newer Android kernels the base rss_stat 916 event is now unthrottled. rss_stat used to be throttled by a downstream 917 kernel change, unnecessary after https://lkml.org/lkml/2021/10/25/1411 . 918 atrace.rc configures throttling from userspace at boot. 919 * Fixed a bug that caused IPCs to stall traced and hit the watchdog if in 920 the middle of a suspend/resume. Switched from SND_TIMEO to poll(POLLOUT). 921 * Added "linux.sysfs_power" data source to poll /sys/class/power_supply/ 922 and report periodically battery charge and drain rate if supported. 923 * Add snapshotting for non-BOOTTIME ftrace clocks. This fixes handling of 924 ftrace events from old Linux kernel versions (i.e. 3.x) and adds 925 proper support for using the "global" clock rather than "boot". 926 Trace Processor: 927 * Speeded up proto trace ingestion by 2x (~20 MB/s -> ~40 MB/s). 928 * Changed LIKE comparisions to be case-senstive. This may break existing 929 queries but was a necessary from a performance perspective. 930 Going forward, GLOB must be used, instead of LIKE, for checked in metrics 931 to avoid unnecessary slowdowns. 932 * Changed compiler flags, assume recent x64 CPUs (see above). 933 * Changed how displayTimeUnit is handled in JSON traces to match catapult. 934 * Added websocket endpoint to RPC interface to reduce query latency. 935 * Added support for hot-reloading metrics (see //docs/analysis/metrics.md). 936 * Added ingestion support for non-BOOTTIME ftrace clocks. 937 UI: 938 * Added ability to save/restore record config. Remember last used config. 939 * Fixed bug causing the recording page to hold onto the USB interface making 940 adb unusable after a recording session. 941 SDK: 942 * Added UpdateDataSource() descriptor IPC endpoint to allow updates of the 943 data source capabilities (e.g., category list for track event). 944 945 946v21.0 - 2021-11-01: 947 Tracing service and probes: 948 * Added reporting of last 8 PERFETTO_LOG() entries and crash keys to 949 crash tombstones on Android. 950 * Changed kallsym parser to save 100ms for starting a tracing session with 951 enable_ksyms=true. 952 * Removed advertisement of the built-in data sources "android.heapprofd", 953 "android.java_hprof", "linux.perf" on Linux and other platforms. Built-in 954 data sources are only used to lazy-start daemons on Android OS. 955 * Changed ACL files on Android atrace.rc to support to up to 24 ftrace cpus. 956 No change on Linux which remains unlimited. 957 Trace Processor: 958 * Changed protobuf decoders to use less stack and fall back on heap sooner 959 (before: 16KB of stack per decoder, after: 1.6KB). It caused problems with 960 some embedders which use smaller per-thread stacks. 961 * Added support for SPAN OUTER JOIN on unpartitioned tables. 962 * Improved performance of as_pandas_dataframe() in the Python API by 16x. 963 UI: 964 * Added visualization of direct_reclaim ftrace events. 965 SDK: 966 * Added perfetto::{Flow,TerminatingFlow} to the track-event library. 967 968 969v20.1 - 2021-10-05: 970 Tracing service and probes: 971 * Fixed standalone Windows build. Updated the llvm-win toolchain. 972 973 974v20.0 - 2021-10-03: 975 Tracing service and probes: 976 * Removed DCHECK that would cause crashes when a debug build of the service 977 is used with a producer built with -DNDEBUG. 978 * Changed the service-side field-level filtering configuration protobuf 979 field number, because the feature had a bug. This is effectively 980 equivalent to deprecating the feature and reintroducing it under a 981 different name. 982 * Added support for boot tracing on Android. Early kernel tracing (prior to 983 the point when /data is mounted) is not yet supported. For instructions 984 see /docs/case-studies/android-boot-tracing.md . 985 Trace Processor: 986 * Added reqiurement of separating queries by semi-colon (;) followed by 987 new-line when specifying a query file with -q to trace processor shell. 988 * Added "ancestor_slice_by_stack" and "descendant_slice_by_stack" table 989 functions to walk up and down the slice stacks. 990 * Overhauled windowed sorting to be based on packet ordering and 991 lifecycle events inside the trace instead of time-based ordering. 992 * Removed |SortingMode::kForceFlushPeriodWindowedSort| due to changes to the 993 sorting algorithm, which is now based on Flush events rather than time. 994 Embedders should switch to |SortingMode::kDefaultHeuristics|. Other 995 SortingMode enum values are no-ops and will be removed in future versions. 996 UI: 997 * Added initial flamegraph support for traced_perf callstack samples. 998 * Added initial Pivot table for aggregation of userspace slices. The feature 999 is disabled by default for and requires manual enabling via 1000 https://ui.perfetto.dev/#!/flags . 1001 SDK: 1002 * Changed DCHECK and DLOGs to be always disabled in SDK builds, regardless 1003 of NDEBUG. 1004 1005 1006v19.0 - 2021-09-02: 1007 Tracing service and probes: 1008 * Added ftrace clock reporting to the trace. 1009 Trace Processor: 1010 * Added support for longs/doubles to RUN_METRIC. 1011 * Added power profile data for sunfish, redfin, and bramble. 1012 * Added experimental Python library for computing slice breakdowns. 1013 * Fixed parsing of JSON escape sequences. 1014 * Fixed JSON trace detection. 1015 UI: 1016 * Added local cacheing of traces. Traces are reloaded in case of refresh or 1017 tab being discarded by the browser. 1018 * Added icon to distinguish metric-derived tracks. 1019 * Added release channel selector to feature flags page. 1020 * Fixed crash with null slice names. 1021 SDK: 1022 * Added some missing NESTABLE_ASYNC legacy trace macros. 1023 * Fixed reporting of producer uid in --query. 1024 * Fixed version numbering scheme for minor versions. Previously versions 1025 were numbered as like v19.0.42 where 42 represented the number of commits 1026 since the last major version release. This was ambiguous in the presence 1027 of branches. Now versions are numbered like v19.0-ab12cd34 where ab12cd34 1028 is the shortened Git commit-ish. 1029 1030 1031v18.0 - 2021-08-02: 1032 Tracing service and probes: 1033 * Added cross-compiler toolchains for Linux-{arm,64} based on Debian Sid. 1034 These will be used for generating monthly releases' prebuilts via LUCI. 1035 Trace Processor: 1036 * Added 'android_gpu' metric to report residency information for each GPU 1037 frequency (via `trace_processor_shell --run-metrics android_gpu`). 1038 * Removed the RawQuery RPC interface. 1039 UI: 1040 * Added a highlighted section to thread slices to visualize CPU time 1041 (darker) verses wall time (lighter). 1042 * Added global counter tracks for perf counters (e.g. "CPU 0 cycles", "CPU 0 1043 instructions") when the 'linux.perf' data source (traced_perf) is used. 1044 * Added a (feature) 'Flags' page to enable/disable individual metrics. 1045 * Fixed races that could cause occasional crashes when loading a trace 1046 from a permalink. 1047 SDK: 1048 * Fix undefined reference on ~TracingMuxerFake when building the SDK. 1049 1050 1051v17.0 - 2021-07-02: 1052 Tracing service and probes: 1053 * Fixed a bug in ftrace parsing of absolute timestamps 1054 (RINGBUF_TYPE_TIME_STAMP), encountered on Linux kernels 5.9+. 1055 * Fixed a bug in --save-for-bugreport causing 0-length traces if the 1056 selected trace declared one or more triggers in the config. 1057 * Fixed a bug in tracebox causing the PERFETTO_PRODUCER_SOCK_NAME env 1058 var to be ignored. 1059 Trace Processor: 1060 * Changed CORS headers of --httpd mode to allow only https://ui.perfetto.dev 1061 and http://localhost:10000. This affects only CORS-aware browser clients. 1062 * Added GPU frequency metrics. 1063 UI: 1064 * Fixed ADB connection issues ("unable to reset device") on Windows and Mac. 1065 * Added caching of tracing in the cache storage so that the trace is 1066 re-opened if a tab is killed (Chrome tab discarding or accidental CTRL+W). 1067 SDK: 1068 * Added support for writing track events using custom clock timestamps. 1069 1070 1071v16.1 - 2021-06-08: 1072 Tracing service and probes: 1073 * Cherry-pick of r.android.com/1716718 which missed the v16 branch cut and 1074 fixed MSVC 2019 builds. 1075 1076 1077v16.0 - 2021-06-01: 1078 Tracing service and probes: 1079 * Added support for building most targets (including traced, SDK and 1080 trace_processor_shell) from Windows using either clang-cl or MSVC 2019. 1081 * Added tracebox, a monolithic binary to capture traces with one command 1082 on Linux and older versions of Android (tested on Android Oreo). 1083 * Added support for service-side field-level filtering of traces. The 1084 consumer can pass a filter bytecode and ensure that non-allowed fields 1085 are never emitted in output. 1086 * Added reporting of service version and producer SDK version into the trace 1087 and `perfetto --query`. 1088 * Fixed compatibility with Android versions older than Pie (for sideloading) 1089 which cause failures when trying to enable atrace categories. 1090 Trace Processor: 1091 * Added new RPC interface based on a bidirectional binary pipe. This allows 1092 to simplify integration with out-of-process users. The existing --httpd 1093 interface now exposes a single /rpc endpoint. Older endpoints are still 1094 available for legacy clients. 1095 * Added support for counters and instant events in JSON traces. 1096 * Fixed support of displayTimeUnit in JSON traces. 1097 UI: 1098 * Added warning dialog when trying to use a trace_processor_shell --httpd 1099 which is too old. 1100 * Added warning dialog when trying to use a trace_processor_shell --httpd 1101 RPC instance from more than one tab. 1102 * Added links to convert the trace to JSON or systrace directly from the UI. 1103 * Changed track sorting logic. Tracks are now sorted in groups (e.g., 1104 scheduling tracks, summary tracks, frame timeline tracks). 1105 * Fixed crashes happening flakily when pushing traces via window.open(). 1106 1107 1108v15.0 - 2021-05-05: 1109 Tracing service and probes: 1110 * Added support for {host,target}=aarch64 standalone builds. 1111 * Added --background cmdline switch to traced and traced_probes services. 1112 * Changed trigger_perfetto to ignore unknown command line arguments to 1113 preserve forward compatibility. 1114 * Added -a / --app cmdline argument to tools/record_android_trace. 1115 Trace Processor: 1116 * Added sanitisation of keys in nested debug annotation dictionaries. 1117 * Changed Android startup metric: count CPU time of JIT thread pool, report 1118 timestamp of activities during startup. 1119 * Changed android_surfaceflinger metric, added missed frame counters. 1120 * Changed version of SQLite to 3.35.4. 1121 * Fixed importing of JSON traces with decimal (sub-us) timestamp. 1122 * Fixed prepending "debug." prefix to debug annotations with non-interned 1123 names. 1124 UI: 1125 * Added support to visualize the lifetime of individual dmabuf allocations 1126 as async slices (datasource: already existing ftrace dmabuf event). 1127 * Fixed visualization of unfinished slices to extend to the end of the 1128 viewport. 1129 SDK: 1130 * Added support for passing arbitrary number of debug annotations to 1131 TRACE_EVENT and combining them with lambdas. 1132 * Added support for writing typed TrackEvent arguments using TRACE_EVENT 1133 inline without lambdas. 1134 * Changed ConvertTimestampToTraceTimeNs to be a member of 1135 TraceTimestampTraits<T> struct instead of a standalone function. 1136 * Changed TracedValue to use nested DebugAnnotation proto instead of 1137 DebugAnnotation::NestedValue. 1138 1139 1140v14.0 - 2021-04-01: 1141 Tracing service and probes: 1142 * Added support for polling power rails on Android from the newer 1143 IPowerStats AIDL interface (previously using only the HAL interface). 1144 * Fixed native heap profiler crash when ABI of heapprofd and profiled 1145 process mismatch. 1146 * Changed encoding format of Anroid managed heap profiler to reduce heap 1147 dump sizes by delta-encoding object IDs. 1148 Trace Processor: 1149 * Added activity create/resume, layout inflation and resource timings to 1150 the Android startup metric. 1151 * Added chrome metadata key/value pairs (e.g. chrome version) into the 1152 `metadata` table with 'cr-' prefixed keys. 1153 * Added dma-buf-based memory metrics reporting total/avg/min/max dmabuf 1154 allocation per-dmabuf-heap and per-process. 1155 * Removed |force_full_sort| flag from config. This has been replaced 1156 by setting the sorting mode to force a full sort. 1157 UI: 1158 * Added tools/symbolize-ui-crash script to resolve crash reports via 1159 TypeScript source maps. 1160 * Fixed newlines when copying Android event log lines into the clipboard. 1161 * Fixed crash when selecting "Did not finish" slices. 1162 * Fixed OOM dialog to give actionable instructions when opening large traces 1163 rather than suggesting to file a bug. 1164 SDK: 1165 * Added /meson.build for bundling /sdk/perfetto.{cc,h} in Meson builds. 1166 * Added support for counter trace points with the TRACE_COUNTER macro. 1167 1168 1169v13.0 - 2021-03-01: 1170 Tracing service and probes: 1171 * Added ability to sample callstacks using kernel tracepoints as timebase. 1172 * Added abililty to record the perf timebase counter values into the trace, 1173 both combined callstack+counter or counter-only. 1174 * Added abillity to trigger traces based on VM pressure on Android. Requires 1175 a dedicated tracing instance in $tracefs/instances/mm_events. 1176 Trace Processor: 1177 * Added sorting mode to trace processor config to specify how trace 1178 processor should sort events. The |force_full_sort| flag has been 1179 deprecated (with replacement) and will be removed in the next version. 1180 * Added ingestion of frame timeline events into the 1181 {expected,actual}_frame_timeline_slice tables. 1182 * Added support for Mali's trace_marker_write ftrace event. 1183 * Added memory metric based on newer android_fastrpc kernel events. 1184 UI: 1185 * Added flow events support for instant events and async tracks. 1186 * Added support for Android frame timeline events. They allow inspecting 1187 end-to-end expected vs actual app-to-surfaceflinger frame times. 1188 * Added ability to switch between Canary and Stable channels in the UI. 1189 * Added ability to drag&drop to open trace files. 1190 * Changed UI serving infrastructure, old ui versions can be now retrieved by 1191 directly opening https://ui.perfetto.dev/v12.1.269/ . 1192 * Removed thread state track for threads that have no activity. 1193 SDK: 1194 * Use process start time hashed with the process id as a unique process 1195 identifier, allowing multiple independent users of the SDK in the same 1196 process to interleave their events on shared tracks. 1197 * Record process and thread names into the trace. 1198 * Add ring buffer tracing support, i.e., periodic clearing of incremental 1199 state. 1200 Misc: 1201 * Convert python scripts to python3. 1202 1203 1204v12.1 - 2021-02-01: 1205 Misc: 1206 * Fixed CHANGELOG which was missed in the 12.0 branch cut, causing 1207 mis-labeling of the version code in the v12.x branch as v11.0..N 1208 1209 1210v12.0 - 2021-02-01: 1211 Tracing service and probes: 1212 * Added more helpful error messages if the client library is used without 1213 having been initialized. 1214 * Added //tools/record_android_trace script to facilitate recording traces 1215 from Android devices, automating start + stop-via-ctrl+c + pull + open. 1216 * Added auto-attachment of traces to Android bugreports if dumpstate is 1217 invoked when a trace with bugreport_score > 0 is running. 1218 SDK: 1219 * Added ability to customize the timestamp of events via 1220 ConvertTimestampToTraceTimeNs(). 1221 * Fixed support for category names that contain a space. 1222 Trace Processor: 1223 * Added ingestion and query support for Android end-to-end frame timing 1224 events through the {actual, expected}_frame_timeline_slice tables. 1225 * Added time-to-reportFullyDrawn (Android's API) to startup metrics. 1226 * Fixed excessive memory usage when decoding traces containing callstacks 1227 (https://github.com/google/perfetto/issues/83). 1228 UI: 1229 * Added ability to inspect the full trace config string from the 1230 'Info and stats' page. 1231 * Fixed 'TABLE/VIEW XXX already exists' in the Metrics page when running the 1232 same metric twice. 1233 * Fixed sorting of tracks using numeric sorting instead of lexicographic: 1234 Thread {1, 2, 10, 11, 20} rather than Thread {1, 10, 11, 2, 20}. 1235 * Fixed CSP-related bug that was preventing the UI to work on Firefox. 1236 * Changed max zoom resolution to allow to zoom to sub-us events. 1237 1238 1239v11.0 - 2021-01-01: 1240 Tracing service and probes: 1241 * Added trace packet interceptor API for rerouting trace data into 1242 non-Perfetto systems. 1243 * Added support for printing track events to the console. 1244 * Added a way to observe track event tracing sessions starting and 1245 stopping. 1246 Trace Processor: 1247 * Added "ancestor_slice" and "experimental_ancestor_stack_profile_callsite" 1248 table functions to look up ancestors of CPU stack samples in profiler 1249 tables. 1250 * Added power metric reporting suspend/resume time periods. 1251 UI: 1252 * Fixed CPU time calculation in example queries. 1253 * Added tracks to debug Android SystemUI jank. 1254 1255 1256v10.0 - 2020-12-01: 1257 Tracing service and probes: 1258 * Fixed crash of tracing service if a client is unresponsive on the IPC 1259 channel. Clients are disconnected if they don't respond to IPCs for 10s. 1260 * Added cmdline arguments for integration within ChromeOS system image 1261 (--{producer,consumer}-socket-{group,mode} for chmod-ing sockets). 1262 * Changed path lookup logic for traced socket. /run/perfetto/ is used if the 1263 directory exists, falling back on /tmp/ otherwise. 1264 * Added support for kernel frame symbolization to the traced_perf callstack 1265 sampler. 1266 * Added support for resolving ftrace event arguments that require 1267 symbolization against printk_format. 1268 Trace Processor: 1269 * Added .read command to inject a SQL query file, similar to the -q cmdline. 1270 * Added trace-based metrics to root cause jank in Android System UI. 1271 * Added symbolization support for ELF files on Windows for heap and 1272 callstack profilers. 1273 * Added support for symbolizing names of workqueue ftrace events. 1274 * Improved Android startup metric with activity restart time. 1275 UI: 1276 * Added support for navigating flows with Ctrl+[ / Ctr+]. 1277 * Improved query result panel, moved to the bottom group allowing 1278 simultaneous query result and timeline views. 1279 * Fixed data corruption when recording traces via the WebUSB-based Record 1280 page in the UI. 1281 1282 1283v9.0 - 2020-11-01: 1284 Tracing service and probes: 1285 * Added support for recording traces from a system service through the 1286 client API. 1287 * The client library now reconnects producers automatically if the 1288 connection to the tracing service is lost. Also fixed crashes in ongoing 1289 tracing sessions when a disconnect occurs. 1290 * Added support for dpu and g2d ftrace events. 1291 * Enabled commit batching and producer side patching of chunks. 1292 * Add support for symbolizing kernel symbols for ftrace events. 1293 Trace Processor: 1294 * Fixed type affinity of string columns. 1295 UI: 1296 * Added initial support for running metrics from the UI. 1297 * Added support for displaying all flows when a slice or area is selected. 1298 * Highlight nodes that match the 'focus' string in the flamegraph. 1299 * Added search within slice args. 1300 * Fixed details panel height and moved query panel into details panel. 1301 * Enabled re-sharing of postMessage traces by echoing back the original URL. 1302 * Improved record page error messages. 1303 1304 1305v8.0 - 2020-10-01: 1306 Tracing service and probes: 1307 * Added API for querying registered data sources and their capabilities. 1308 * Added support for profiling heap allocations on Linux via LD_PRELOAD. 1309 * Fixed possible race when initializing the consumer library. 1310 * Fixed subtle bugs on systems with 16KB system pages. 1311 Trace Processor: 1312 * Added a table which lists available metrics. 1313 * Added Python bindings on PyPi in the 'perfetto' package. 1314 * Added support for running trace_processor_shell on Android. 1315 * Added per-process metrics for GPU memory usage. 1316 * Added support for exporting flow events to JSON. 1317 * Added dynamic tables for navigating between slices of flows. 1318 UI: 1319 * Changed time marking: horizontal selection doesn't gray out anymore, 1320 pressing 'm' marks the range. 1321 * Added initial support for displaying flow event arrows. 1322 * Improved ordering of all thread tracks under process grouping. 1323 * Fixed UI crashes due to metric errors 1324 * Fixed selection of thread state slices. 1325 1326 1327v7.0 - 2020-09-01: 1328 Tracing service and probes: 1329 * Added auto-reconnection to the SDK. Tracing::Initialize() now retries in 1330 the background, instead of failing, if the tracing service is unrechable. 1331 * Added support for recording cpuhp (CPU hotplug) ftrace events. 1332 * Fixed heap profiling unwinding on multi-ABI systems. 1333 * Fixed reporting of live objects in the native heap profiler when using 1334 --dump-at-max. 1335 * Fixed crash when writing trace events with field nesting level > 10. 1336 Trace Processor: 1337 * Added Python bindings, see 1338 https://perfetto.dev/docs/analysis/trace-processor#python-api . 1339 * Added ingestion for Chrome instant events and Chrome flow events. 1340 * Added ingestion for Android GPU memory events and sched_blocked_reason. 1341 * Added WebView power metric. 1342 * Added support for WSL1 where Async I/O is not available. 1343 * Improved detection of Android suspend/resume events. 1344 UI: 1345 * Added GPU memory recording controls and ingestion code. Requires a recent 1346 Android 12+ kernel. 1347 * Added details panel for flow events, showed when the user selects a slice 1348 involved in a flow (arrows in the UI are still being worked on). 1349 * Added instant events rendering. 1350 * Added Google Analytics. 1351 * Fixed I/O thread-states in 4.14 kernels to deal with the removal of 1352 wake-kill using sched_blocked_reason. 1353 * Fixed "Perfetto UI started debugging this browser" showing when opening 1354 the UI and the Chrome extension is installed. 1355 Misc: 1356 * Update language to comply with Android's inclusive language guidance. 1357 1358 1359v6.0 - 2020-08-01: 1360 Tracing service and probes: 1361 * Added ftrace thermal events. 1362 * Added support for custom allocators to the heap profiler. Allows 1363 developers to report memory allocations that are not done through malloc. 1364 * Added detailed timestamping of key tracing session events. 1365 * Added support for building tracing services on CrOS (system-wide tracing). 1366 * Fixed filtering out of stale ftrace data that predates the beginning of 1367 the tracing session. 1368 Trace Processor: 1369 * Improved profile symbolizer. PERFETTO_SYMBOLIZER_MODE=index discovers 1370 symbol files by build id rather than name. 1371 * Added screen-state Android metrics. 1372 UI: 1373 * Added 'Info and stats' page to debug data losses and trace stats. 1374 * Added full cmdline to process detail panel. 1375 * Improved performance of async tracks using quantized queries. 1376 * Improved performance of counter and slice tracks for long traces by 1377 pre-caching quantized track data. 1378 * Improved actionablility of crash dialog when the Wasm module OOMs. 1379 1380 1381v5.0 - 2020-07-01: 1382 Tracing service and probes: 1383 * Added gpu_mem_total ftrace event. 1384 * Added TrustZone (scm start/end) event. 1385 * Added protos for GPU memory tracking and updated render stages proto. 1386 * Added time_in_state probe for Android (CPU time broken down by frequency). 1387 1388 1389 Trace Processor: 1390 * Added ingestion of IRQ and SoftIRQ events. 1391 * Added ingestion of workqueue events. KAddr symbolization still missing. 1392 * Added ingestion of voltage regulators and board clock change events. 1393 * Added ingestion of new ION ion_buffer_create/destroy events. 1394 * Added ingestion of TrustZone (scm start/end) events. 1395 * Added SurfaceFlinger derived events (tracking of missed frames). 1396 * Changed parsing of scheduler task state on 4.14 kernels. 1397 * Changed importing of Java heap graphs: allow partial dumps. 1398 * Improved performance of the SQL query engine. 1399 1400 1401 UI: 1402 * Added dedicated query page for custom SQL queries. 1403 * Added navigation links for Binder slices. 1404 * Removed overview summary mode when zoomed out. 1405 * Fixed recording page when targeting Android P. 1406 * Improved slice pan/zoom performance by quantizing. 1407