| Index: tools/telemetry/telemetry/web_perf/metrics/blob_timeline.py
|
| diff --git a/tools/telemetry/telemetry/web_perf/metrics/blob_timeline.py b/tools/telemetry/telemetry/web_perf/metrics/blob_timeline.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6cdab5b6bf567ef49d3b06a2604c258848ad11da
|
| --- /dev/null
|
| +++ b/tools/telemetry/telemetry/web_perf/metrics/blob_timeline.py
|
| @@ -0,0 +1,52 @@
|
| +# Copyright 2015 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +from telemetry.value import list_of_scalar_values
|
| +from telemetry.web_perf.metrics import timeline_based_metric
|
| +
|
| +class BlobTimelineMetric(timeline_based_metric.TimelineBasedMetric):
|
| + """Reports directly durations of FrameView::performLayout events.
|
| +
|
| + layout: Durations of FrameView::performLayout events that were caused by and
|
| + start during user interaction.
|
| +
|
| + Layout happens no more than once per frame, so per-frame-ness is implied.
|
| + """
|
| + WRITE_EVENT_NAME = 'Registry::RegisterBlob'
|
| + READ_EVENT_NAME = 'BlobRequest'
|
| +
|
| + def __init__(self):
|
| + super(BlobTimelineMetric, self).__init__()
|
| +
|
| + def AddResults(self, _model, renderer_thread, interactions, results):
|
| + assert interactions
|
| + self._AddResultsInternal(renderer_thread.parent.IterAllSlices(),
|
| + interactions, results)
|
| +
|
| + def _AddResultsInternal(self, events, interactions, results):
|
| + reads = []
|
| + writes = []
|
| + for event in events:
|
| + if (event.name == self.WRITE_EVENT_NAME or
|
| + event.name == self.READ_EVENT_NAME) and any(
|
| + interaction.start <= event.start <= interaction.end
|
| + for interaction in interactions):
|
| + if (event.name == self.WRITE_EVENT_NAME):
|
| + writes.append(event.end - event.start)
|
| + elif (event.name == self.READ_EVENT_NAME):
|
| + reads.append(event.end - event.start)
|
| + if reads:
|
| + results.AddValue(list_of_scalar_values.ListOfScalarValues(
|
| + page=results.current_page,
|
| + name='blob_reads',
|
| + units='ms',
|
| + values=reads,
|
| + description=('List of durations of blob part reads (not whole blob).')))
|
| + if writes:
|
| + results.AddValue(list_of_scalar_values.ListOfScalarValues(
|
| + page=results.current_page,
|
| + name='blob_writes',
|
| + units='ms',
|
| + values=writes,
|
| + description=('List of durations of blob writes.')))
|
|
|