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 83ARGS_WITH_DEFAULTS_TABLE = Table( 84 python_module=__file__, 85 class_name='WinscopeArgsWithDefaultsTable', 86 sql_name='__intrinsic_winscope_proto_to_args_with_defaults', 87 columns=[ 88 C("table_name", CppString(), flags=ColumnFlag.HIDDEN), 89 C('base64_proto_id', CppUint32()), 90 C('flat_key', CppString()), 91 C('key', CppString()), 92 C('int_value', CppOptional(CppInt64())), 93 C('string_value', CppOptional(CppString())), 94 C('real_value', CppOptional(CppDouble())), 95 C('value_type', CppString()), 96 ]) 97 98DESCENDANT_SLICE_TABLE = Table( 99 python_module=__file__, 100 class_name="DescendantSliceTable", 101 sql_name="descendant_slice", 102 columns=[ 103 C("start_id", CppTableId(SLICE_TABLE), flags=ColumnFlag.HIDDEN), 104 ], 105 parent=SLICE_TABLE) 106 107DESCENDANT_SLICE_BY_STACK_TABLE = Table( 108 python_module=__file__, 109 class_name="DescendantSliceByStackTable", 110 sql_name="descendant_slice_by_stack", 111 columns=[ 112 C("start_stack_id", CppInt64(), flags=ColumnFlag.HIDDEN), 113 ], 114 parent=SLICE_TABLE) 115 116EXPERIMENTAL_ANNOTATED_CALLSTACK_TABLE = Table( 117 python_module=__file__, 118 class_name="ExperimentalAnnotatedCallstackTable", 119 sql_name="experimental_annotated_callstack", 120 columns=[ 121 C("annotation", CppString()), 122 C("start_id", 123 CppTableId(STACK_PROFILE_CALLSITE_TABLE), 124 flags=ColumnFlag.HIDDEN), 125 ], 126 parent=STACK_PROFILE_CALLSITE_TABLE) 127 128EXPERIMENTAL_SLICE_LAYOUT_TABLE = Table( 129 python_module=__file__, 130 class_name="ExperimentalSliceLayoutTable", 131 sql_name="experimental_slice_layout", 132 columns=[ 133 C("layout_depth", CppUint32()), 134 C("filter_track_ids", CppString(), flags=ColumnFlag.HIDDEN), 135 ], 136 parent=SLICE_TABLE) 137 138DFS_WEIGHT_BOUNDED_TABLE = Table( 139 python_module=__file__, 140 class_name="DfsWeightBoundedTable", 141 sql_name="__intrinsic_dfs_weight_bounded", 142 columns=[ 143 C("root_node_id", CppUint32()), 144 C("node_id", CppUint32()), 145 C("parent_node_id", CppOptional(CppUint32())), 146 C("in_source_node_ids", 147 CppOptional(CppUint32()), 148 flags=ColumnFlag.HIDDEN), 149 C("in_dest_node_ids", CppOptional(CppUint32()), 150 flags=ColumnFlag.HIDDEN), 151 C("in_edge_weights", CppOptional(CppUint32()), flags=ColumnFlag.HIDDEN), 152 C("in_root_node_ids", CppOptional(CppUint32()), 153 flags=ColumnFlag.HIDDEN), 154 C("in_root_max_weights", 155 CppOptional(CppUint32()), 156 flags=ColumnFlag.HIDDEN), 157 C("in_is_target_weight_floor", 158 CppOptional(CppUint32()), 159 flags=ColumnFlag.HIDDEN), 160 ]) 161 162# Keep this list sorted. 163ALL_TABLES = [ 164 ANCESTOR_SLICE_BY_STACK_TABLE, 165 ANCESTOR_SLICE_TABLE, 166 ANCESTOR_STACK_PROFILE_CALLSITE_TABLE, 167 CONNECTED_FLOW_TABLE, 168 ARGS_WITH_DEFAULTS_TABLE, 169 DESCENDANT_SLICE_BY_STACK_TABLE, 170 DESCENDANT_SLICE_TABLE, 171 DFS_WEIGHT_BOUNDED_TABLE, 172 EXPERIMENTAL_ANNOTATED_CALLSTACK_TABLE, 173 EXPERIMENTAL_SLICE_LAYOUT_TABLE, 174 TABLE_INFO_TABLE, 175] 176