forked from google/perfetto
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCHANGELOG
More file actions
2167 lines (2015 loc) · 109 KB
/
Copy pathCHANGELOG
File metadata and controls
2167 lines (2015 loc) · 109 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Unreleased:
Tracing service and probes:
*
Trace Processor:
*
UI:
* Double-clicking a timeline slice now selects and zooms into it.
SDK:
*
v58.0 - 2026-08-06:
Tracing service and probes:
* Added optional recording of the state changes of other concurrent
tracing sessions, as ConcurrentSessionEvent packets. Opt-in via
TraceConfig.BuiltinDataSource.enable_concurrent_session_events. Trace
Processor and the UI show them as one state track per session.
* Added Zstd as a trace compression option alongside deflate, selected via
the new TraceConfig.compression field (which supersedes compression_type).
* The procfs scraper (process_stats data source) now writes an explicit
Thread message for a process' main thread, instead of leaving it implied
by the process entry. This fixes missing main thread names when a trace
is recorded using procfs alone.
* Replaced TraceConfig.notes and `perfetto --add-note` with
TraceConfig.trace_attributes and `--add-attribute`.
Trace Processor:
* Added trace merging: a ZIP or TAR archive containing several traces
imports as one merged trace on a single timeline, with per-machine
attribution. An optional `perfetto_manifest` JSON file in the archive
configures the merge (machine names, clock relations, fixed offsets).
See https://perfetto.dev/docs/analysis/merging-traces.
* Added `trace_processor_shell util merge`: packs traces and an optional
manifest into a merged-trace archive and sanity-checks the result.
* Added a client-server mode to `trace_processor_shell`: start a server
over a unix socket (`server unix`) or WebSocket (`server http`) and
connect a thin client with `--remote`.
* Added a common stack sampling format that any profiler can emit: the
new TracePacket.stack_sample attributes a callstack to a thread,
process or async context (goroutine, fiber, ...), measured against an
explicit counter timebase (wall-time, cycles, bytes, ...) with
optional follower counters. Callstacks can be interned or fully
inline; per-sequence StackSampleDefaults declare the profiler source
and common counters. Samples are parsed into the stack sample tables
and share the existing stack_profile_* callstack tables.
* Introduced common stack_sample, stack_sample_session,
stack_sample_task_context, stack_sample_execution_context,
stack_sample_async_context, stack_sample_counter_track and
stack_sample_counter tables shared by all callstack profiler sources.
Async contexts keep their parent relationships. The Linux perf-specific
perf_sample, perf_session and perf_counter_track tables continue to
expose all perf data, including counter-only samples.
* Added `trace_processor_shell export arrow_tar`, which writes the
built-in tables as a tar of Arrow files for other tools to read. The
format is stable across versions, but the archive cannot be loaded
back into Trace Processor.
* Added `trace_processor_shell export perfetto`, which writes an archive
that another Trace Processor of the same version can load, so a large
trace only has to be parsed once.
* Added an embedder-provided filesystem interface. The interface is
disabled by default; trace_processor_shell allows SQL file access only
with --allow-sql-file-access. SQL file writes no longer require --dev,
and the integer file descriptor form of EXPORT_JSON has been removed.
* Breaking change: the inline callstack message `TrackEvent.Callstack`
moved to the top-level `InlineCallstack` message in
trace/profiling/inline_callstack.proto, so track events and stack
samples share one inline callstack definition.
The wire format is unchanged; code referencing the generated
`TrackEvent.Callstack` / `TrackEvent::Callstack` types must switch to
`InlineCallstack`.
* `regexp()` now takes an optional third argument for matching flags:
`i` for case-insensitive matching, `c` for case-sensitive.
* Fixed negative timestamps wrapping around to large positive values and
crashing the UI, a crash on empty CpuInfo packets, a hang when
skipping an oversized proto field, and Apple Instruments Xcode 27
traces losing their call stacks.
UI:
* Improved flamegraphs with clearer direction and filter controls, frame
highlighting, and case-insensitive regular expression filtering.
* Callstack sample tracks and flamegraphs now share one implementation
over the stack_sample table. Tracks and area-selection flamegraph tabs
remain separate per profiler source, while every source with recorded
counters supports counter-weighted flamegraphs.
* Opening multiple trace files is now supported by default: the "Open
multiple trace files" sidebar item (or multi-selecting / dropping
several files) opens a dialog to configure how the traces merge onto
a shared timeline, warns if any events would be dropped, and can
export the merged set as a self-contained .tar archive.
* Add list of recently opened traces to the homepage.
* Remap OpenCommandPalette command hotkey to F1 on Firefox.
* Ftrace plugin: now handles area selections and multi-machine traces.
* Update node to v22.23.1 and pnpm to 10.34.5.
* Allow pivoting on arg values in slice aggregation table.
* Bump to vite v8.1.5 and typescript v7.0.2, vastly improving build times.
* Add memory tooling:
* Memscope: a live memory profiler that guides you through connecting
an Android/Linux device and recording memory traces.
* Memory overview: opens by default on traces containing smaps dumps
and shows a high-level breakdown of where memory is being used,
drawing on smaps, ART, and native memory data recorded in the trace.
SDK:
* Reworked the C SDK shared library export macros: static linking (the
default) no longer needs any macros. Define
PERFETTO_SDK_SHLIB_IMPLEMENTATION (renamed from
PERFETTO_SHLIB_SDK_IMPLEMENTATION) when building the SDK into a shared
library, and PERFETTO_SDK_SHLIB when consuming it as one. This applies
to the amalgamated SDK too. PERFETTO_SDK_DISABLE_SHLIB_EXPORT is
removed.
* Added PerfettoDsGetTimestamp() and PerfettoDsGetDefaultClockId() to
the C data source ABI. These return the current timestamp in the
preferred trace clock, so callers no longer need to pick the OS
specific clock themselves. Also added DataSourceTimestamp::now() in
the Rust SDK.
* `dev.perfetto.clock_sync` signpost events now fire on iOS as well as
macOS, so Instruments traces from iOS can be synchronized with
Perfetto traces.
Tools:
* Deprecated `traceconv`. Please use `trace_processor_shell`, which does
the same conversions as subcommands. The `traceconv` wrapper script
now fetches `trace_processor_shell` and runs it under the `traceconv`
name, so existing invocations keep working unchanged. The standalone
binary still ships for now.
AI:
* Much faster repeated queries with skills: the skill now loads a trace
once into a `trace_processor` session and reuses it, instead of
reparsing on every call.
* Added a `TraceConfig` reference and exemplar configs an agent can start
from when it needs a custom recording setup.
* Every analysis now ends by saving a markdown report with the question,
the findings and the queries that worked.
* Releases now include a skill zip for machines that cannot reach
github.com at install time.
v57.2 - 2026-07-07:
Trace Processor:
* Fixed trace_processor failing to parse traces that embed their own
proto descriptors after wire-compatible schema changes (widened
previous_packet_dropped bool->uint32, and removed AndroidCamera*
fields).
v57.1 - 2026-07-02:
AI:
* Fixed the AI skill missing its bundled `trace_processor` wrapper.
The wrapper now ships inside the skill directory itself, for every
install method and agent.
v57.0 - 2026-06-19:
Tracing service and probes:
* Scoped the RelayPort IPC service so it is only exposed on producer
sockets explicitly opted-in. Added `--enable-relay-endpoint-on=<sock>`
as a narrower variant of `--enable-relay-endpoint` that turns RelayPort
on only for the named producer sockets listed in
`PERFETTO_PRODUCER_SOCK_NAME`. `--enable-relay-endpoint` retains its
existing semantics for the common single-socket multi-machine setup.
* Allocation profiling (heapprofd): added partial wildcard matching support
to HeapprofdConfig.process_cmdline. The main limitation is that it is
incompatible with from-startup profiling on android, and therefore the
config should specify no_startup=true if any wildcard patterns are
included in process_cmdline. Otherwise the matching semantics are the same
as the perf profiling and java heap dump data sources.
* Added support for listing the `psci_domain_idle_enter` and
`psci_domain_idle_exit` ftrace events, giving finer-grained insight into
which CPU power states are entered than `cpu_idle` alone.
* Added support for the `disp_dpu_line_underrun` and panel settings ftrace
events.
* Added `system_io_provider_events` to the Windows ETW data source.
* Added a `linux.journald` data source for capturing systemd journald logs.
Trace Processor:
* Added support for explicit thread and process ordering in track
descriptors.
* Added support for "state tracks": a new track type for recording the
state of a system or subsystem over time, ingested into a new `state` SQL
table.
* Added support for ingesting systemd journald logs, stored alongside
Android logs in a unified log table with a new `log_source` column.
* Added parsing of the Adreno GPU `adreno_cmdbatch_retired` and
`adreno_cmdbatch_sync` ftrace events into GPU timeline slices.
* `trace_processor_shell` can now load traces directly from URLs and
ui.perfetto.dev permalinks.
* The `perfetto` Python package now defaults to the pinned `trace_processor`
binary shipped with the package instead of downloading the latest build at
runtime. The old behavior is available by opting in via the new
`TraceProcessorConfig.fetch_latest_trace_processor` flag.
UI:
* Added shift + mouse-wheel to scroll the timeline horizontally.
* Added an smaps plugin with an instants track and a datagrid details panel.
* Added a JournaldLog plugin to display logs from the `linux.journald` data
source.
* Added the ability to re-open and edit saved custom textproto record
configs.
* Improved the Heap Dump Explorer: it now opens by default on more traces,
its state is preserved in shared permalinks, and the overview shows
`oom_score_adj`.
* Improved the query results grid with column sort, reorder, and hide, a
collapsible sidebar, and proper surfacing of SQL errors.
* Adjacent slices that start and end at the same timestamp now render with a
1px gap, making it possible to distinguish consecutive instances of the
same slice.
* Added support for the Arm Telemetry Solution: a new (non-default,
opt-in) plugin adding an Arm CPU page under Support for loading Arm CPU
telemetry specs, which surface derived per-CPU performance metrics
(e.g. IPC, cache misses) as tracks computed from raw PMU counters.
SDK:
* Added nested track support with sibling ordering and merging to the C SDK
high-level ABI and the Android Java SDK (`PerfettoTrack`).
* Added track event correlation ids to the C SDK high-level ABI
(`PERFETTO_TE_CORRELATION_ID()` / `PERFETTO_TE_CORRELATION_ID_STR()`) and
the Android Java SDK (`PerfettoTrackEventBuilder.setCorrelationId()`).
* Added the `TRACE_STATE` API for recording the state of a system or
subsystem over time as a dedicated "state track".
AI:
* Perfetto now ships a single installable AI skill that teaches coding
agents how to record, query, and analyze traces. It is loadable by any
Agent Skills-compatible agent (Claude Code, OpenAI Codex, Gemini CLI, and
others) and is installed via https://get.perfetto.dev/agents-install.
v56.1 - 2026-06-04:
SDK:
* Fixed C++ SDK build failure on aarch64 with recent libstdc++ versions
(e.g. 12.5.0) caused by `CircularQueue::Iterator` not being default
constructible.
v56.0 - 2026-05-21:
Tracing service and probes:
* Added `machine_id` and `machine_name` fields to `TracingServiceState`,
exposing the originating machine for producers connected via
`traced_relay`. `perfetto --query` and `--query-raw` surface these in a
new `MACHINE` column when more than one machine is involved.
* Added support for in-kernel frame pointer unwinding to `traced_perf`
for faster, kernel-assisted stack sampling.
* Added process and package metadata to Android heap dumps.
* Fixed silent data loss and potential shared-memory corruption when
scraping chunks from `traced_relay` producers; previously the scrape
path was a no-op for emulated SMBs and could corrupt the buffer.
* Fixed an intermittent crash in the tracing service caused by a
use-after-free race in the lock-free task runner.
* Fixed builds on FreeBSD (`tracebox`), musl, and recent Fedora.
Trace Processor:
* Added support for importing markers from the Firefox Profiler as
slices.
* Added bitmap metadata support to Android heap dumps (new bitmap table
in the standard library).
* Treat Java soft references as strong references during heap-graph
reachability analysis.
* Fixed HPROF parser aborting when a sub-record spans segment
boundaries.
* Extended the `stats` table to report per-machine and per-trace
statistics.
* Improved trace_processor startup performance.
* Hardened the parsers and SQL engine.
UI:
* Added an embedded flamegraph viewer and a bitmap metadata page to the
Heap Dump Explorer; added a feature flag to control auto-opening on
traces containing heap-graph data. The setting ID has been prefixed
with `com.android`; users with saved settings will need to re-enable.
* Enabled `com.android.AndroidLockContention` by default, with several
UX improvements.
* Added details panels and process navigation to the AndroidStartup and
AndroidAnr plugins.
* Added handling for traces containing only preferred frame timelines
in `dev.perfetto.ChromeScrollJank`, plus a new command for visualizing
frame timelines.
* Added memcg reclaim tracks and refreshed descriptions in the memory
visualization; moved reclaim events under the Memory group.
* Nested GPU tracks under their process groups in `GpuByProcess`.
* Added trace start time and duration to the timeline header.
* Added hover-preview support on mouse-over to screenshot tracks.
* Added a distribution histogram on slice selection, with the selected
slice highlighted and a Debug Track shortcut.
* Added a matching-slice action on selection flamegraphs and a
scroll-to-root command for top-down/bottom-up/pivot views.
* Added SQL formatting and per-query column refresh to the Query page.
* Improved rendering performance for incomplete-slice fetches.
* Sped up `trace_processor` worker startup.
* Updated Chrome's built-in categories.
* Fixed manually pinned tracks being unpinned when the timeline loaded
or when other tracks were unpinned.
* Hardened permalink loading.
SDK:
* Added `track_event_buf_exhausted_policy` to `TracingInitArgs` to give
clients control over what happens when the TrackEvent buffer is
exhausted.
* Added support for running the Java SDK on non-ART JVMs (e.g. on
host/desktop).
Docs:
* Added documentation for the new subcommand-based trace_processor CLI.
* Added documentation for multi-machine tracing.
* Added a Data Explorer documentation stub, improved its architecture
doc, and added images/videos.
* Updated heap profiler documentation.
v55.3 - 2026-05-19:
Trace Processor:
* Relaxed embedded proto descriptor loading to allow extensions re-declared
under a renamed package or type when wire-compatible.
UI:
* Default to the Heap Dump Explorer view when opening traces containing
heap graph data (configurable via `openHeapDumpExplorerByDefault` flag).
v55.2 - 2026-05-14:
Trace Processor:
* Fix classic HTTP server command line parsing on Windows. This fixes
breakage of the Python API on Windows.
v55.1 - 2026-05-13:
Infra:
* Fix build of prebuilts on Windows.
Trace Processor:
* Fix parsing of timestamps of Adreno ftrace events.
v55.0 - 2026-04-29:
Tracing service and probes:
* Breaking change: Renamed the `TraceMetadata` proto to `TraceAttributes`.
* Extended `tid` field in `thread_descriptor.proto` to `int64` to support
large thread IDs, useful on Windows.
* Added `android.aflags` data source for capturing Android aconfig flags
(with associated Trace Processor and UI support).
* Added `/proc/slabinfo` polling support to the `sys_stats` data source.
* `traced_perf`: added a CPU filter for restricting per-CPU sampling, and
allowed raw perf events to specify a dynamic PMU by name.
* Added the ability to attach generic trace-level metadata to a trace.
* GPU: added `InstrumentedSamplingConfig` and custom counter groups to
`GpuCounterConfig`; added CUDA and HIP to the GPU graphics context APIs.
Trace Processor:
* Major: new `trace_processor_shell` architecture based on subcommands
(`query`, `interactive`, `server`, `metrics`, `summarize`, `export`,
`convert`). The classic CLI is preserved through a translation layer.
* Added support for the ART Method v2 streaming trace format.
* Multi-GPU support: new `gpu` and `gpu_context` tables enabling
per-GPU and multi-machine attribution across slice and memory tracks.
* HPROF importer: support for primitive fields, array contents, and
Bitmap-specific fields; closer ahat parity.
* Added polars DataFrame support to the Python TraceProcessor API.
UI:
* WebGL rendering for GPU-accelerated visualization of slice and counter
tracks with significant performance improvements on large traces.
* Virtual track scrolling, only rendering visible tracks for smoother
navigation on traces with many tracks.
* Breaking: legacy trace actions have been moved to the `dev.perfetto.Catapult`
plugin, disabled by default.
* Added the Heap Dump Explorer plugin with object view, class hierarchy,
duplicate-array detection, GC-root shortest-path, and bitmap gallery.
Java Flamegraph entries can navigate into the explorer.
* New plugins: GpuCompute (GPU kernel performance analysis), CoarseCpu
(per-CPU `/proc/stat` counters), Android monitor lock contention
(replaces the removed `com.android.LockContention` plugin), and an
Android logs track breakdown.
* Charts and aggregations: added Sankey chart, stats widget, percentile
and count-distinct aggregations; line charts now support stacking,
series hovering, and selection alongside brushing.
* Instances and flamegraph views now open as closable tabs.
* Counters: improved detail panel to reflect counter mode and handle
rate-delta counters for Android GPU events.
* Data Explorer: added dashboard functionality (labels, drivers and
consumers, import/export tabs, in-sidebar chart editor, smarter graph
with cycle detection, modernized charts picker).
* Dev server: support overriding CLI flags via `PERFETTO_UI_<FLAG>` env
or `~/.config/perfetto/ui-dev-server.env`.
SDK:
* Java SDK: added support for `@CompileTimeConstant` and static track
names.
Tools:
* `heap_profile`: added a `host` subcommand for memory profiling local
Linux processes. The existing Android workflow is preserved under the
`android` subcommand.
Docs:
* Major site refresh: reorganized TOC, filter chips, refreshed visuals.
* New or rewritten guides: PerfettoSQL getting-started, GPU data source,
symbolization and deobfuscation, Heap Dump Explorer, and `heap_profile`
`host`/`android` subcommands.
v54.0 - 2026-02-27:
Tracing service and probes:
* Breaking change: Removed `TraceConfig.no_flush_before_write_into_file` and
replaced it with `TraceConfig.write_flush_mode` enum to provide more
granular control over flushing behavior when streaming traces into a file.
* Breaking change for traced_relay users: data sources no longer match
remote machine producers by default. To restore the previous behaviour,
set `TraceConfig.trace_all_machines` to true.
* Added `perfetto --no-clobber` CLI option to prevent overwriting existing
files.
* Fixed a bug that would cause remote producers (data sources in VMs) to
lose data on the end of the trace due to lack of scraping.
* Added `android.user_list` data source to list Android users.
* Added support for FWTP counter traces and `fwtp_perfetto_slice` ftrace
event.
* Added suppport for referring to target buffers by name rather than index.
Trace Processor:
* Added support for Collapsed Stack format (from Brendan Gregg's FlameGraph
tools). This format uses semicolon-separated stack frames with a count,
e.g., "main;foo;bar 100".
* Added support for Firefox Profiler's preprocessed JSON format.
* Removed deprecated `RegisterSqlModule()` C++ API (use
`RegisterSqlPackage()` instead) and
`--add-sql-module`/`--override-sql-module` shell flags (use
`--add-sql-package`/`--override-sql-package` instead). These were
deprecated in v48.0.
* Added support for specifying custom package names in `--add-sql-package`
and `--override-sql-package` flags using `PATH[@PACKAGE]` syntax. The
Python API now provides a `SqlPackage` class for typed configuration.
* Breaking change: Removed `stack_id` and `parent_stack_id`
columns from the slice table. The `ancestor_slice_by_stack` and
`descendant_slice_by_stack` table functions have been moved to the
`slices.stack` stdlib module. These features were poorly named and often
misused. See https://perfetto.dev/docs/analysis/perfetto-sql-backcompat
for migration guidance.
* Breaking change: TrackEvent log messages are now parsed into
"track_event.log_message.message" arg instead of "track_event.log_message"
to ensure that arg set can be converted into a valid json.
* Breaking change: `machine_id` is now a non-nullable column in all Trace
Processor tables. The host machine is now consistently represented by 0
instead of NULL.
* Breaking change: Refactored the `metadata` table to support multi-trace
and multi-machine traces. Added `trace_id` and `machine_id` columns to
associate entries with their specific context.
* Added support for R8 retracing during deobfuscation. Improves
deobfuscation quality for some supported profiling types.
SQL Standard library:
* Added `heap_graph_stats` module and added dmabuf support.
* Added `intent` and `component` columns to `android_anrs` table.
* Added relevant threads jank CUJ module and counter-based weighted jank
metrics.
UI:
* Added support for opening any public-readable https:// trace using url=
parameter. See https://perfetto.dev/docs/visualization/deep-linking-to-perfetto-ui#option-1-direct-url-for-public-traces
for more information.
* Changed the way heap profiles are rendered: rather than an arrow with a
snapshot from start, use a slice that represents the time period covered
since the last snapshot. Also support aggregation on area selection.
* Added summary tracks for slice tracks and merged them with scheduling
summaries.
* Added present configs to the recording page to allow easy configuration
of traces for common system health problems on Android and Chrome.
* Added capability to download trace config files in one click from
the recording page.
* Landed various improvements for DataGrid (table viewer component):
* Added configurable pivot table support.
* Added glob, contains, and not-contains filters.
* Added a distinct value picker for filters.
* Added snap-to-boundaries feature for precise time selection. When
dragging selection handles or creating area selections, the cursor
automatically snaps to nearby slice boundaries to enable exact
measurement of slice durations. Hold Alt to temporarily disable snapping.
* Performance optimizations:
* Improved dataset search performance
* Optimized visualization of argument values.
* Reduced jank when panning/zooming on busy tracks.
SDK:
* Added inotify support for UNIX sockets: if traced is unavailable or
crashes, on Linux and Android we reconnect immediately after the socket
has been recreated rather than relying on periodic retries.
* Added `ClearIncrementalState` method to data source traits to allow
data sources to have custom clearing logic instead of creating/destroying
state on every clear.
Misc:
* Added automatic detection of profile type when using `traceconv profile`.
* Upgraded standalone Bazel version to 8.5.0.
* Switched Bazel usage to be fully based on bzlmod as, on Bazel 8,
WORKSPACE builds are no longer supported.
v53.0 - 2025-11-12:
SDK:
* Introduced an initial Rust SDK (`perfetto-sdk` on crates.io). This is the
first project to be hosted in the new `contrib/` directory as a
community-maintained effort.
* Java SDK: Allow users to provide custom identifiers for named tracks.
Tracing service and probes:
* Added initial support for building and running Perfetto on FreeBSD,
enabling both the tracing service and SDK. This includes
platform-specific implementations for threading, time, and memory
management, as well as toolchain adjustments.
* "linux.ftrace": Enabled `FtraceConfig.denser_generic_event_encoding` by
default. This reduces trace size for events unknown at compile time.
* SharedMemoryArbiter: Reduced CPU usage when tracing high-throughput
workloads by preventing duplicate immediate flush tasks when the shared
memory buffer is more than half full.
* traced_probes: Increased shared memory buffer request to 2MB (was 1MB)
when connecting to the tracing service (traced).
* traced_perf: Added support for user-space, kernel, and hypervisor
counting event modifiers.
* Updated gpu_scheduler trace events for Linux 6.17.
* perfetto cmd: Added `--notify-fd` flag. This allows waiting for all data
sources to be started without running in background mode, which is useful
for capturing command output or ensuring termination with the calling
process.
* Android: Switched to RtFutex to fix deadlock when `Tracing::Initialize` is
called from a static initializer.
* Enabled LockFreeTaskRunner on non-Android platforms to reduce lock
contention.
SQL Standard library:
* android_anrs: Added ANR timer event data and default durations.
* Improved thread creation spam analysis with new per-process and renamed
per-thread functions.
Trace Processor:
* Added support for importing pprof profiles.
* Added support for ingesting simpleperf's protobuf format.
* Added support for parsing process_sort_index and thread_sort_index
metadata from JSON traces. These are stored as process_sort_index_hint
and thread_sort_index_hint in the args table for processes and threads.
* Added an `arg_set_id` column to the thread table. Queries joining
`thread` with other tables now need to disambiguate the column or they
may fail with "ambiguous column name: arg_set_id". Qualify the column
with the table name (e.g. `slice.arg_set_id` or `counter.arg_set_id`) to
resolve this.
* Added support for dynamically loading custom protobuf descriptors at
runtime.
* Added support for FILE_IO events and thread wait reasons in CSwitch
events for more detailed ETW traces.
* Added `unhex` SQL function to convert hexadecimal strings to signed
64-bit integers.
* Added support for Python trace_processor to expose trace metadata.
* Improved error handling and logging for clock synchronization and track
events.
UI:
* Perf sample callstack tracks: Added capability to expand thread and
process level callstack tracks to distinguish samples from different
timebases or leader counters when multiple callstack data sources are
present.
* Added support for sorting processes and threads using sort_index hints
from JSON traces. Processes and threads with lower sort index values
will appear first in the UI.
* Added support for attaching callstacks to TrackEvents, including both
slices and instant events. When an event with a callstack is selected, the
callstack is displayed in the details panel. Additionally, an area
selection will aggregate all callstacks of events in that area into a
flamegraph.
* Added a new plugin for displaying pprof profiles, which introduces a
dedicated page in the UI for visualizing and analyzing pprof data.
* Overhauled the "Info and Stats" page, renaming it to "Overview" and
transforming it into a modern, tabbed dashboard. This new page provides a
high-level summary of the trace and exposes the new `trace_import_logs`
table from the Trace Processor, making it easier to debug trace import
issues.
* Added resize handle to pinned tracks area. Drag to set fixed height;
double-click to restore default auto-sizing.
* Debug tracks: Added support for custom slice coloring via SQL column
values.
* Recording page: Added 'Network' section for WiFi debugging.
* Added path-based filtering to all `*ByRegex` commands (`Pin`, `Expand`,
`Collapse`, `CopyTracksToWorkspace`,
`CopyTracksToWorkspaceWithAncestors`). This allows for more precise track
selection by filtering on the full track path (e.g., `process_name >
thread_name`) in addition to just the track name.
* Android Logcat: Improved column ordering, case-insensitive search, and UI
clarity.
* Grouped settings on the settings page by the plugin that added them, with
core settings placed in a "core" section, to improve organization.
* Increased wasm stack size to 2MB to reduce stack overflows.
* Added ability to pin and copy tracks using SQL queries.
* SQL table viewer: Added "Analyze" submenu for data analysis
and transformation, including column casting and various string
manipulations.
* Added support for visually marking inlined functions within flamegraphs.
These markers appear as a visual indicator on a frame and in its tooltip,
making it easier to identify compiler optimizations like inlining in CPU
profiles.
Misc:
* Introduced a `contrib/` directory for community-maintained code, allowing
external contributors to own and maintain projects that are technically
decoupled from official Perfetto distributions. These projects have
relaxed review requirements and are not officially supported by the core
Perfetto team. (https://github.com/google/perfetto/discussions/3404)
v52.0 - 2025-09-16:
Tracing service and probes:
* Added support for exclusive single-tenant features in ftrace data source.
These features can only be used by a single tracing session.
* Added support for tracing_cpumask, tracefs options and ftrace filtering
by TID as exclusive features.
* Added support for polling Adreno GPU frequency in SysStatsDataSource.
* Deprecated: "resolve_process_fds" option in "linux.process_stats" data
source. Asynchronous scraping is too unreliable and there are no known
maintainers or users.
* Deprecated: "linux.inode_file_map" data source that is not known to be
used since 2017. The implementation is too unreliable and unmaintained.
* "linux.perf": fixed assumptions around cpu0 always being online.
* "linux.perf": when using libunwindstack for userspace unwinding
(default on Android), the implementation now chooses a default for
unwind_state_clear_period_ms.
SQL Standard library:
* Added new power analysis capabilities with expanded Wattson device support
and IRQ power attribution for more accurate power profiling.
* Added suspend-aware CPU utilization metrics for better analysis of
power-managed systems.
* Added anr_type column to android_anrs table for improved ANR debugging.
* Added `android.bitmaps` module with timeseries information about bitmap
usage in Android.
* Added upid/utid parameters to cpu_process/thread_utilization functions.
* Improved CPU utilization calculations by excluding null frequencies when
computing average frequency.
Trace Processor:
* Significantly improved performance with optimized data structures and
MurmurHash implementation, resulting in faster trace loading and query
execution.
* Improved handling of large traces with better memory management and
reduced crashes on traces larger than 2GB.
* Enhanced multi-trace support with proper per-machine context management.
* Added support for symbolizing kernel frames in Linux perf.data files.
* Added support for trace-cmd report -N output format.
* Added slice_self_dur table for more efficient self-duration calculations.
* Added regexp_extract function for improved string processing in queries.
* Added support for `sibling_merge_behavior` and `sibling_merge_key` in
`TrackDescriptor` for TrackEvent, allowing for finer-grained control over
how tracks are merged. See UI section for more details.
* Added support for `y_axis_share_key` in `CounterDescriptor` for sharing
Y-axis ranges between multiple counter tracks with the same units.
* Changed how track_event tracks are parsed in trace processor when tracks
are merged together. Instead of merging happening only in the UI, the
merging now happens in trace processor. This causes the number of tracks
in the `track` table to significantly lower, leading to better query
performance. As a result, track_uuid is no longer included in the
arguments as multiple track_event tracks could have contributed to a
single trace processor track. If you want the previous behaviour, specify
`sibling_merge_behaviour: SIBLING_MERGE_BEHAVIOR_NONE`.
* Internal changes to packet sorting that might change the parsing order of
data with identical timestamps, relative to previous releases.
* Fixed flow tracker direction by comparing timestamps correctly.
UI:
* Added comprehensive dark mode support with theme-aware colors throughout
the interface.
* Introduced bulk track settings management allowing users to configure
multiple tracks simultaneously.
* Added startup commands feature for automated trace analysis workflows.
* Improved recording page with Perfetto SDK section for configuring
track_event data source categories and wildcards.
* Improved data visualization with enhanced DataGrid implementation and
better aggregation performance.
* Fixed numerous crashes and performance issues, including flamegraph
crashes and selection performance problems.
* Added track help infrastructure and descriptive text support for better
user guidance.
* Enhanced plugin architecture with standardized command naming and
improved plugin isolation.
* Added support for controlling TrackEvent track merging through the
`TrackDescriptor` proto. This is especially useful for users converting
external traces into Perfetto format or using the SDK. Tracks can now
specify a `sibling_merge_behavior` and a `sibling_merge_key` to override
the default name-based merging. This allows for forcing tracks with the
same name to be displayed separately, or forcing tracks with different
names to be merged into a single UI track.
* Improved the performance of merging large number of track_event tracks
both during loading and during panning/zooming operations.
* Added support for persisting state from traces loaded through postMessage.
* Added a convention for automatic track visualisations for Linux ftrace
tracepoints that match a convention. See "Diving deep -> Linux -> Kernel
track events" in the public docs for more details.
* Improved WebUSB error messages for chrome://inspect conflicts.
* Fixed crash when loading traces larger than ~2GB.
* Added ability to scale counter track height beyond 4x.
* Added percentage of total wall time to sched aggregation tables.
SDK:
* "slow" tag is no longer implicitly added to trace categories with
"disabled-by-default-" prefix. Instead, clients should explicitly specify
the tag. enabled_categories="disabled-by-default-*" also no longer has
a special priority, and the same can be achieved with enable_tags="slow".
* Added support for thread time subsampling option in TrackEvent.
* Added NamedTrack::FromPointer for creating tracks from pointer values.
* Added NamedTrack::ThreadScoped functionality.
* Emit PHASE_MARK legacy events on the global track.
* Added support for optional user provided process UUID.
v51.2 - 2025-07-03:
Trace Processor:
* Fixed issue with trace summarization crashing with released trace
processor prebuilt. Builds from source with GN and default configuration
is unaffected.
v51.1 - 2025-06-26:
Build system:
* Fixed issue with Bazel copts/cxxopts. Embedders are required to add a
default_cxxopts to their perfetto.bzl file in their repository.
v51.0 - 2025-06-24:
Tracing service and probes:
* Added a new data source to poll for CPU time per UID and cluster.
SQL Standard library:
* Added a new standard library table for filtering IRQ slices.
* Added a new standard library module for Android's Low Memory Killer.
Trace Processor:
* Reworked core database engine to be more performant and better architected
for future imporvements.
* Added new "trace summarization" functionality to trace processor as a more
flexible replacement to old metrics system.
* Added support for executing all available metrics when summarizing the
trace with `--summary-metrics-v2 all`.
* Added `trace_summary()` function to the Python API to execute the
trace summaries and, specifically, v2 metrics.
* Added support to adding SQL packages to Python API. This is the
counterpart to the `--add-sql-package` shell option and allow loading SQL
packages and modules from a filesystem path. These are then available to
load using `INCLUDE PERFETTO MODULE` PerfettoSQL statements.
* Improved handling of traces containing overlapping "complete" events
(i.e. events with a duration, AKA 'X' events in the JSON format).
While overlapping events are prohibited by the JSON spec, they do
appear in many synthetically generated JSON traces. Previously, such
events would break the data model of trace processor and cause signifcant
glitches in the UI. These events are now dropped, fixing all the visual
glitches and an error stat is emitted to make the user aware.
* Improved performance of parsing JSON by 7x. JSON traces should now load
much faster in the Perfetto UI and the trace processor.
UI:
* Improved JSON loading performance. See `Trace Processor` section above.
* Improved duration based slice aggregators - slices are now trimmed to the
width of the area selection.
* Added the ability for users to set a custom timezone in the UI.
* Added the ability to add descriptive text to tracks.
* Added touchscreen support. The UI can now be used from tablets and other
touch devices.
* Removed the Viz page; it was an experiment which did not go anywhere.
SDK:
* Changed the implementation of TrackEvent to only have a single data source
for multiple namespace; categories will be exported correctly only on
recent perfetto tracing services that support UpdateDataSource.
* Changed the priority of TrackEvent enabled/disabled category and tags.
The new logic ranks (in this order)
specific > pattern > single char "*" wildcard,
categories (enabled > disabled) > tags (disabled > enabled).
Docs:
* Signifcantly improved the project's documentation with a team-wide
collaboration to make it more user-friendly and up to date.
v50.1 - 2025-04-17:
Trace Processor:
* Fix build on windows
v50.0 - 2025-04-17:
Tracing service and probes:
* Removed mm_events support as it is no longer maintained.
SQL Standard library:
*
Trace Processor:
* Added `thread_or_process_slice` to the `slices.with_context` module for
a unified table which contains all thread and process slices in the trace.
This is often useful for ad-hoc queries on Android or Linux traces.
* Removed `slices.slices` module and `_slice_with_thread_and_process_info`
view. This is replaced by `thread_or_process_slice` (see above).
* Fixed io_wait arg name conversion in traceconv.
UI:
* Added basic syntax highlighting support to the query page.
* Retain DOM state between page changes - this fixes a bug where the scroll
position is lost when switching between pages.
* Added a plugin-able settings page - a place to put user-facing.
configuration options which are more complex than a simple boolean. Flags
should still be used for experimental features and feature flags.
* Added paging to query results and remove arbitrary 10,000 row limit. This
fixes a bug where selecting too many slices (e.g. `select * from slice`)
can tank UI performance.
* Added options to bulk-copy tracks to a new workspace.
* Allow workspace tracks to be reordered (drag-n-drop).
* Render slice hover tooltips to the DOM instead of canvas, which allows
them to be larger and more customizable.
* Add subsystem to pass URL args directly to plugins.
* Added plugin-able track filters, including filter by process and thread.
* Make android logs selectable, add hover-tooltips, and allow them to be
selected when iterating search results.
* Add flag to work around hotkey collisions on dvorak.
* Fix bug in search where search results could not be iterated through.
* Fix bug where to "go to next slice" hotkey was not working on AZERTY.
* Fix bug where created pivoted debug tracks would sometimes be very slow.
* Fix bug where tracks can get hidden behind sticky headers.
* Fix crash when marking DNF slices.
* Fix bug where viewer page didn't scroll back up to the top of the track
group when a group is collapsed.
* Small consistency tweaks to styling.
* Stretch overview timeline to fill screen horizontally to avoid superfluous
whitespace.
SDK:
* Added `TraceWriter::drop_count` function for determining the number of
of times the writer started dropping data due to exhaustion of the shared
memory buffer. This can be used by SDK users to diff this value and
reemit interned data if necessary.
v49.0 - 2025-01-06:
Tracing service and probes:
* Add `--clone-by-name` to the perfetto command line. This allows cloning a
tracing session by its unique_session_name.
* Fixed a bug that would delay the trace start acknowledgement, resulting
in a 30s when using --background-wait, if an Android producer process is
frozen, as it would be considered unresponsive.
* Added basic support for kprobes with ftrace.
SQL Standard library:
* Removed the `type` column from all non-track tables. Please see
https://perfetto.dev/docs/analysis/perfetto-sql-backcompat#change-in-semantic-of-code-type-code-column-on-track-tables
for more information.
* Changed the semantic of `type` column from all track tables. Please see
https://perfetto.dev/docs/analysis/perfetto-sql-backcompat#removal-of-code-type-code-column-from-all-non-track-tables
for more information.
* Removed the `linux_device_track` table. Linux RPM (runtime power
management) tracks formerly in this table now can be found in the `track`
table with `type` `linux_rpm`.
* Removed the `energy_counter_track` table. Android energy estimate
breakdown tracks formerly in this table now can be found in the `track`
table with `type` `android_energy_estimation_breakdown`.
* Removed the `energy_per_uid_counter_track` table. Android energy estimate
breakdown tracks formerly in this table now can be found in the `track`
table with `type` `android_energy_estimation_breakdown_per_uid`.
* Moved the `gpu_work_period_track` table into the `android.gpu.work_period`
standard library module and renamed it to `android_gpu_work_period_track`.
* Removed the `irq_counter_track` table. Irq counter tracks formerly in this
table now can be found in the `track` table with `type`
`irq_counter`.
* Removed the `softirq_counter_track` table. Softirq counter tracks formerly
in this table now can be found in the `track` table with `type`
`softirq_counter`.
* Removed the `uid_counter_track` table. It was redundant as no data was
inserted directly into it.
* Removed the `uid_track` table. It was redundant as no data was
inserted directly into it.
* Removed `common` package. It has been deprecated since `v42` and most
functionality has been moved into other packages. Notably, the time
conversion functions can be found in `time.conversion` module, and
`thread_slice` is available with `slices.with_context`.
* Deprecated UINT and INT integer types in Perfetto SQL. Please use LONG in
Perfetto SQL schema.
* Deprecated FLOAT flating type in Perfetto SQL. Please use DOUBLE in
Perfetto SQL schema.
* Added TIMESTAMP, DURATION, ID and JOINID types to Perfetto SQL schema.
TIMESTAMP and DURATION refers to time columns in nanoseconds. ID column
is a primary key for the column and JOINID is referencing ID
column of other table.
* Removed the `experimental_sched_upid` table. Prefer the joining `sched`
and `thread` tables directly instead.
* Removed the experimental_counter_dur table. Prefer using the
`counter_leading_intervals` macro from the `counters.intervals` standard
library module.
UI:
* Introduced `Open table:` command which would open any Perfetto Standard
Library table in a new tab.
* Fixed behaviour of sorting and nesting of track event tracks for counter
tracks, thread tracks and process tracks.
* Various improvements to timeline rendering performance.
* Added workspace switcher and menu to move tracks between workspaces.
* Completely overhauled recording page.
* Improved area selection UX.
* Improved fuzzy search.
* Hide 'Open with legacy UI' by default.
SDK:
* Added `NamedTrack`, it allows creating arbitrarily named tracks.
v48.1 - 2024-10-14:
SDK:
* Fix build with MSVC.
v48.0 - 2024-10-11:
Tracing service and probes:
* Improved accuracy of ftrace event cropping when there are multiple
concurrent tracing sessions. See `previous_bundle_end_timestamp` in
ftrace_event_bundle.proto.
* Increased watchdog timeout to 180s from 30s to make watchdog crashes
much less likely when system is under heavy load.
SQL Standard library:
* Improved CPU cycles calculation in `linux.cpu.utilization` modules:
`process`, `system` and `thread` by fixing a bug responsible for too high
CPU cycles values.
* Introduces functions responsible for calculating CPU cycles with
breakdown by CPU, thread, process and slice for a given interval.
* Added `linux.perf.samples` module for easy querying of perf samples
in traces.
* Added `stacks.cpu_profiling` module for easy querying of all CPU
profiling data in traces.
Trace Processor:
* Added (partial) support for the Gecko (Firefox) JSON profiler format.
Parsing is optimized for CPU profiling collected with `perf` and converted
to the Gecko format. Only parsing of samples is supported; parsing of
markers and any other features (e.g. colours) is *not* supported.
* Added (partial) suppoort for the perf script text format from both perf
and simpleperf. Only parsing files with the default formating or with pids
included (i.e. `-F +pid`) is supported. Any other formatting options are
*not* supported.
* Added support for parsing non-streaming ART method tracing format.
* Added support for parsing GZIP files with multiple gzip streams.
* Added support for parsing V8 CPU profling samples from proto traces.
* Renamed Trace Processor's C++ method `RegisterSqlModule()` to
`RegisterSqlPackage()`, which better represents the module/package
relationship. Package is the top level grouping of modules, which are
objects being included with `INCLUDE PERFETTO MODULE`.
`RegisterSqlModule()` is still available and runs `RegisterSqlPackage()`.
`RegisterSqlModule()` will be deprecated in v50.0.
UI:
* Scheduling wakeup information now reflects whether the wakeup came
from an interrupt context. The per-cpu scheduling tracks now show only
non-interrupt wakeups, while the per-thread thread state tracks either
link to an exact waker slice or state that the wakeup is from an
interrupt. Older traces that are recorded without interrupt context
information treat all wakeups as non-interrupt.
* Nest global/user async tracks according to their parent/child relationship
in the trace.
* Introduced new workspace API which allows nested tracks & multiple
workspace support.
* Introduced middle ellipsis in track titles when title text is longer than
the available space, while preserving the start and end of title text &
add popup of full title text on hover.
* Fixed spurious judder issue in popups with tall content.
* Fixed bug where marker durations were not rendered on selected markers.
* Removed ChromeScrollJank V1 track (V2 should be used from now on).
* Major internal changes (affecting pugin developers and core contributors):
* Removed legacy selection types, use track event selection types going
forward for all single event selections.
* Details panels are now attached to the track rather than registered
separately.
* Introduced `registerSqlSelectionResolver`, which allow plugins to add
handlers allowing other parts of the codebase to make selection on
tracks from other plugins based on a sql table name and id.
* Changed lifetime of track instances; they are now created on trace load
by plugins and survive the lifetime of the trace, rather than getting
created and destroyed as they appear/disappear on the timeline.
* Fix circular dependencies and turn future instances into errors.
SDK:
*
v47.0 - 2024-08-07:
SQL Standard library:
* Removed `cpu.cpus` and `cpu.size` modules. The functions inside
for guessing core type were inaccurate and often misleading.
There is no replacement for these as there is no accurate data
source available.
* Moved `cpu.utilization` package to `linux.cpu.utilization`. The
functionality inside this package only works properly on Linux
and Linux derived OSes (e.g. Android).
* Moved `cpu.freq` module to `linux.cpu.frequency` and renamed
`cpu_freq_counters` to `cpu_frequency_counters` for the same
reason as above.
* Moved `gpu.frequency` to `android.gpu.frequency` for the same reason as
above.
* Moved `cpu.idle` module to `linux.cpu.idle` or `linux.cpu.idle_stats` for
the same reason as above.
* Moved content of `linux.cpu_idle` into `linux.cpu.idle` and
`linux.cpu.idle_stats` to make it consistent with above changes.
* Moved `memory.android.gpu` to `android.memory.gpu` to make it consistent
with above changes.`
* Moved contents of `memory.linux.process` to `linux.memory.process` and
`android.memory.process` to make it consistent with above changes.
* Moved `memory.linux.high_watermark` to `linux.memory.high_watermark` to
make it consistent with above changes.
* Moved `memory.heap_graph_dominator_tree` to
`android.memory.heap_graph.dominator_tree`. This is to allow for the
addition of more modules related to heap graphs.
* Added `linux_kernel_threads` table to `linux.threads` module.
Trace Processor:
* Change `NotifyEndOfFile` method to return a Status object. For backwards
compatibility, this value can be ignored but in the future a [[nodiscard]]
annotation will be added.
* Added `CREATE PERFETTO INDEX` to add sqlite-like indexes to Perfetto
tables. Has the same API as `CREATE INDEX`.
UI:
* Updated to Typescript 5.5.2, lib es2022, & upreved various packages.
* Made `Disposable`, `DisposableStack`, and their async variants available
to use in the UI.
* Vastly improved flamegraph.
* Added track filter which can be used to search for tracks by name.
* Added Wattson cpu power estimation plugin.
* Added option to show thread slice ancestor/descendant slices in thread
slice details panel context menu.
* Added feature where plugin can ask tracks to be automatically pinned when
adding tracks on trace load.
* Fixed inconsistent y-range for all CPU SS tracks.
* Switched to using explicit de/serialization when creating/loading
permalinks.
* Improved sched slice details query efficiency.
* Added `TagInput` widget.
* Added `ui/format-sources` script to run eslint and prettier in one go.
* Reduced number of circular imports.
* Added `SharedAsyncDisposable` for management of shared async resources.
* Fixed rendering of negative counter tracks.
* Improved data loss notification using a popup
* Tidied up `TrackDescriptor`.
* Added Android trace probes for ChromeOS
* Added feature to try reconnect when websocket connection is lost.
* Fixed bug in 1ns event rendering.
* Tidied up details panel font sizes and weights.
* Added segmented buttons widget.
* Added 'main thread' chip to main thread tracks.
* Added plugin API to add menu items to the sidebar.
* Added `onTraceReady` plugin hook.
* Various clean-ups and bugfixes.
v46.0 - 2024-06-13:
SQL Standard library:
* Added megacycles support to CPU package. Added tables:
`cpu_cycles_per_process`, `cpu_cycles_per_thread` and
`cpu_cycles_per_cpu`.
* Improved `memory` package. Added `memory.linux.process`,
`memory.linux.high_watermark` and `memory.android.gpu` modules.
* Created `gpu` package with `gpu.frequency` module.
* Migrated `sched.utilization` package to `cpu.utilization`.
Trace Processor:
* Added "time to initial display" and "time to full display" metrics to