1#!/usr/bin/env python3 2# Copyright (C) 2023 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License a 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15import os 16import sys 17from typing import List 18 19from python.generators.diff_tests import testing 20 21# A hack to import using `diff_tests.` which prevents the risk name conflicts, 22# i.e importing a module when user has a different package of the same name 23# installed. 24TRACE_PROCESSOR_TEST_DIR = os.path.dirname( 25 os.path.dirname(os.path.abspath(__file__))) 26sys.path.append(TRACE_PROCESSOR_TEST_DIR) 27 28from diff_tests.metrics.android.tests import AndroidMetrics 29from diff_tests.metrics.camera.tests import Camera 30from diff_tests.metrics.chrome.tests import ChromeMetrics 31from diff_tests.metrics.chrome.tests_args import ChromeArgs 32from diff_tests.metrics.chrome.tests_processes import ChromeProcesses 33from diff_tests.metrics.chrome.tests_rail_modes import ChromeRailModes 34from diff_tests.metrics.chrome.tests_scroll_jank import ChromeScrollJankMetrics 35from diff_tests.metrics.chrome.tests_touch_gesture import ChromeTouchGesture 36from diff_tests.metrics.codecs.tests import Codecs 37from diff_tests.metrics.frame_timeline.tests import FrameTimeline 38from diff_tests.metrics.graphics.tests import GraphicsMetrics 39from diff_tests.metrics.irq.tests import IRQ 40from diff_tests.metrics.memory.tests import MemoryMetrics 41from diff_tests.metrics.network.tests import NetworkMetrics 42from diff_tests.metrics.power.tests import Power 43from diff_tests.metrics.profiling.tests import ProfilingMetrics 44from diff_tests.metrics.startup.tests import Startup 45from diff_tests.metrics.startup.tests_broadcasts import StartupBroadcasts 46from diff_tests.metrics.startup.tests_lock_contention import StartupLockContention 47from diff_tests.metrics.startup.tests_metrics import StartupMetrics 48from diff_tests.metrics.webview.tests import WebView 49from diff_tests.parser.android_fs.tests import AndroidFs 50from diff_tests.parser.android.tests import AndroidParser 51from diff_tests.parser.android.tests_android_input_event import AndroidInputEvent 52from diff_tests.parser.android.tests_bugreport import AndroidBugreport 53from diff_tests.parser.android.tests_games import AndroidGames 54from diff_tests.parser.android.tests_inputmethod_clients import InputMethodClients 55from diff_tests.parser.android.tests_inputmethod_manager_service import InputMethodManagerService 56from diff_tests.parser.android.tests_inputmethod_service import InputMethodService 57from diff_tests.parser.android.tests_protolog import ProtoLog 58from diff_tests.parser.android.tests_shell_transitions import ShellTransitions 59from diff_tests.parser.android.tests_surfaceflinger_layers import SurfaceFlingerLayers 60from diff_tests.parser.android.tests_surfaceflinger_transactions import SurfaceFlingerTransactions 61from diff_tests.parser.android.tests_viewcapture import ViewCapture 62from diff_tests.parser.atrace.tests import Atrace 63from diff_tests.parser.atrace.tests_error_handling import AtraceErrorHandling 64from diff_tests.parser.chrome.tests import ChromeParser 65from diff_tests.parser.chrome.tests_memory_snapshots import ChromeMemorySnapshots 66from diff_tests.parser.chrome.tests_v8 import ChromeV8Parser 67from diff_tests.parser.cros.tests import Cros 68from diff_tests.parser.fs.tests import Fs 69from diff_tests.parser.ftrace.ftrace_crop_tests import FtraceCrop 70from diff_tests.parser.fuchsia.tests import Fuchsia 71from diff_tests.parser.graphics.tests import GraphicsParser 72from diff_tests.parser.graphics.tests_drm_related_ftrace_events import GraphicsDrmRelatedFtraceEvents 73from diff_tests.parser.graphics.tests_gpu_trace import GraphicsGpuTrace 74from diff_tests.parser.json.tests import JsonTests 75from diff_tests.parser.memory.tests import MemoryParser 76from diff_tests.parser.network.tests import NetworkParser 77from diff_tests.parser.parsing.tests import Parsing 78from diff_tests.parser.parsing.tests_debug_annotation import ParsingDebugAnnotation 79from diff_tests.parser.parsing.tests_memory_counters import ParsingMemoryCounters 80from diff_tests.parser.parsing.tests_traced_stats import ParsingTracedStats 81from diff_tests.parser.parsing.tests_rss_stats import ParsingRssStats 82from diff_tests.parser.power.tests_energy_breakdown import PowerEnergyBreakdown 83from diff_tests.parser.power.tests_entity_state_residency import EntityStateResidency 84from diff_tests.parser.power.tests_linux_sysfs_power import LinuxSysfsPower 85from diff_tests.parser.power.tests_power_rails import PowerPowerRails 86from diff_tests.parser.power.tests_voltage_and_scaling import PowerVoltageAndScaling 87from diff_tests.parser.process_tracking.tests import ProcessTracking 88from diff_tests.parser.profiling.tests import Profiling 89from diff_tests.parser.profiling.tests_heap_graph import ProfilingHeapGraph 90from diff_tests.parser.profiling.tests_heap_profiling import ProfilingHeapProfiling 91from diff_tests.parser.profiling.tests_llvm_symbolizer import ProfilingLlvmSymbolizer 92from diff_tests.parser.sched.tests import SchedParser 93from diff_tests.parser.simpleperf.tests import Simpleperf 94from diff_tests.parser.smoke.tests import Smoke 95from diff_tests.parser.smoke.tests_compute_metrics import SmokeComputeMetrics 96from diff_tests.parser.smoke.tests_json import SmokeJson 97from diff_tests.parser.smoke.tests_sched_events import SmokeSchedEvents 98from diff_tests.parser.track_event.tests import TrackEvent 99from diff_tests.parser.translated_args.tests import TranslatedArgs 100from diff_tests.parser.ufs.tests import Ufs 101from diff_tests.parser.zip.tests import Zip 102from diff_tests.stdlib.android.frames_tests import Frames 103from diff_tests.stdlib.android.startups_tests import Startups 104from diff_tests.stdlib.android.tests import AndroidStdlib 105from diff_tests.stdlib.chrome.chrome_stdlib_testsuites import CHROME_STDLIB_TESTSUITES 106from diff_tests.stdlib.common.tests import StdlibCommon 107from diff_tests.stdlib.common.tests import StdlibCommon 108from diff_tests.stdlib.counters.tests import StdlibCounterIntervals 109from diff_tests.stdlib.cpu.tests import Cpu 110from diff_tests.stdlib.dynamic_tables.tests import DynamicTables 111from diff_tests.stdlib.export.tests import ExportTests 112from diff_tests.stdlib.gpu.tests import Gpu 113from diff_tests.stdlib.graphs.dominator_tree_tests import DominatorTree 114from diff_tests.stdlib.graphs.partition_tests import GraphPartitionTests 115from diff_tests.stdlib.graphs.search_tests import GraphSearchTests 116from diff_tests.stdlib.intervals.intersect_tests import IntervalsIntersect 117from diff_tests.stdlib.intervals.tests import StdlibIntervals 118from diff_tests.stdlib.linux.tests import LinuxStdlib 119from diff_tests.stdlib.memory.heap_graph_dominator_tree_tests import HeapGraphDominatorTree 120from diff_tests.stdlib.memory.tests import Memory 121from diff_tests.stdlib.pkvm.tests import Pkvm 122from diff_tests.stdlib.prelude.math_functions_tests import PreludeMathFunctions 123from diff_tests.stdlib.prelude.pprof_functions_tests import PreludePprofFunctions 124from diff_tests.stdlib.prelude.slices_tests import PreludeSlices 125from diff_tests.stdlib.prelude.window_functions_tests import PreludeWindowFunctions 126from diff_tests.stdlib.sched.tests import StdlibSched 127from diff_tests.stdlib.slices.tests import Slices 128from diff_tests.stdlib.span_join.tests_left_join import SpanJoinLeftJoin 129from diff_tests.stdlib.span_join.tests_outer_join import SpanJoinOuterJoin 130from diff_tests.stdlib.span_join.tests_regression import SpanJoinRegression 131from diff_tests.stdlib.span_join.tests_smoke import SpanJoinSmoke 132from diff_tests.stdlib.tests import StdlibSmoke 133from diff_tests.stdlib.timestamps.tests import Timestamps 134from diff_tests.stdlib.wattson.tests import WattsonStdlib 135from diff_tests.syntax.filtering_tests import PerfettoFiltering 136from diff_tests.syntax.function_tests import PerfettoFunction 137from diff_tests.syntax.include_tests import PerfettoInclude 138from diff_tests.syntax.macro_tests import PerfettoMacro 139from diff_tests.syntax.table_function_tests import PerfettoTableFunction 140from diff_tests.syntax.table_tests import PerfettoTable 141from diff_tests.syntax.view_tests import PerfettoView 142from diff_tests.tables.tests import Tables 143from diff_tests.tables.tests_counters import TablesCounters 144from diff_tests.tables.tests_sched import TablesSched 145 146sys.path.pop() 147 148 149def fetch_all_diff_tests(index_path: str) -> List['testing.TestCase']: 150 parser_tests = [ 151 *AndroidBugreport(index_path, 'parser/android', 152 'AndroidBugreport').fetch(), 153 *AndroidFs(index_path, 'parser/android_fs', 'AndroidFs').fetch(), 154 *AndroidGames(index_path, 'parser/android', 'AndroidGames').fetch(), 155 *AndroidParser(index_path, 'parser/android', 'AndroidParser').fetch(), 156 *Atrace(index_path, 'parser/atrace', 'Atrace').fetch(), 157 *AtraceErrorHandling(index_path, 'parser/atrace', 158 'AtraceErrorHandling').fetch(), 159 *ChromeMemorySnapshots(index_path, 'parser/chrome', 160 'ChromeMemorySnapshots').fetch(), 161 *ChromeParser(index_path, 'parser/chrome', 'ChromeParser').fetch(), 162 *ChromeV8Parser(index_path, 'parser/chrome', 'ChromeV8Parser').fetch(), 163 *Cros(index_path, 'parser/cros', 'Cros').fetch(), 164 *Fs(index_path, 'parser/fs', 'Fs').fetch(), 165 *Fuchsia(index_path, 'parser/fuchsia', 'Fuchsia').fetch(), 166 *GraphicsDrmRelatedFtraceEvents(index_path, 'parser/graphics', 167 'GraphicsDrmRelatedFtraceEvents').fetch(), 168 *GraphicsGpuTrace(index_path, 'parser/graphics', 169 'GraphicsGpuTrace').fetch(), 170 *GraphicsParser(index_path, 'parser/graphics', 'GraphicsParser').fetch(), 171 *JsonTests(index_path, 'parser/json', 'JsonParser').fetch(), 172 *MemoryParser(index_path, 'parser/memory', 'MemoryParser').fetch(), 173 *NetworkParser(index_path, 'parser/network', 'NetworkParser').fetch(), 174 *PowerEnergyBreakdown(index_path, 'parser/power', 175 'PowerEnergyBreakdown').fetch(), 176 *PowerPowerRails(index_path, 'parser/power', 'PowerPowerRails').fetch(), 177 *PowerVoltageAndScaling(index_path, 'parser/power', 178 'PowerVoltageAndScaling').fetch(), 179 *EntityStateResidency(index_path, 'parser/power', 180 'EntityStateResidency').fetch(), 181 *LinuxSysfsPower(index_path, 'parser/power', 'LinuxSysfsPower').fetch(), 182 *ProcessTracking(index_path, 'parser/process_tracking', 183 'ProcessTracking').fetch(), 184 *Profiling(index_path, 'parser/profiling', 'Profiling').fetch(), 185 *ProfilingHeapGraph(index_path, 'parser/profiling', 186 'ProfilingHeapGraph').fetch(), 187 *ProfilingHeapProfiling(index_path, 'parser/profiling', 188 'ProfilingHeapProfiling').fetch(), 189 *ProfilingLlvmSymbolizer(index_path, 'parser/profiling', 190 'ProfilingLlvmSymbolizer').fetch(), 191 *SchedParser(index_path, 'parser/sched', 'SchedParser').fetch(), 192 *Simpleperf(index_path, 'parser/simpleperf', 'Simpleperf').fetch(), 193 *StdlibSched(index_path, 'stdlib/sched', 'StdlibSched').fetch(), 194 *Smoke(index_path, 'parser/smoke', 'Smoke').fetch(), 195 *SmokeComputeMetrics(index_path, 'parser/smoke', 196 'SmokeComputeMetrics').fetch(), 197 *SmokeJson(index_path, 'parser/smoke', 'SmokeJson').fetch(), 198 *SmokeSchedEvents(index_path, 'parser/smoke', 'SmokeSchedEvents').fetch(), 199 *InputMethodClients(index_path, 'parser/android', 200 'InputMethodClients').fetch(), 201 *InputMethodManagerService(index_path, 'parser/android', 202 'InputMethodManagerService').fetch(), 203 *InputMethodService(index_path, 'parser/android', 204 'InputMethodService').fetch(), 205 *SurfaceFlingerLayers(index_path, 'parser/android', 206 'SurfaceFlingerLayers').fetch(), 207 *SurfaceFlingerTransactions(index_path, 'parser/android', 208 'SurfaceFlingerTransactions').fetch(), 209 *ShellTransitions(index_path, 'parser/android', 210 'ShellTransitions').fetch(), 211 *ProtoLog(index_path, 'parser/android', 'ProtoLog').fetch(), 212 *ViewCapture(index_path, 'parser/android', 'ViewCapture').fetch(), 213 *TrackEvent(index_path, 'parser/track_event', 'TrackEvent').fetch(), 214 *TranslatedArgs(index_path, 'parser/translated_args', 215 'TranslatedArgs').fetch(), 216 *Ufs(index_path, 'parser/ufs', 'Ufs').fetch(), 217 # TODO(altimin, lalitm): "parsing" should be split into more specific 218 # directories. 219 *Parsing(index_path, 'parser/parsing', 'Parsing').fetch(), 220 *ParsingDebugAnnotation(index_path, 'parser/parsing', 221 'ParsingDebugAnnotation').fetch(), 222 *ParsingRssStats(index_path, 'parser/parsing', 'ParsingRssStats').fetch(), 223 *ParsingMemoryCounters(index_path, 'parser/parsing', 224 'ParsingMemoryCounters').fetch(), 225 *FtraceCrop(index_path, 'parser/ftrace', 'FtraceCrop').fetch(), 226 *ParsingTracedStats(index_path, 'parser/parsing', 227 'ParsingTracedStats').fetch(), 228 *Zip(index_path, 'parser/zip', 'Zip').fetch(), 229 *AndroidInputEvent(index_path, 'parser/android', 'AndroidInputEvent').fetch(), 230 ] 231 232 metrics_tests = [ 233 *AndroidMetrics(index_path, 'metrics/android', 'AndroidMetrics').fetch(), 234 *Camera(index_path, 'metrics/camera', 'Camera').fetch(), 235 *ChromeArgs(index_path, 'metrics/chrome', 'ChromeArgs').fetch(), 236 *ChromeMetrics(index_path, 'metrics/chrome', 'ChromeMetrics').fetch(), 237 *ChromeProcesses(index_path, 'metrics/chrome', 'ChromeProcesses').fetch(), 238 *ChromeRailModes(index_path, 'metrics/chrome', 'ChromeRailModes').fetch(), 239 *ChromeScrollJankMetrics(index_path, 'metrics/chrome', 240 'ChromeScrollJankMetrics').fetch(), 241 *ChromeTouchGesture(index_path, 'metrics/chrome', 242 'ChromeTouchGesture').fetch(), 243 *Codecs(index_path, 'metrics/codecs', 'Codecs').fetch(), 244 *FrameTimeline(index_path, 'metrics/frame_timeline', 245 'FrameTimeline').fetch(), 246 *GraphicsMetrics(index_path, 'metrics/graphics', 247 'GraphicsMetrics').fetch(), 248 *IRQ(index_path, 'metrics/irq', 'IRQ').fetch(), 249 *MemoryMetrics(index_path, 'metrics/memory', 'MemoryMetrics').fetch(), 250 *NetworkMetrics(index_path, 'metrics/network', 'orkMetrics').fetch(), 251 *Power(index_path, 'metrics/power', 'Power').fetch(), 252 *ProfilingMetrics(index_path, 'metrics/profiling', 253 'ProfilingMetrics').fetch(), 254 *Startup(index_path, 'metrics/startup', 'Startup').fetch(), 255 *StartupBroadcasts(index_path, 'metrics/startup', 256 'StartupBroadcasts').fetch(), 257 *StartupLockContention(index_path, 'metrics/startup', 258 'StartupLockContention').fetch(), 259 *StartupMetrics(index_path, 'metrics/startup', 'StartupMetrics').fetch(), 260 *WebView(index_path, 'metrics/webview', 'WebView').fetch(), 261 ] 262 263 chrome_test_dir = os.path.abspath( 264 os.path.join(__file__, '../../../data/chrome')) 265 chrome_stdlib_tests = [] 266 for test_suite_cls in CHROME_STDLIB_TESTSUITES: 267 test_suite = test_suite_cls(index_path, 'stdlib/chrome', 268 test_suite_cls.__name__, chrome_test_dir) 269 chrome_stdlib_tests += test_suite.fetch() 270 271 stdlib_tests = [ 272 *AndroidStdlib(index_path, 'stdlib/android', 'AndroidStdlib').fetch(), 273 *Cpu(index_path, 'stdlib/cpu', 'Cpu').fetch(), 274 *DominatorTree(index_path, 'stdlib/graphs', 'DominatorTree').fetch(), 275 *ExportTests(index_path, 'stdlib/export', 'ExportTests').fetch(), 276 *Frames(index_path, 'stdlib/android', 'Frames').fetch(), 277 *Gpu(index_path, 'stdlib/gpu', 'Gpu').fetch(), 278 *GraphSearchTests(index_path, 'stdlib/graphs', 279 'GraphSearchTests').fetch(), 280 *GraphPartitionTests(index_path, 'stdlib/graphs', 281 'GraphPartitionTests').fetch(), 282 *StdlibCounterIntervals(index_path, 'stdlib/counters', 283 'StdlibCounterIntervals').fetch(), 284 *DynamicTables(index_path, 'stdlib/dynamic_tables', 285 'DynamicTables').fetch(), 286 *LinuxStdlib(index_path, 'stdlib/linux', 'LinuxStdlib').fetch(), 287 *Memory(index_path, 'stdlib/memory', 'Memory').fetch(), 288 *PreludeMathFunctions(index_path, 'stdlib/prelude', 289 'PreludeMathFunctions').fetch(), 290 *HeapGraphDominatorTree(index_path, 'stdlib/memory', 291 'HeapGraphDominatorTree').fetch(), 292 *PreludePprofFunctions(index_path, 'stdlib/prelude', 293 'PreludePprofFunctions').fetch(), 294 *PreludeWindowFunctions(index_path, 'stdlib/prelude', 295 'PreludeWindowFunctions').fetch(), 296 *Pkvm(index_path, 'stdlib/pkvm', 'Pkvm').fetch(), 297 *PreludeSlices(index_path, 'stdlib/prelude', 'PreludeSlices').fetch(), 298 *StdlibSmoke(index_path, 'stdlib', 'StdlibSmoke').fetch(), 299 *StdlibCommon(index_path, 'stdlib/common', 'StdlibCommon').fetch(), 300 *Slices(index_path, 'stdlib/slices', 'Slices').fetch(), 301 *SpanJoinLeftJoin(index_path, 'stdlib/span_join', 302 'SpanJoinLeftJoin').fetch(), 303 *SpanJoinOuterJoin(index_path, 'stdlib/span_join', 304 'SpanJoinOuterJoin').fetch(), 305 *SpanJoinRegression(index_path, 'stdlib/span_join', 306 'SpanJoinRegression').fetch(), 307 *SpanJoinSmoke(index_path, 'stdlib/span_join', 'SpanJoinSmoke').fetch(), 308 *StdlibCommon(index_path, 'stdlib/common', 'StdlibCommon').fetch(), 309 *StdlibIntervals(index_path, 'stdlib/intervals', 310 'StdlibIntervals').fetch(), 311 *IntervalsIntersect(index_path, 'stdlib/intervals', 312 'StdlibIntervalsIntersect').fetch(), 313 *Startups(index_path, 'stdlib/android', 'Startups').fetch(), 314 *Timestamps(index_path, 'stdlib/timestamps', 'Timestamps').fetch(), 315 *WattsonStdlib(index_path, 'stdlib/wattson', 'WattsonStdlib').fetch(), 316 ] + chrome_stdlib_tests 317 318 syntax_tests = [ 319 *PerfettoFiltering(index_path, 'syntax', 'PerfettoFiltering').fetch(), 320 *PerfettoFunction(index_path, 'syntax', 'PerfettoFunction').fetch(), 321 *PerfettoInclude(index_path, 'syntax', 'PerfettoInclude').fetch(), 322 *PerfettoMacro(index_path, 'syntax', 'PerfettoMacro').fetch(), 323 *PerfettoTable(index_path, 'syntax', 'PerfettoTable').fetch(), 324 *PerfettoTableFunction(index_path, 'syntax', 325 'PerfettoTableFunction').fetch(), 326 *PerfettoView(index_path, 'syntax', 'PerfettoView').fetch(), 327 ] 328 329 return parser_tests + metrics_tests + stdlib_tests + syntax_tests + [ 330 *Tables(index_path, 'tables', 'Tables').fetch(), 331 *TablesCounters(index_path, 'tables', 'TablesCounters').fetch(), 332 *TablesSched(index_path, 'tables', 'TablesSched').fetch(), 333 ] 334