Better perfetto probe preset documentation and help - Add basic help text to config/probe/perfetto/trace_config/*.txtpb files - ./cb.py describe perfetto now prints the trace config preset help Change-Id: I7384c92fe3b1e5cf9f36824e7c3dbecf0d779dfb Reviewed-on: https://chromium-review.googlesource.com/c/crossbench/+/7703920 Commit-Queue: Patrick Thier <pthier@chromium.org> Auto-Submit: Camillo Bruni <cbruni@chromium.org> Reviewed-by: Patrick Thier <pthier@chromium.org>
diff --git a/config/probe/perfetto/trace_config/default.txtpb b/config/probe/perfetto/trace_config/default.txtpb index 9051445..55054ca 100644 --- a/config/probe/perfetto/trace_config/default.txtpb +++ b/config/probe/perfetto/trace_config/default.txtpb
@@ -1,3 +1,4 @@ +# Default perfetto configuration for Chromium. buffers: { size_kb: 524288 fill_policy: DISCARD
diff --git a/config/probe/perfetto/trace_config/gma_webview.txtpb b/config/probe/perfetto/trace_config/gma_webview.txtpb index 2259e5c..bbbfbe6 100644 --- a/config/probe/perfetto/trace_config/gma_webview.txtpb +++ b/config/probe/perfetto/trace_config/gma_webview.txtpb
@@ -1,3 +1,4 @@ +# Perfetto configuration for GMA Webview. buffers { size_kb: 524288 fill_policy: RING_BUFFER
diff --git a/config/probe/perfetto/trace_config/v8-profiling.txtpb b/config/probe/perfetto/trace_config/v8-profiling.txtpb index 4c32b5a..9fd9edb 100644 --- a/config/probe/perfetto/trace_config/v8-profiling.txtpb +++ b/config/probe/perfetto/trace_config/v8-profiling.txtpb
@@ -1,3 +1,4 @@ +# Perfetto configuration for V8 profiling. buffers { size_kb: 524288 fill_policy: DISCARD
diff --git a/config/probe/perfetto/trace_config/v8.txtpb b/config/probe/perfetto/trace_config/v8.txtpb index fe3400c..b78c66d 100644 --- a/config/probe/perfetto/trace_config/v8.txtpb +++ b/config/probe/perfetto/trace_config/v8.txtpb
@@ -1,3 +1,4 @@ +# Perfetto configuration for V8. buffers { size_kb: 524288 fill_policy: DISCARD
diff --git a/config/probe/perfetto/trace_config/v8_gc.txtpb b/config/probe/perfetto/trace_config/v8_gc.txtpb index 05f430d..d53b539 100644 --- a/config/probe/perfetto/trace_config/v8_gc.txtpb +++ b/config/probe/perfetto/trace_config/v8_gc.txtpb
@@ -1,3 +1,4 @@ +# Perfetto configuration for V8 garbage collection. buffers { size_kb: 524288 fill_policy: DISCARD
diff --git a/crossbench/probes/cb_perfetto/perfetto.py b/crossbench/probes/cb_perfetto/perfetto.py index b4396ed..e89a206 100644 --- a/crossbench/probes/cb_perfetto/perfetto.py +++ b/crossbench/probes/cb_perfetto/perfetto.py
@@ -113,9 +113,29 @@ @override def help_text_items(cls) -> list[tuple[str, str]]: help_items = super().help_text_items() - help_items.append(("presets", ",".join(cls.presets().keys()))) + preset_help: list[str] = [] + for name, path in cls.presets().items(): + help_str = cls._trace_config_help(name, path) + preset_help.append(help_str) + help_items.append(("trace_config presets", "\n".join(preset_help))) return help_items + @classmethod + def _trace_config_help(cls, name: str, path: pth.LocalPath) -> str: + comments: list[str] = [] + with path.open(encoding="utf-8") as f: + for line in f: + line = line.strip() + if not line: + continue + if not line.startswith("#"): + break + comments.append(line[1:].strip()) + if comments: + description = " ".join(comments) + return f"{name}\n {description}\n" + return f"{name}\n" + def has_v8_code_data_source(trace_config: trace_config_pb2.TraceConfig) -> bool: return has_data_source(trace_config, "dev.v8.code") @@ -149,6 +169,13 @@ @classmethod @override + def help_text_items(cls) -> list[tuple[str, str]]: + items = super().help_text_items() + items.extend(TraceConfig.help_text_items()) + return items + + @classmethod + @override def config_parser(cls) -> ProbeConfigParser[Self]: parser = super().config_parser() parser.add_default_argument(
diff --git a/tests/crossbench/base.py b/tests/crossbench/base.py index 73b8852..3da74c2 100644 --- a/tests/crossbench/base.py +++ b/tests/crossbench/base.py
@@ -34,6 +34,7 @@ from crossbench.cli.config.network import NetworkConfig from crossbench.cli.config.secrets import Secrets from crossbench.cli.subcommand.benchmark import BenchmarkSubcommand +from crossbench.config import config_dir from crossbench.probes.cb_perfetto.perfetto import TraceConfig from crossbench.runner.runner import Runner from tests.crossbench import mock_browser @@ -135,6 +136,7 @@ def setup_perfetto_config_presets(self): self.setup_config_dir(TraceConfig.preset_dir()) + self.setup_config_dir(config_dir() / "doc/probe") def setup_config_dir(self, config_dir): self.fs.add_real_directory(config_dir, lazy_read=True)
diff --git a/tests/crossbench/probes/test_perfetto.py b/tests/crossbench/probes/test_perfetto.py index d250fe4..3addccd 100644 --- a/tests/crossbench/probes/test_perfetto.py +++ b/tests/crossbench/probes/test_perfetto.py
@@ -299,8 +299,8 @@ dummy_preset = TraceConfig.preset_dir() / "dummy_preset.txtpb" self.fs.create_file(dummy_preset) help_items = TraceConfig.help_text_items() - self.assertTrue(any(k == "presets" for k, v in help_items)) - presets_str = dict(help_items)["presets"] + self.assertTrue(any(k == "trace_config presets" for k, v in help_items)) + presets_str = dict(help_items)["trace_config presets"] self.assertIn("dummy_preset", presets_str) def test_create_context_desktop(self):
diff --git a/tests/crossbench/probes/test_probe.py b/tests/crossbench/probes/test_probe.py index ff3b7c4..9f50abf 100644 --- a/tests/crossbench/probes/test_probe.py +++ b/tests/crossbench/probes/test_probe.py
@@ -10,7 +10,7 @@ from crossbench.probes.all import CONFIGURABLE_INTERNAL_PROBES, \ DEFAULT_INTERNAL_PROBES, GENERAL_PURPOSE_PROBES, INTERNAL_PROBES, \ NON_CONFIGURABLE_INTERNAL_PROBES, OPTIONAL_INTERNAL_PROBES -from crossbench.probes.cb_perfetto.perfetto import PerfettoProbe +from crossbench.probes.cb_perfetto.perfetto import PerfettoProbe, TraceConfig from crossbench.probes.cb_perfetto.tracing import TracingProbe from crossbench.probes.chrome_histograms import ChromeHistogramsProbe from crossbench.probes.chromium_pgo import ChromiumPgoProbe @@ -154,10 +154,11 @@ set(OPTIONAL_INTERNAL_PROBES))) def test_help(self): + TraceConfig.presets.cache_clear() self.setup_perfetto_config_presets() for probe_cls in self.probe_classes(): help_text = probe_cls.help_text() - self.assertTrue(help) + self.assertTrue(help_text) summary = probe_cls.summary_text() self.assertTrue(summary) self.assertIn(summary, help_text)