xref: /aosp_15_r20/external/perfetto/docs/analysis/builtin.md (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker# PerfettoSQL Built-ins
2*6dbdd20aSAndroid Build Coastguard Worker
3*6dbdd20aSAndroid Build Coastguard WorkerThese are functions built into C++ which reduce the amount of boilerplate which
4*6dbdd20aSAndroid Build Coastguard Workerneeds to be written in SQL.
5*6dbdd20aSAndroid Build Coastguard Worker
6*6dbdd20aSAndroid Build Coastguard Worker## Profile Functions
7*6dbdd20aSAndroid Build Coastguard Worker
8*6dbdd20aSAndroid Build Coastguard Worker### STACK_FROM_STACK_PROFILE_FRAME
9*6dbdd20aSAndroid Build Coastguard Worker
10*6dbdd20aSAndroid Build Coastguard Worker`STACK_FROM_STACK_PROFILE_FRAME(frame_id)`
11*6dbdd20aSAndroid Build Coastguard Worker
12*6dbdd20aSAndroid Build Coastguard Worker#### Description
13*6dbdd20aSAndroid Build Coastguard Worker
14*6dbdd20aSAndroid Build Coastguard WorkerCreates a stack with just the frame referenced by `frame_id` (reference to the
15*6dbdd20aSAndroid Build Coastguard Worker[stack_profile_frame](sql-tables.autogen#stack_profile_frame) table)
16*6dbdd20aSAndroid Build Coastguard Worker
17*6dbdd20aSAndroid Build Coastguard Worker#### Return Type
18*6dbdd20aSAndroid Build Coastguard Worker
19*6dbdd20aSAndroid Build Coastguard Worker`BYTES`
20*6dbdd20aSAndroid Build Coastguard Worker
21*6dbdd20aSAndroid Build Coastguard Worker#### Arguments
22*6dbdd20aSAndroid Build Coastguard Worker
23*6dbdd20aSAndroid Build Coastguard WorkerArgument | Type | Description
24*6dbdd20aSAndroid Build Coastguard Worker-------- | ---- | -----------
25*6dbdd20aSAndroid Build Coastguard Workerframe_id | StackProfileFrameTable::Id | reference to the [stack_profile_frame](sql-tables.autogen#stack_profile_frame) table
26*6dbdd20aSAndroid Build Coastguard Worker
27*6dbdd20aSAndroid Build Coastguard Worker### STACK_FROM_STACK_PROFILE_CALLSITE
28*6dbdd20aSAndroid Build Coastguard Worker
29*6dbdd20aSAndroid Build Coastguard Worker`STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)`
30*6dbdd20aSAndroid Build Coastguard Worker
31*6dbdd20aSAndroid Build Coastguard Worker#### Description
32*6dbdd20aSAndroid Build Coastguard Worker
33*6dbdd20aSAndroid Build Coastguard WorkerCreates a stack by taking a `callsite_id` (reference to the
34*6dbdd20aSAndroid Build Coastguard Worker[stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table) and
35*6dbdd20aSAndroid Build Coastguard Workergenerating a list of frames (by walking the
36*6dbdd20aSAndroid Build Coastguard Worker[stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table)
37*6dbdd20aSAndroid Build Coastguard Worker
38*6dbdd20aSAndroid Build Coastguard Worker#### Return Type
39*6dbdd20aSAndroid Build Coastguard Worker
40*6dbdd20aSAndroid Build Coastguard Worker`BYTES`
41*6dbdd20aSAndroid Build Coastguard Worker
42*6dbdd20aSAndroid Build Coastguard Worker#### Arguments
43*6dbdd20aSAndroid Build Coastguard Worker
44*6dbdd20aSAndroid Build Coastguard WorkerArgument | Type | Description
45*6dbdd20aSAndroid Build Coastguard Worker-------- | ---- | -----------
46*6dbdd20aSAndroid Build Coastguard Workercallsite_id | StackProfileCallsiteTable::Id | reference to the [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table
47*6dbdd20aSAndroid Build Coastguard Worker
48*6dbdd20aSAndroid Build Coastguard Worker### CAT_STACKS
49*6dbdd20aSAndroid Build Coastguard Worker
50*6dbdd20aSAndroid Build Coastguard Worker`CAT_STACKS(([root [[,level_1 [, ...]], leaf]])`
51*6dbdd20aSAndroid Build Coastguard Worker
52*6dbdd20aSAndroid Build Coastguard Worker#### Description
53*6dbdd20aSAndroid Build Coastguard Worker
54*6dbdd20aSAndroid Build Coastguard WorkerCreates a Stack by concatenating other Stacks. Also accepts STRING values for
55*6dbdd20aSAndroid Build Coastguard Workerwhich it generates a fake Frame. Null values are just ignored.
56*6dbdd20aSAndroid Build Coastguard Worker
57*6dbdd20aSAndroid Build Coastguard Worker#### Return Type
58*6dbdd20aSAndroid Build Coastguard Worker
59*6dbdd20aSAndroid Build Coastguard Worker`BYTES`
60*6dbdd20aSAndroid Build Coastguard Worker
61*6dbdd20aSAndroid Build Coastguard Worker#### Arguments
62*6dbdd20aSAndroid Build Coastguard Worker
63*6dbdd20aSAndroid Build Coastguard WorkerArgument | Type | Description
64*6dbdd20aSAndroid Build Coastguard Worker-------- | ---- | -----------
65*6dbdd20aSAndroid Build Coastguard Workerroot | BYTES or STRING | Stack or STRING for which a fake Frame is generated
66*6dbdd20aSAndroid Build Coastguard Worker... | BYTES or STRING | Stack or STRING for which a fake Frame is generated
67*6dbdd20aSAndroid Build Coastguard Workerleaf | BYTES or STRING | Stack or STRING for which a fake Frame is generated
68*6dbdd20aSAndroid Build Coastguard Worker
69*6dbdd20aSAndroid Build Coastguard Worker### EXPERIMENTAL_PROFILE
70*6dbdd20aSAndroid Build Coastguard Worker
71*6dbdd20aSAndroid Build Coastguard Worker`EXPERIMENTAL_PROFILE(stack [,sample_type, sample_units, sample_value]*)`
72*6dbdd20aSAndroid Build Coastguard Worker
73*6dbdd20aSAndroid Build Coastguard Worker#### Description
74*6dbdd20aSAndroid Build Coastguard Worker
75*6dbdd20aSAndroid Build Coastguard WorkerAggregation function that generates a profile in
76*6dbdd20aSAndroid Build Coastguard Worker[pprof](https://github.com/google/pprof) format from the given samples.
77*6dbdd20aSAndroid Build Coastguard Worker
78*6dbdd20aSAndroid Build Coastguard Worker#### Return Type
79*6dbdd20aSAndroid Build Coastguard Worker
80*6dbdd20aSAndroid Build Coastguard Worker`BYTES` ([pprof](https://github.com/google/pprof) data)
81*6dbdd20aSAndroid Build Coastguard Worker
82*6dbdd20aSAndroid Build Coastguard Worker#### Arguments
83*6dbdd20aSAndroid Build Coastguard Worker
84*6dbdd20aSAndroid Build Coastguard WorkerArgument | Type | Description
85*6dbdd20aSAndroid Build Coastguard Worker-------- | ---- | -----------
86*6dbdd20aSAndroid Build Coastguard Workerstack | BYTES | Stack or string for which a fake Frame is generated
87*6dbdd20aSAndroid Build Coastguard Workersample_type | STRING | Type of the sample value (e.g. size, time)
88*6dbdd20aSAndroid Build Coastguard Workersample_units | STRING | Units of the sample value (e.g. bytes, count)
89*6dbdd20aSAndroid Build Coastguard Workersample_value | LONG | Value for the sample
90*6dbdd20aSAndroid Build Coastguard Worker
91*6dbdd20aSAndroid Build Coastguard WorkerMultiple samples can be specified.
92*6dbdd20aSAndroid Build Coastguard Worker
93*6dbdd20aSAndroid Build Coastguard WorkerIf only the `stack` argument is present, a `"samples"`, `"count"`, and `1` are
94*6dbdd20aSAndroid Build Coastguard Workerused as defaults for `sample_type`, `sample_units`, and `sample_value`
95*6dbdd20aSAndroid Build Coastguard Worker respectively.
96*6dbdd20aSAndroid Build Coastguard Worker
97*6dbdd20aSAndroid Build Coastguard Worker#### Example
98*6dbdd20aSAndroid Build Coastguard Worker
99*6dbdd20aSAndroid Build Coastguard WorkerCPU profile
100*6dbdd20aSAndroid Build Coastguard Worker
101*6dbdd20aSAndroid Build Coastguard Worker```sql
102*6dbdd20aSAndroid Build Coastguard WorkerSELECT
103*6dbdd20aSAndroid Build Coastguard Worker  perf_session_id,
104*6dbdd20aSAndroid Build Coastguard Worker  EXPERIMENTAL_PROFILE(
105*6dbdd20aSAndroid Build Coastguard Worker    STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id),
106*6dbdd20aSAndroid Build Coastguard Worker    'samples',
107*6dbdd20aSAndroid Build Coastguard Worker    'count',
108*6dbdd20aSAndroid Build Coastguard Worker    1) AS profile
109*6dbdd20aSAndroid Build Coastguard WorkerFROM perf_sample
110*6dbdd20aSAndroid Build Coastguard WorkerGROUP BY perf_session_id
111*6dbdd20aSAndroid Build Coastguard Worker```
112*6dbdd20aSAndroid Build Coastguard Worker
113*6dbdd20aSAndroid Build Coastguard WorkerHeap profile
114*6dbdd20aSAndroid Build Coastguard Worker
115*6dbdd20aSAndroid Build Coastguard Worker```sql
116*6dbdd20aSAndroid Build Coastguard WorkerSELECT
117*6dbdd20aSAndroid Build Coastguard Worker  EXPERIMENTAL_PROFILE(
118*6dbdd20aSAndroid Build Coastguard Worker    CAT_STACKS(heap_name, STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)),
119*6dbdd20aSAndroid Build Coastguard Worker    'count',
120*6dbdd20aSAndroid Build Coastguard Worker    'count',
121*6dbdd20aSAndroid Build Coastguard Worker    count,
122*6dbdd20aSAndroid Build Coastguard Worker    'size',
123*6dbdd20aSAndroid Build Coastguard Worker    'bytes',
124*6dbdd20aSAndroid Build Coastguard Worker    size) AS profile
125*6dbdd20aSAndroid Build Coastguard WorkerFROM heap_profile_allocation
126*6dbdd20aSAndroid Build Coastguard WorkerWHERE size >= 0 AND count >= 0
127*6dbdd20aSAndroid Build Coastguard Worker```