| Index: tools/telemetry/telemetry/web_perf/timeline_based_measurement.py
|
| diff --git a/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py b/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py
|
| index 3c80ccdd943531704b817612450cdf1a0eed3cb9..3305ab00828551efcfe2cbc414d841067ed5b956 100644
|
| --- a/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py
|
| +++ b/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py
|
| @@ -4,10 +4,8 @@
|
| import collections
|
| from collections import defaultdict
|
|
|
| +from telemetry.web_perf import tracing_based_measurement
|
| from telemetry.timeline import model as model_module
|
| -from telemetry.timeline import tracing_category_filter
|
| -from telemetry.timeline import tracing_options
|
| -from telemetry.value import trace
|
| from telemetry.web_perf.metrics import timeline_based_metric
|
| from telemetry.web_perf.metrics import blob_timeline
|
| from telemetry.web_perf.metrics import gpu_timeline
|
| @@ -21,21 +19,6 @@ from telemetry.web_perf import smooth_gesture_util
|
| from telemetry.web_perf import story_test
|
| from telemetry.web_perf import timeline_interaction_record as tir_module
|
|
|
| -# TimelineBasedMeasurement considers all instrumentation as producing a single
|
| -# timeline. But, depending on the amount of instrumentation that is enabled,
|
| -# overhead increases. The user of the measurement must therefore chose between
|
| -# a few levels of instrumentation.
|
| -NO_OVERHEAD_LEVEL = 'no-overhead'
|
| -MINIMAL_OVERHEAD_LEVEL = 'minimal-overhead'
|
| -DEBUG_OVERHEAD_LEVEL = 'debug-overhead'
|
| -
|
| -ALL_OVERHEAD_LEVELS = [
|
| - NO_OVERHEAD_LEVEL,
|
| - MINIMAL_OVERHEAD_LEVEL,
|
| - DEBUG_OVERHEAD_LEVEL
|
| -]
|
| -
|
| -
|
| def _GetAllTimelineBasedMetrics():
|
| # TODO(nednguyen): use discovery pattern to return all the instances of
|
| # all TimelineBasedMetrics class in web_perf/metrics/ folder.
|
| @@ -140,7 +123,7 @@ class _TimelineBasedMetrics(object):
|
| interactions, wrapped_results)
|
|
|
|
|
| -class Options(object):
|
| +class Options(tracing_based_measurement.Options):
|
| """A class to be used to configure TimelineBasedMeasurement.
|
|
|
| This is created and returned by
|
| @@ -151,55 +134,11 @@ class Options(object):
|
| To customize your metric needs, use SetTimelineBasedMetrics().
|
| """
|
|
|
| - def __init__(self, overhead_level=NO_OVERHEAD_LEVEL):
|
| - """As the amount of instrumentation increases, so does the overhead.
|
| - The user of the measurement chooses the overhead level that is appropriate,
|
| - and the tracing is filtered accordingly.
|
| -
|
| - overhead_level: Can either be a custom TracingCategoryFilter object or
|
| - one of NO_OVERHEAD_LEVEL, MINIMAL_OVERHEAD_LEVEL or
|
| - DEBUG_OVERHEAD_LEVEL.
|
| - """
|
| - self._category_filter = None
|
| - if isinstance(overhead_level,
|
| - tracing_category_filter.TracingCategoryFilter):
|
| - self._category_filter = overhead_level
|
| - elif overhead_level in ALL_OVERHEAD_LEVELS:
|
| - if overhead_level == NO_OVERHEAD_LEVEL:
|
| - self._category_filter = tracing_category_filter.CreateNoOverheadFilter()
|
| - elif overhead_level == MINIMAL_OVERHEAD_LEVEL:
|
| - self._category_filter = (
|
| - tracing_category_filter.CreateMinimalOverheadFilter())
|
| - else:
|
| - self._category_filter = (
|
| - tracing_category_filter.CreateDebugOverheadFilter())
|
| - else:
|
| - raise Exception("Overhead level must be a TracingCategoryFilter object"
|
| - " or valid overhead level string."
|
| - " Given overhead level: %s" % overhead_level)
|
| -
|
| - self._tracing_options = tracing_options.TracingOptions()
|
| - self._tracing_options.enable_chrome_trace = True
|
| - self._tracing_options.enable_platform_display_trace = True
|
| + def __init__(self,
|
| + overhead_level=tracing_based_measurement.NO_OVERHEAD_LEVEL):
|
| + super(Options, self).__init__(overhead_level)
|
| self._timeline_based_metrics = _GetAllTimelineBasedMetrics()
|
|
|
| -
|
| - def ExtendTraceCategoryFilter(self, filters):
|
| - for new_category_filter in filters:
|
| - self._category_filter.AddIncludedCategory(new_category_filter)
|
| -
|
| - @property
|
| - def category_filter(self):
|
| - return self._category_filter
|
| -
|
| - @property
|
| - def tracing_options(self):
|
| - return self._tracing_options
|
| -
|
| - @tracing_options.setter
|
| - def tracing_options(self, value):
|
| - self._tracing_options = value
|
| -
|
| def SetTimelineBasedMetrics(self, metrics):
|
| assert isinstance(metrics, collections.Iterable)
|
| for m in metrics:
|
| @@ -210,7 +149,8 @@ class Options(object):
|
| return self._timeline_based_metrics
|
|
|
|
|
| -class TimelineBasedMeasurement(story_test.StoryTest):
|
| +class TimelineBasedMeasurement(
|
| + tracing_based_measurement.TracingBasedMeasurement):
|
| """Collects multiple metrics based on their interaction records.
|
|
|
| A timeline based measurement shifts the burden of what metrics to collect onto
|
| @@ -240,25 +180,15 @@ class TimelineBasedMeasurement(story_test.StoryTest):
|
| supported long term and to be removed when crbug.com/453109 is resolved.
|
| """
|
| def __init__(self, options, results_wrapper=None):
|
| - self._tbm_options = options
|
| + super(TimelineBasedMeasurement, self).__init__(options)
|
| self._results_wrapper = results_wrapper or _TBMResultWrapper()
|
|
|
| - def WillRunStory(self, platform):
|
| - """Configure and start tracing."""
|
| - if not platform.tracing_controller.IsChromeTracingSupported():
|
| - raise Exception('Not supported')
|
| -
|
| - platform.tracing_controller.Start(self._tbm_options.tracing_options,
|
| - self._tbm_options.category_filter)
|
| -
|
| - def Measure(self, platform, results):
|
| + def ComputeMetricsForTrace(self, trace_result, results):
|
| """Collect all possible metrics and added them to results."""
|
| - trace_result = platform.tracing_controller.Stop()
|
| - results.AddValue(trace.TraceValue(results.current_page, trace_result))
|
| model = model_module.TimelineModel(trace_result)
|
| threads_to_records_map = _GetRendererThreadsToInteractionRecordsMap(model)
|
| if (len(threads_to_records_map.values()) == 0 and
|
| - self._tbm_options.tracing_options.enable_chrome_trace):
|
| + self._options.tracing_options.enable_chrome_trace):
|
| raise story_test.Failure(
|
| 'No timeline interaction records were recorded in the trace. '
|
| 'This could be caused by console.time() & console.timeEnd() execution'
|
| @@ -268,10 +198,6 @@ class TimelineBasedMeasurement(story_test.StoryTest):
|
| threads_to_records_map.iteritems()):
|
| meta_metrics = _TimelineBasedMetrics(
|
| model, renderer_thread, interaction_records,
|
| - self._results_wrapper, self._tbm_options.GetTimelineBasedMetrics())
|
| + self._results_wrapper,
|
| + self._options.GetTimelineBasedMetrics())
|
| meta_metrics.AddResults(results)
|
| -
|
| - def DidRunStory(self, platform):
|
| - """Clean up after running the story."""
|
| - if platform.tracing_controller.is_tracing_running:
|
| - platform.tracing_controller.Stop()
|
|
|