| Index: tools/perf/measurements/timeline_based_measurement.py
|
| diff --git a/tools/perf/measurements/timeline_based_measurement.py b/tools/perf/measurements/timeline_based_measurement.py
|
| index a9e1ecc78bf3d3bc990d03c1e578ffec3b31ffc6..f1af12d8bc8d6386c63fafa389f7d8218d5ddc9e 100644
|
| --- a/tools/perf/measurements/timeline_based_measurement.py
|
| +++ b/tools/perf/measurements/timeline_based_measurement.py
|
| @@ -4,11 +4,11 @@
|
|
|
| from metrics import timeline as timeline_module
|
| from metrics import timeline_interaction_record as tir_module
|
| +from metrics import smoothness
|
| from telemetry.page import page_measurement
|
| from telemetry.core.timeline import model as model_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
|
| @@ -24,6 +24,21 @@ ALL_OVERHEAD_LEVELS = [
|
| ]
|
|
|
|
|
| +class _ResultsWrapper(object):
|
| + def __init__(self, results, interaction_record):
|
| + self._results = results
|
| + self._interaction_record = interaction_record
|
| +
|
| + def Add(self, trace_name, units, value, chart_name=None, data_type='default'):
|
| + trace_name = self._interaction_record.GetResultNameFor(trace_name)
|
| + self._results.Add(trace_name, units, value, chart_name, data_type)
|
| +
|
| + def AddSummary(self, trace_name, units, value, chart_name=None,
|
| + data_type='default'):
|
| + trace_name = self._interaction_record.GetResultNameFor(trace_name)
|
| + self._results.AddSummary(trace_name, units, value, chart_name, data_type)
|
| +
|
| +
|
| class _TimelineBasedMetrics(object):
|
| def __init__(self, model, renderer_thread):
|
| self._model = model
|
| @@ -31,14 +46,14 @@ class _TimelineBasedMetrics(object):
|
|
|
| def FindTimelineInteractionRecords(self):
|
| # TODO(nduca): Add support for page-load interaction record.
|
| - return [tir_module.TimelineInteractionRecord(event) for
|
| + return [tir_module.TimelineInteractionRecord.FromEvent(event) for
|
| event in self._renderer_thread.IterAllAsyncSlices()
|
| if tir_module.IsTimelineInteractionRecord(event.name)]
|
|
|
| def CreateMetricsForTimelineInteractionRecord(self, interaction):
|
| res = []
|
| if interaction.is_smooth:
|
| - pass # TODO(nduca): res.append smoothness metric instance.
|
| + res.append(smoothness.SmoothnessMetric())
|
| return res
|
|
|
| def AddResults(self, results):
|
| @@ -47,9 +62,10 @@ class _TimelineBasedMetrics(object):
|
| raise Exception('Expected at least one Interaction on the page')
|
| for interaction in interactions:
|
| metrics = self.CreateMetricsForTimelineInteractionRecord(interaction)
|
| + wrapped_results = _ResultsWrapper(results, interaction)
|
| for m in metrics:
|
| m.AddResults(self._model, self._renderer_thread,
|
| - interaction, results)
|
| + interaction, wrapped_results)
|
|
|
|
|
| class TimelineBasedMeasurement(page_measurement.PageMeasurement):
|
| @@ -99,6 +115,7 @@ class TimelineBasedMeasurement(page_measurement.PageMeasurement):
|
| categories = ''
|
| else:
|
| categories = '*,disabled-by-default-cc.debug'
|
| + categories = ','.join([categories] + page.GetSyntheticDelayCategories())
|
| tab.browser.StartTracing(categories)
|
|
|
| def MeasurePage(self, page, tab, results):
|
|
|