blob: eada13cf745b1fdf2d45bc4c210f756196c54350 [file] [log] [blame]
# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import annotations
from typing import Tuple, Type
from crossbench.probes.android_logcat import AndroidLogcatProbe
from crossbench.probes.debugger import DebuggerProbe
from crossbench.probes.dtrace import DTraceProbe
from crossbench.probes.helper import INTERNAL_NAME_PREFIX
from crossbench.probes.internal import (DurationsProbe, ErrorsProbe,
InternalProbe, LogProbe,
ResultsSummaryProbe, SystemDetailsProbe)
from crossbench.probes.js import JSProbe
from crossbench.probes.json import JsonResultProbe
from crossbench.probes.perfetto import PerfettoProbe
from crossbench.probes.performance_entries import PerformanceEntriesProbe
from crossbench.probes.polling import ShellPollingProbe
from crossbench.probes.power_sampler import PowerSamplerProbe
from crossbench.probes.powermetrics import PowerMetricsProbe
from crossbench.probes.probe import Probe
from crossbench.probes.profiling.browser_profiling import BrowserProfilingProbe
from crossbench.probes.profiling.system_profiling import ProfilingProbe
from crossbench.probes.screenshot import ScreenshotProbe
from crossbench.probes.shell import ShellProbe
from crossbench.probes.system_stats import SystemStatsProbe
from crossbench.probes.trace_processor.trace_processor import \
TraceProcessorProbe
from crossbench.probes.tracing import TracingProbe
from crossbench.probes.v8.builtins_pgo import V8BuiltinsPGOProbe
from crossbench.probes.v8.log import V8LogProbe
from crossbench.probes.v8.rcs import V8RCSProbe
from crossbench.probes.v8.turbolizer import V8TurbolizerProbe
from crossbench.probes.video import VideoProbe
from crossbench.probes.web_page_replay.recorder import WebPageReplayProbe
ABSTRACT_PROBES: Tuple[Type[Probe], ...] = (Probe, JsonResultProbe)
# Probes that are not user-configurable
# Order matters, not alpha-sorted:
# Internal probes depend on each other, for instance the ResultsSummaryProbe
# reads the values of the other internal probes and thus needs to be the first
# to be initialized and the last to be teared down to write out a summary
# result of all the other probes.
INTERNAL_PROBES: Tuple[Type[InternalProbe], ...] = (
ResultsSummaryProbe,
DurationsProbe,
ErrorsProbe,
LogProbe,
SystemDetailsProbe,
)
# ResultsSummaryProbe should always be processed last, and thus must be the
# first probe to be added to any browser.
assert INTERNAL_PROBES[0] == ResultsSummaryProbe
assert INTERNAL_PROBES[1] == DurationsProbe
# Probes that can be used on arbitrary stories and may be user configurable.
GENERAL_PURPOSE_PROBES: Tuple[Type[Probe], ...] = (
AndroidLogcatProbe,
BrowserProfilingProbe,
DTraceProbe,
DebuggerProbe,
JSProbe,
PerfettoProbe,
PerformanceEntriesProbe,
PowerMetricsProbe,
PowerSamplerProbe,
ProfilingProbe,
ScreenshotProbe,
ShellPollingProbe,
ShellProbe,
SystemStatsProbe,
TraceProcessorProbe,
TracingProbe,
V8BuiltinsPGOProbe,
V8LogProbe,
V8RCSProbe,
V8TurbolizerProbe,
VideoProbe,
WebPageReplayProbe,
)
for probe_cls in GENERAL_PURPOSE_PROBES:
assert probe_cls.IS_GENERAL_PURPOSE, (
f"Probe {probe_cls} should be marked for GENERAL_PURPOSE")
assert probe_cls.NAME
assert not probe_cls.NAME.startswith(INTERNAL_NAME_PREFIX), (
f"General purpose {probe_cls}.NAME cannot start with 'cb.'")
for probe_cls in INTERNAL_PROBES:
assert not probe_cls.IS_GENERAL_PURPOSE, (
f"Internal Probe {probe_cls} should not marked for GENERAL_PURPOSE")
assert probe_cls.NAME
assert probe_cls.NAME.startswith(INTERNAL_NAME_PREFIX), (
f"Internal {probe_cls}.NAME must start with 'cb.'")