xref: /aosp_15_r20/external/perfetto/test/trace_processor/diff_tests/parser/simpleperf/clocks_align_test.sql (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1--
2-- Copyright 2024 The Android Open Source Project
3--
4-- Licensed under the Apache License, Version 2.0 (the "License");
5-- you may not use this file except in compliance with the License.
6-- You may obtain a copy of the License at
7--
8--     https://www.apache.org/licenses/LICENSE-2.0
9--
10-- Unless required by applicable law or agreed to in writing, software
11-- distributed under the License is distributed on an "AS IS" BASIS,
12-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13-- See the License for the specific language governing permissions and
14-- limitations under the License.
15--
16
17CREATE PERFETTO VIEW perf_sample_in(ts TIMESTAMP, dur LONG)
18AS
19SELECT ts, 0 AS dur FROM perf_sample;
20
21CREATE VIRTUAL TABLE span
22USING
23  SPAN_JOIN(perf_sample_in, slice PARTITIONED depth);
24
25CREATE PERFETTO TABLE slice_stack
26AS
27WITH
28  tmp AS (
29    SELECT
30      ts,
31      parent_stack_id,
32      string_AGG(IIF(name = 'Main loop', 'main', name), ',')
33        OVER (
34          PARTITION BY ts
35          ORDER BY depth ASC
36          RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
37        ) AS stack
38    FROM span
39  )
40SELECT ts, stack FROM tmp WHERE parent_stack_id = 0 ORDER BY TS ASC;
41
42CREATE PERFETTO TABLE perf_stack
43AS
44WITH
45  symbol AS (
46    SELECT
47      id,
48      symbol_set_id,
49      replace(replace(name, '(anonymous namespace)::', ''), '()', '') AS name
50    FROM stack_profile_symbol
51  ),
52  symbol_agg AS (
53    SELECT
54      id,
55      symbol_set_id,
56      string_agg(name, ',')
57        OVER (
58          PARTITION BY symbol_set_id
59          ORDER BY id DESC
60          RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
61        ) AS name
62    FROM symbol
63    WHERE name IN ('main', 'A', 'B', 'C', 'D', 'E')
64  ),
65  inline AS (
66    SELECT symbol_set_id, name FROM symbol_agg WHERE id = symbol_set_id
67  ),
68  frame AS (
69    SELECT f.id AS frame_id, i.name
70    FROM STACK_PROFILE_FRAME f, inline i
71    USING (symbol_set_id)
72  ),
73  child AS (
74    SELECT
75      s.ts,
76      spc.id,
77      spc.parent_id,
78      name
79    FROM perf_sample s, stack_profile_callsite spc
80    ON (s.callsite_id = spc.id),
81    frame USING (frame_id)
82    UNION ALL
83    SELECT
84      child.ts,
85      parent.id,
86      parent.parent_id,
87      COALESCE(f.name || ',', '') || child.name AS name
88    FROM child, stack_profile_callsite parent
89    ON (child.parent_id = parent.id)
90    LEFT JOIN frame f
91      USING (frame_id)
92  )
93SELECT ts, name AS stack FROM child WHERE parent_id IS NULL ORDER BY ts ASC;
94
95SELECT COUNT(*) AS misaligned_count
96FROM slice_stack s
97FULL JOIN perf_stack p
98  USING (ts)
99WHERE s.stack <> p.stack;
100