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