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