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.slice_tables import SCHED_SLICE_TABLE 32 33ANCESTOR_SLICE_TABLE = Table( 34 python_module=__file__, 35 class_name="AncestorSliceTable", 36 sql_name="ancestor_slice", 37 columns=[ 38 C("start_id", CppTableId(SLICE_TABLE), flags=ColumnFlag.HIDDEN), 39 ], 40 parent=SLICE_TABLE) 41 42ANCESTOR_SLICE_BY_STACK_TABLE = Table( 43 python_module=__file__, 44 class_name="AncestorSliceByStackTable", 45 sql_name="ancestor_slice_by_stack", 46 columns=[ 47 C("start_stack_id", CppInt64(), flags=ColumnFlag.HIDDEN), 48 ], 49 parent=SLICE_TABLE) 50 51ANCESTOR_STACK_PROFILE_CALLSITE_TABLE = Table( 52 python_module=__file__, 53 class_name="AncestorStackProfileCallsiteTable", 54 sql_name="experimental_ancestor_stack_profile_callsite", 55 columns=[ 56 C("start_id", 57 CppTableId(STACK_PROFILE_CALLSITE_TABLE), 58 flags=ColumnFlag.HIDDEN), 59 ], 60 parent=STACK_PROFILE_CALLSITE_TABLE) 61 62CONNECTED_FLOW_TABLE = Table( 63 python_module=__file__, 64 class_name="ConnectedFlowTable", 65 sql_name="not_exposed_to_sql", 66 columns=[ 67 C("start_id", CppTableId(SLICE_TABLE), flags=ColumnFlag.HIDDEN), 68 ], 69 parent=FLOW_TABLE) 70 71DESCENDANT_SLICE_TABLE = Table( 72 python_module=__file__, 73 class_name="DescendantSliceTable", 74 sql_name="descendant_slice", 75 columns=[ 76 C("start_id", CppTableId(SLICE_TABLE), flags=ColumnFlag.HIDDEN), 77 ], 78 parent=SLICE_TABLE) 79 80DESCENDANT_SLICE_BY_STACK_TABLE = Table( 81 python_module=__file__, 82 class_name="DescendantSliceByStackTable", 83 sql_name="descendant_slice_by_stack", 84 columns=[ 85 C("start_stack_id", CppInt64(), flags=ColumnFlag.HIDDEN), 86 ], 87 parent=SLICE_TABLE) 88 89EXPERIMENTAL_ANNOTATED_CALLSTACK_TABLE = Table( 90 python_module=__file__, 91 class_name="ExperimentalAnnotatedCallstackTable", 92 sql_name="experimental_annotated_callstack", 93 columns=[ 94 C("annotation", CppString()), 95 C("start_id", 96 CppTableId(STACK_PROFILE_CALLSITE_TABLE), 97 flags=ColumnFlag.HIDDEN), 98 ], 99 parent=STACK_PROFILE_CALLSITE_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_ANNOTATED_CALLSTACK_TABLE = Table( 114 python_module=__file__, 115 class_name="ExperimentalAnnotatedCallstackTable", 116 sql_name="experimental_annotated_callstack", 117 columns=[ 118 C("annotation", CppString()), 119 C("start_id", 120 CppTableId(STACK_PROFILE_CALLSITE_TABLE), 121 flags=ColumnFlag.HIDDEN), 122 ], 123 parent=STACK_PROFILE_CALLSITE_TABLE) 124 125EXPERIMENTAL_COUNTER_DUR_TABLE = Table( 126 python_module=__file__, 127 class_name="ExperimentalCounterDurTable", 128 sql_name="experimental_counter_dur", 129 columns=[ 130 C("dur", CppInt64()), 131 C("delta", CppDouble()), 132 ], 133 parent=COUNTER_TABLE) 134 135EXPERIMENTAL_SCHED_UPID_TABLE = Table( 136 python_module=__file__, 137 class_name="ExperimentalSchedUpidTable", 138 sql_name="experimental_sched_upid", 139 columns=[ 140 C("upid", CppOptional(CppTableId(PROCESS_TABLE))), 141 ], 142 parent=SCHED_SLICE_TABLE) 143 144EXPERIMENTAL_SLICE_LAYOUT_TABLE = Table( 145 python_module=__file__, 146 class_name="ExperimentalSliceLayoutTable", 147 sql_name="experimental_slice_layout", 148 columns=[ 149 C("layout_depth", CppUint32()), 150 C("filter_track_ids", CppString(), flags=ColumnFlag.HIDDEN), 151 ], 152 parent=SLICE_TABLE) 153 154# Keep this list sorted. 155ALL_TABLES = [ 156 ANCESTOR_SLICE_BY_STACK_TABLE, 157 ANCESTOR_SLICE_TABLE, 158 ANCESTOR_STACK_PROFILE_CALLSITE_TABLE, 159 CONNECTED_FLOW_TABLE, 160 DESCENDANT_SLICE_BY_STACK_TABLE, 161 DESCENDANT_SLICE_TABLE, 162 EXPERIMENTAL_ANNOTATED_CALLSTACK_TABLE, 163 EXPERIMENTAL_COUNTER_DUR_TABLE, 164 EXPERIMENTAL_SCHED_UPID_TABLE, 165 EXPERIMENTAL_SLICE_LAYOUT_TABLE, 166] 167