xref: /aosp_15_r20/external/perfetto/docs/visualization/perfetto-ui.md (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker# Perfetto UI
2*6dbdd20aSAndroid Build Coastguard Worker
3*6dbdd20aSAndroid Build Coastguard Worker[Perfetto UI](https://ui.perfetto.dev) enables you to view and analyze traces in
4*6dbdd20aSAndroid Build Coastguard Workerthe browser. It supports several different tracing formats, including the
5*6dbdd20aSAndroid Build Coastguard Workerperfetto proto trace format and the legacy json trace format.
6*6dbdd20aSAndroid Build Coastguard Worker
7*6dbdd20aSAndroid Build Coastguard Worker## New Features
8*6dbdd20aSAndroid Build Coastguard WorkerWhat features have come to the UI recently? See below.
9*6dbdd20aSAndroid Build Coastguard Worker
10*6dbdd20aSAndroid Build Coastguard Worker### Tabs V2
11*6dbdd20aSAndroid Build Coastguard Worker
12*6dbdd20aSAndroid Build Coastguard WorkerWe've refreshed how the tabs in the details pane at the bottom of the
13*6dbdd20aSAndroid Build Coastguard Workertimeline work.
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard WorkerNOTE: Temporarily you can use the previous tab implementation via
16*6dbdd20aSAndroid Build Coastguard Workersetting the [Tabs V2 feature flag](http://ui.perfetto.dev/#!/flags) to
17*6dbdd20aSAndroid Build Coastguard Worker'Disabled'. Please file a bug with feedback on Tabs V2.
18*6dbdd20aSAndroid Build Coastguard Worker
19*6dbdd20aSAndroid Build Coastguard WorkerThe update aimed to address a few major UX concerns with the existing
20*6dbdd20aSAndroid Build Coastguard Workerimplementation while also making tabs extensible via plugins.
21*6dbdd20aSAndroid Build Coastguard Worker
22*6dbdd20aSAndroid Build Coastguard WorkerUX concerns in TabsV1:
23*6dbdd20aSAndroid Build Coastguard Worker- Tabs disappear and reappear when the user changes the selection causing surprise and confusion.
24*6dbdd20aSAndroid Build Coastguard Worker- We try to guess the right tab to get focus and this guess is often incorrect.
25*6dbdd20aSAndroid Build Coastguard Worker- 'Ephemeral tabs' (query results and SQL tables) work differently from
26*6dbdd20aSAndroid Build Coastguard Worker  'permanent tabs ('Ftrace events' and 'Android Logs'). Ephemeral tabs can be closed while permanent tabs can not.
27*6dbdd20aSAndroid Build Coastguard Worker- 'Current selection' tabs work differently to both 'ephemeral' and 'permanent' tabs and there can only be a single 'Current selection' tab
28*6dbdd20aSAndroid Build Coastguard Worker  even when the current selection contains many different kinds of data.
29*6dbdd20aSAndroid Build Coastguard Worker- Ephemeral tabs are not persisted into permalinks.
30*6dbdd20aSAndroid Build Coastguard Worker
31*6dbdd20aSAndroid Build Coastguard Worker![Tabs V2 demo](https://storage.googleapis.com/perfetto-misc/feature-tabs-v2.gif)
32*6dbdd20aSAndroid Build Coastguard Worker
33*6dbdd20aSAndroid Build Coastguard WorkerTabsV2 is extensible via the [plugin mechanism](/docs/contributing/ui-plugins).
34*6dbdd20aSAndroid Build Coastguard WorkerPlugins can add new permanent and ephemeral tabs as well as new selection panels.
35*6dbdd20aSAndroid Build Coastguard Worker
36*6dbdd20aSAndroid Build Coastguard Worker### Custom visualisation with Vega and Vega-lite
37*6dbdd20aSAndroid Build Coastguard Worker
38*6dbdd20aSAndroid Build Coastguard WorkerThe `Viz` page available in the sidebar after you load the trace allows
39*6dbdd20aSAndroid Build Coastguard Workerfor custom visualisation using [Vega](https://vega.github.io/vega/) or
40*6dbdd20aSAndroid Build Coastguard Worker[Vega-lite](https://vega.github.io/vega-lite/docs/).
41*6dbdd20aSAndroid Build Coastguard Worker
42*6dbdd20aSAndroid Build Coastguard WorkerType a Vega specification into the bottom editor pane and the
43*6dbdd20aSAndroid Build Coastguard Workervisualisation will update in real time in the top pane.
44*6dbdd20aSAndroid Build Coastguard WorkerYou can put arbitrary `trace_processor` SQL queries where the URL would
45*6dbdd20aSAndroid Build Coastguard Workergo in a normal Vega visualisation.
46*6dbdd20aSAndroid Build Coastguard Worker
47*6dbdd20aSAndroid Build Coastguard Worker![Viz page](https://storage.googleapis.com/perfetto-misc/feature-viz-page.png)
48*6dbdd20aSAndroid Build Coastguard Worker
49*6dbdd20aSAndroid Build Coastguard WorkerTry the following visualisation with the Android example trace:
50*6dbdd20aSAndroid Build Coastguard Worker
51*6dbdd20aSAndroid Build Coastguard Worker```json
52*6dbdd20aSAndroid Build Coastguard Worker{
53*6dbdd20aSAndroid Build Coastguard Worker  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
54*6dbdd20aSAndroid Build Coastguard Worker  "data": {"url": "select cpu, dur from sched where utid != 0"},
55*6dbdd20aSAndroid Build Coastguard Worker  "mark": "bar",
56*6dbdd20aSAndroid Build Coastguard Worker  "encoding": {
57*6dbdd20aSAndroid Build Coastguard Worker    "x": {
58*6dbdd20aSAndroid Build Coastguard Worker      "field": "cpu"
59*6dbdd20aSAndroid Build Coastguard Worker    },
60*6dbdd20aSAndroid Build Coastguard Worker    "y": {"aggregate": "sum", "field": "dur"}
61*6dbdd20aSAndroid Build Coastguard Worker  }
62*6dbdd20aSAndroid Build Coastguard Worker}
63*6dbdd20aSAndroid Build Coastguard Worker```
64*6dbdd20aSAndroid Build Coastguard Worker
65*6dbdd20aSAndroid Build Coastguard Worker### Command Palette
66*6dbdd20aSAndroid Build Coastguard WorkerTired of remembering the location of buttons in the Perfetto UI?
67*6dbdd20aSAndroid Build Coastguard WorkerCommands to the rescue!
68*6dbdd20aSAndroid Build Coastguard Worker
69*6dbdd20aSAndroid Build Coastguard Worker![Command](https://storage.googleapis.com/perfetto-misc/feature-command-palette.gif)
70*6dbdd20aSAndroid Build Coastguard Worker
71*6dbdd20aSAndroid Build Coastguard WorkerCommands are:
72*6dbdd20aSAndroid Build Coastguard Worker- Discoverable & Searchable
73*6dbdd20aSAndroid Build Coastguard Worker- Keyboard driven
74*6dbdd20aSAndroid Build Coastguard Worker- Plugin-able
75*6dbdd20aSAndroid Build Coastguard Worker- Context sensitive
76*6dbdd20aSAndroid Build Coastguard Worker- ...with more added every day
77*6dbdd20aSAndroid Build Coastguard Worker
78*6dbdd20aSAndroid Build Coastguard WorkerAccess the command palette via `Ctrl-Shift-P` or by typing `>` in the
79*6dbdd20aSAndroid Build Coastguard Workersearch bar.
80*6dbdd20aSAndroid Build Coastguard Worker
81*6dbdd20aSAndroid Build Coastguard Worker### Changing the time format and offset
82*6dbdd20aSAndroid Build Coastguard Worker
83*6dbdd20aSAndroid Build Coastguard Worker![Time](https://storage.googleapis.com/perfetto-misc/feature-time.gif)
84*6dbdd20aSAndroid Build Coastguard Worker
85*6dbdd20aSAndroid Build Coastguard WorkerThe displayed timestamp format can be changed globally, cycling between seconds, raw nanoseconds and a new "timecode" format.
86*6dbdd20aSAndroid Build Coastguard WorkerWe also have a new `TO_TIMECODE()` function in Trace Processor to print timestamps in the timecode format.
87*6dbdd20aSAndroid Build Coastguard Worker
88*6dbdd20aSAndroid Build Coastguard Worker## UI Tips and Tricks
89*6dbdd20aSAndroid Build Coastguard Worker
90*6dbdd20aSAndroid Build Coastguard Worker### Pivot Tables
91*6dbdd20aSAndroid Build Coastguard Worker
92*6dbdd20aSAndroid Build Coastguard WorkerTo use pivot tables in the Perfetto UI, you will need to enable the
93*6dbdd20aSAndroid Build Coastguard Worker"Pivot tables" feature flag in the "Flags" tab under "Support" in the Sidebar.
94*6dbdd20aSAndroid Build Coastguard WorkerYou can pop up a pivot table over the entire trace when clicking "p" on your
95*6dbdd20aSAndroid Build Coastguard Workerkeyboard. The "Edit" button opens a pop up window to add/remove and reorder
96*6dbdd20aSAndroid Build Coastguard Workercolumns and change the default sorting of aggregations.
97*6dbdd20aSAndroid Build Coastguard Worker
98*6dbdd20aSAndroid Build Coastguard Worker![Pivot table editor](/docs/images/pivot-tables/pivot-table-editor.png)
99*6dbdd20aSAndroid Build Coastguard Worker
100*6dbdd20aSAndroid Build Coastguard WorkerClicking on "Query" generates a table with the selected columns.
101*6dbdd20aSAndroid Build Coastguard WorkerTable cells with the expand icon can be expanded to show the next column values.
102*6dbdd20aSAndroid Build Coastguard WorkerThe "name (stack)" column displays top level slices that can be expanded to show
103*6dbdd20aSAndroid Build Coastguard Workertheir descendants down to the last child.
104*6dbdd20aSAndroid Build Coastguard Worker
105*6dbdd20aSAndroid Build Coastguard Worker![Pivot table](/docs/images/pivot-tables/pivot-table.png)
106*6dbdd20aSAndroid Build Coastguard Worker
107*6dbdd20aSAndroid Build Coastguard WorkerArea selection pops up a pre-filled pivot table restricted over the selected
108*6dbdd20aSAndroid Build Coastguard Workertimestamps and track ids.
109*6dbdd20aSAndroid Build Coastguard Worker
110*6dbdd20aSAndroid Build Coastguard Worker![Pivot table area selection](/docs/images/pivot-tables/pivot-table-area-selection.png)
111*6dbdd20aSAndroid Build Coastguard Worker
112*6dbdd20aSAndroid Build Coastguard Worker### Disabling metrics
113*6dbdd20aSAndroid Build Coastguard Worker
114*6dbdd20aSAndroid Build Coastguard WorkerSome metrics execute at trace load time to annotate the trace with
115*6dbdd20aSAndroid Build Coastguard Workeradditional tracks and events. You can stop these metrics from
116*6dbdd20aSAndroid Build Coastguard Workerrunning by disabling them in the 'Flags' page:
117*6dbdd20aSAndroid Build Coastguard Worker
118*6dbdd20aSAndroid Build Coastguard Worker![Disable metrics from running at trace load time](/docs/images/perfetto-ui-disable-metrics.png)
119*6dbdd20aSAndroid Build Coastguard Worker
120*6dbdd20aSAndroid Build Coastguard Worker
121