• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (C) 2023 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14"""Contains tables for finding ancestor events."""
15
16from python.generators.trace_processor_table.public import Column as C
17from python.generators.trace_processor_table.public import ColumnFlag
18from python.generators.trace_processor_table.public import CppDouble
19from python.generators.trace_processor_table.public import CppInt64
20from python.generators.trace_processor_table.public import CppOptional
21from python.generators.trace_processor_table.public import CppString
22from python.generators.trace_processor_table.public import CppTableId
23from python.generators.trace_processor_table.public import CppUint32
24from python.generators.trace_processor_table.public import Table
25
26from src.trace_processor.tables.counter_tables import COUNTER_TABLE
27from src.trace_processor.tables.flow_tables import FLOW_TABLE
28from src.trace_processor.tables.metadata_tables import PROCESS_TABLE
29from src.trace_processor.tables.profiler_tables import STACK_PROFILE_CALLSITE_TABLE
30from src.trace_processor.tables.slice_tables import SLICE_TABLE
31from src.trace_processor.tables.sched_tables import SCHED_SLICE_TABLE
32
33TABLE_INFO_TABLE = Table(
34    python_module=__file__,
35    class_name="PerfettoTableInfoTable",
36    sql_name="perfetto_table_info",
37    columns=[
38        C("table_name", CppString(), flags=ColumnFlag.HIDDEN),
39        C('name', CppString()),
40        C('col_type', CppString()),
41        C('nullable', CppInt64()),
42        C('sorted', CppInt64()),
43    ])
44
45ANCESTOR_SLICE_TABLE = Table(
46    python_module=__file__,
47    class_name="AncestorSliceTable",
48    sql_name="ancestor_slice",
49    columns=[
50        C("start_id", CppTableId(SLICE_TABLE), flags=ColumnFlag.HIDDEN),
51    ],
52    parent=SLICE_TABLE)
53
54ANCESTOR_SLICE_BY_STACK_TABLE = Table(
55    python_module=__file__,
56    class_name="AncestorSliceByStackTable",
57    sql_name="ancestor_slice_by_stack",
58    columns=[
59        C("start_stack_id", CppInt64(), flags=ColumnFlag.HIDDEN),
60    ],
61    parent=SLICE_TABLE)
62
63ANCESTOR_STACK_PROFILE_CALLSITE_TABLE = Table(
64    python_module=__file__,
65    class_name="AncestorStackProfileCallsiteTable",
66    sql_name="experimental_ancestor_stack_profile_callsite",
67    columns=[
68        C("start_id",
69          CppTableId(STACK_PROFILE_CALLSITE_TABLE),
70          flags=ColumnFlag.HIDDEN),
71    ],
72    parent=STACK_PROFILE_CALLSITE_TABLE)
73
74CONNECTED_FLOW_TABLE = Table(
75    python_module=__file__,
76    class_name="ConnectedFlowTable",
77    sql_name="not_exposed_to_sql",
78    columns=[
79        C("start_id", CppTableId(SLICE_TABLE), flags=ColumnFlag.HIDDEN),
80    ],
81    parent=FLOW_TABLE)
82
83DESCENDANT_SLICE_TABLE = Table(
84    python_module=__file__,
85    class_name="DescendantSliceTable",
86    sql_name="descendant_slice",
87    columns=[
88        C("start_id", CppTableId(SLICE_TABLE), flags=ColumnFlag.HIDDEN),
89    ],
90    parent=SLICE_TABLE)
91
92DESCENDANT_SLICE_BY_STACK_TABLE = Table(
93    python_module=__file__,
94    class_name="DescendantSliceByStackTable",
95    sql_name="descendant_slice_by_stack",
96    columns=[
97        C("start_stack_id", CppInt64(), flags=ColumnFlag.HIDDEN),
98    ],
99    parent=SLICE_TABLE)
100
101EXPERIMENTAL_ANNOTATED_CALLSTACK_TABLE = Table(
102    python_module=__file__,
103    class_name="ExperimentalAnnotatedCallstackTable",
104    sql_name="experimental_annotated_callstack",
105    columns=[
106        C("annotation", CppString()),
107        C("start_id",
108          CppTableId(STACK_PROFILE_CALLSITE_TABLE),
109          flags=ColumnFlag.HIDDEN),
110    ],
111    parent=STACK_PROFILE_CALLSITE_TABLE)
112
113EXPERIMENTAL_COUNTER_DUR_TABLE = Table(
114    python_module=__file__,
115    class_name="ExperimentalCounterDurTable",
116    sql_name="experimental_counter_dur",
117    columns=[
118        C("dur", CppInt64()),
119        C("delta", CppDouble()),
120    ],
121    parent=COUNTER_TABLE)
122
123EXPERIMENTAL_SCHED_UPID_TABLE = Table(
124    python_module=__file__,
125    class_name="ExperimentalSchedUpidTable",
126    sql_name="__intrinsic_sched_upid",
127    columns=[
128        C("upid", CppOptional(CppTableId(PROCESS_TABLE))),
129    ],
130    parent=SCHED_SLICE_TABLE)
131
132EXPERIMENTAL_SLICE_LAYOUT_TABLE = Table(
133    python_module=__file__,
134    class_name="ExperimentalSliceLayoutTable",
135    sql_name="experimental_slice_layout",
136    columns=[
137        C("layout_depth", CppUint32()),
138        C("filter_track_ids", CppString(), flags=ColumnFlag.HIDDEN),
139    ],
140    parent=SLICE_TABLE)
141
142INTERVAL_INTERSECT_TABLE = Table(
143    python_module=__file__,
144    class_name="IntervalIntersectTable",
145    sql_name="__intrinsic_interval_intersect",
146    columns=[
147        C("ts", CppInt64()),
148        C("dur", CppInt64()),
149        C("left_id", CppUint32()),
150        C("right_id", CppUint32()),
151        C("in_left_ids", CppOptional(CppString()), flags=ColumnFlag.HIDDEN),
152        C("in_left_tses", CppOptional(CppString()), flags=ColumnFlag.HIDDEN),
153        C("in_left_durs", CppOptional(CppString()), flags=ColumnFlag.HIDDEN),
154        C("in_right_ids", CppOptional(CppString()), flags=ColumnFlag.HIDDEN),
155        C("in_right_tses", CppOptional(CppString()), flags=ColumnFlag.HIDDEN),
156        C("in_right_durs", CppOptional(CppString()), flags=ColumnFlag.HIDDEN),
157    ])
158
159DFS_WEIGHT_BOUNDED_TABLE = Table(
160    python_module=__file__,
161    class_name="DfsWeightBoundedTable",
162    sql_name="__intrinsic_dfs_weight_bounded",
163    columns=[
164        C("root_node_id", CppUint32()),
165        C("node_id", CppUint32()),
166        C("parent_node_id", CppOptional(CppUint32())),
167        C("in_source_node_ids",
168          CppOptional(CppUint32()),
169          flags=ColumnFlag.HIDDEN),
170        C("in_dest_node_ids", CppOptional(CppUint32()),
171          flags=ColumnFlag.HIDDEN),
172        C("in_edge_weights", CppOptional(CppUint32()), flags=ColumnFlag.HIDDEN),
173        C("in_root_node_ids", CppOptional(CppUint32()),
174          flags=ColumnFlag.HIDDEN),
175        C("in_root_max_weights",
176          CppOptional(CppUint32()),
177          flags=ColumnFlag.HIDDEN),
178        C("in_is_target_weight_floor",
179          CppOptional(CppUint32()),
180          flags=ColumnFlag.HIDDEN),
181    ])
182
183# Keep this list sorted.
184ALL_TABLES = [
185    ANCESTOR_SLICE_BY_STACK_TABLE,
186    ANCESTOR_SLICE_TABLE,
187    ANCESTOR_STACK_PROFILE_CALLSITE_TABLE,
188    CONNECTED_FLOW_TABLE,
189    DESCENDANT_SLICE_BY_STACK_TABLE,
190    DESCENDANT_SLICE_TABLE,
191    DFS_WEIGHT_BOUNDED_TABLE,
192    EXPERIMENTAL_ANNOTATED_CALLSTACK_TABLE,
193    EXPERIMENTAL_COUNTER_DUR_TABLE,
194    EXPERIMENTAL_SCHED_UPID_TABLE,
195    EXPERIMENTAL_SLICE_LAYOUT_TABLE,
196    INTERVAL_INTERSECT_TABLE,
197    TABLE_INFO_TABLE,
198]
199