Index: tools/telemetry/telemetry/benchmark.py |
diff --git a/tools/telemetry/telemetry/benchmark.py b/tools/telemetry/telemetry/benchmark.py |
index f19d5794283b2f594c66c1a52087c31a54f23b65..f32a1fd69477081d54ef0df3566d43c0c5173e81 100644 |
--- a/tools/telemetry/telemetry/benchmark.py |
+++ b/tools/telemetry/telemetry/benchmark.py |
@@ -21,6 +21,7 @@ from telemetry.page import test_expectations |
from telemetry.results import results_options |
from telemetry.util import cloud_storage |
from telemetry.util import exception_formatter |
+from telemetry.web_perf import timeline_based_measurement |
Disabled = decorators.Disabled |
Enabled = decorators.Enabled |
@@ -48,9 +49,14 @@ class BenchmarkMetadata(object): |
class Benchmark(command_line.Command): |
"""Base class for a Telemetry benchmark. |
- A test packages a PageTest and a PageSet together. |
+ A benchmark packages a measurement and a PageSet together. |
+ Benchmarks default to using TBM unless you override the value of |
+ Benchmark.test, or override the CreatePageTest method. |
+ |
+ New benchmarks should override CreateUserStorySet. |
""" |
options = {} |
+ test = timeline_based_measurement.TimelineBasedMeasurement |
def __init__(self, max_failures=None): |
"""Creates a new Benchmark. |
@@ -60,6 +66,14 @@ class Benchmark(command_line.Command): |
from executing subsequent page runs. If None, we never bail. |
""" |
self._max_failures = max_failures |
+ self._has_original_tbm_options = ( |
+ self.CreateTimelineBasedMeasurementOptions.__func__ == |
+ Benchmark.CreateTimelineBasedMeasurementOptions.__func__) |
+ has_original_create_page_test = ( |
+ self.CreatePageTest.__func__ == Benchmark.CreatePageTest.__func__) |
+ assert self._has_original_tbm_options or has_original_create_page_test, ( |
+ 'Cannot override both CreatePageTest and ' |
+ 'CreateTimelineBasedMeasurementOptions.') |
@classmethod |
def Name(cls): |
@@ -207,19 +221,42 @@ class Benchmark(command_line.Command): |
extracted_profile_dir_path) |
options.browser_options.profile_dir = extracted_profile_dir_path |
- def CreatePageTest(self, options): # pylint: disable=W0613 |
- """Get the PageTest for this Benchmark. |
+ def CreateTimelineBasedMeasurementOptions(self): |
+ """Return the TimelineBasedMeasurementOptions for this Benchmark. |
- By default, it will create a page test from the test's test attribute. |
- Override to generate a custom page test. |
+ Override this method to configure a TimelineBasedMeasurement benchmark. |
+ Otherwise, override CreatePageTest for PageTest tests. Do not override |
+ both methods. |
""" |
- if not hasattr(self, 'test'): |
- raise NotImplementedError('This test has no "test" attribute.') |
- if not issubclass(self.test, page_test.PageTest): |
- raise TypeError('"%s" is not a PageTest.' % self.test.__name__) |
- return self.test() |
+ return timeline_based_measurement.Options() |
+ |
+ def CreatePageTest(self, options): # pylint: disable=unused-argument |
+ """Return the PageTest for this Benchmark. |
+ |
+ Override this method for PageTest tests. |
+ Override, override CreateTimelineBasedMeasurementOptions to configure |
+ TimelineBasedMeasurement tests. Do not override both methods. |
- def CreatePageSet(self, options): # pylint: disable=W0613 |
+ Args: |
+ options: a browser_options.BrowserFinderOptions instance |
+ Returns: |
+ |test()| if |test| is a PageTest class. |
+ Otherwise, a TimelineBasedMeasurement instance. |
+ """ |
+ is_page_test = issubclass(self.test, page_test.PageTest) |
+ is_tbm = self.test == timeline_based_measurement.TimelineBasedMeasurement |
+ if not is_page_test and not is_tbm: |
+ raise TypeError('"%s" is not a PageTest or a TimelineBasedMeasurement.' % |
+ self.test.__name__) |
+ if is_page_test: |
+ assert self._has_original_tbm_options, ( |
+ 'Cannot override CreateTimelineBasedMeasurementOptions ' |
+ 'with a PageTest.') |
+ return self.test() # pylint: disable=no-value-for-parameter |
+ return timeline_based_measurement.TimelineBasedMeasurement( |
+ self.CreateTimelineBasedMeasurementOptions()) |
+ |
+ def CreatePageSet(self, options): # pylint: disable=unused-argument |
"""Get the page set this test will run on. |
By default, it will create a page set from the this test's page_set |