1# Copyright (C) 2024 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""" 15Contains tables related to perf data ingestion. 16""" 17 18from python.generators.trace_processor_table.public import Column as C 19from python.generators.trace_processor_table.public import ColumnDoc 20from python.generators.trace_processor_table.public import ColumnFlag 21from python.generators.trace_processor_table.public import CppInt64 22from python.generators.trace_processor_table.public import CppOptional 23from python.generators.trace_processor_table.public import CppString 24from python.generators.trace_processor_table.public import CppTableId 25from python.generators.trace_processor_table.public import CppUint32 26from python.generators.trace_processor_table.public import Table 27from python.generators.trace_processor_table.public import TableDoc 28 29ETM_V4_CONFIGURATION = Table( 30 python_module=__file__, 31 class_name='EtmV4ConfigurationTable', 32 sql_name='__intrinsic_etm_v4_configuration', 33 columns=[ 34 C('set_id', CppUint32(), flags=ColumnFlag.SORTED | ColumnFlag.SET_ID), 35 C('cpu', CppUint32()), 36 C('cs_trace_id', CppUint32()), 37 C('core_profile', CppString()), 38 C('arch_version', CppString()), 39 C('major_version', CppUint32()), 40 C('minor_version', CppUint32()), 41 C('max_speculation_depth', CppUint32()), 42 C('bool_flags', CppInt64()), 43 ], 44 tabledoc=TableDoc( 45 doc=''' 46 This table tracks ETM configurations. Rows are grouped by a set_id 47 to represent the configurations of each of the CPUs. 48 ''', 49 group='ETM', 50 columns={ 51 'set_id': 52 ''' 53 Groups all configuration ros that belong to the same trace. 54 There is one row per each CPU where ETM was configured. 55 ''', 56 'cpu': 57 'CPU this configuration applies to.', 58 'cs_trace_id': 59 'Trace Stream ID register', 60 'core_profile': 61 'Core Profile (e.g. Cortex-A or Cortex-M)', 62 'arch_version': 63 'Architecture version (e.g. AA64)', 64 'major_version': 65 'Major version', 66 'minor_version': 67 'Minor version', 68 'max_speculation_depth': 69 'Maximum speculation depth of the core', 70 'bool_flags': 71 'Collection of boolean flags.', 72 }, 73 )) 74 75ETM_V4_SESSION = Table( 76 python_module=__file__, 77 class_name='EtmV4SessionTable', 78 sql_name='__intrinsic_etm_v4_session', 79 columns=[ 80 C('configuration_id', CppTableId(ETM_V4_CONFIGURATION)), 81 C('start_ts', CppOptional(CppInt64())), 82 ], 83 tabledoc=TableDoc( 84 doc=''' 85 Represents a trace session on one core. From time the tracing is 86 started to when it is stopped. 87 ''', 88 group='ETM', 89 columns={ 90 'configuration_id': 91 ColumnDoc( 92 'ETM configuration', 93 joinable='__intrinsic_etm_v4_configuration.id'), 94 'start_ts': 95 'time the trace ETM trace collection started.', 96 }, 97 )) 98 99ETM_V4_TRACE = Table( 100 python_module=__file__, 101 class_name='EtmV4TraceTable', 102 sql_name='__intrinsic_etm_v4_trace', 103 columns=[ 104 C('session_id', CppTableId(ETM_V4_SESSION)), 105 C('trace_set_id', 106 CppUint32(), 107 flags=ColumnFlag.SORTED | ColumnFlag.SET_ID), 108 C('size', CppInt64()), 109 ], 110 tabledoc=TableDoc( 111 doc=''' 112 Represents a contiguous chunk of ETM trace data for a core. The data 113 collected during a session might be split into different chunks in the 114 case of data loss. 115 ''', 116 group='ETM', 117 columns={ 118 'session_id': 119 ColumnDoc( 120 'Session this data belongs to', 121 joinable='__intrinsic_etm_v4_trace.id'), 122 'trace_set_id': 123 'Groups all the traces belonging to the same session.', 124 'size': 125 'Size in bytes', 126 }, 127 )) 128 129FILE_TABLE = Table( 130 python_module=__file__, 131 class_name='FileTable', 132 sql_name='__intrinsic_file', 133 columns=[ 134 C('name', CppString()), 135 C('size', CppInt64()), 136 ], 137 tabledoc=TableDoc( 138 doc=''' 139 Metadata related to the trace file parsed. Note the order in which 140 the files appear in this table corresponds to the order in which 141 they are read and sent to the tokenization stage. 142 ''', 143 group='Misc', 144 columns={ 145 'parent_id': 146 ''' 147 Parent file. E.g. files contained in a zip file will point to 148 the zip file. 149 ''', 150 'name': 151 '''File name, if known, NULL otherwise''', 152 'size': 153 '''Size in bytes''', 154 'trace_type': 155 '''Trace type''', 156 'processing_order': 157 '''In which order where the files were processed.''', 158 })) 159 160ELF_FILE_TABLE = Table( 161 python_module=__file__, 162 class_name='ElfFileTable', 163 sql_name='__intrinsic_elf_file', 164 columns=[ 165 C('file_id', CppTableId(FILE_TABLE)), 166 C('load_bias', CppInt64()), 167 C('build_id', CppOptional(CppString())), 168 ], 169 tabledoc=TableDoc( 170 doc=''' 171 Metadata related to the trace file parsed. Note the order in which 172 the files appear in this table corresponds to the order in which 173 they are read and sent to the tokenization stage. 174 ''', 175 group='Misc', 176 columns={ 177 'parent_id': 178 ''' 179 Parent file. E.g. files contained in a zip file will point to 180 the zip file. 181 ''', 182 'name': 183 '''File name, if known, NULL otherwise''', 184 'size': 185 '''Size in bytes''', 186 'trace_type': 187 '''Trace type''', 188 'processing_order': 189 '''In which order where the files were processed.''', 190 })) 191 192ALL_TABLES = [ 193 ETM_V4_CONFIGURATION, ETM_V4_TRACE, ETM_V4_SESSION, FILE_TABLE, 194 ELF_FILE_TABLE 195] 196