Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(215)

Unified Diff: tools/telemetry/telemetry/web_perf/metrics/blob_timeline.py

Issue 1104053006: [Storage] Blob Storage perf tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added read stats Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..0b82c0307f0b2d1176d3551ad322fcad0668e41b
--- /dev/null
+++ b/tools/telemetry/telemetry/web_perf/metrics/blob_timeline.py
@@ -0,0 +1,62 @@
+# 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):
nednguyen 2015/05/18 22:55:54 Can you add unittest for this? You can look at tel
dmurph 2015/05/21 00:21:36 Done.
+ assert interactions
+ def EventPredicate(event):
+ return (event.name == self.READ_EVENT_NAME or
+ event.name == self.WRITE_EVENT_NAME)
+ events = renderer_thread.parent.IterAllEvents(
+ event_predicate=EventPredicate)
+ self._AddResultsInternal(events, interactions, results)
+ # Now use the browser process events
+ browser_process = \
+ [p for p in model.GetAllProcesses() if p.name == "Browser"][0]
+ events = browser_process.parent.IterAllEvents(
+ event_predicate=EventPredicate)
+ self._AddResultsInternal(events, interactions, results)
nednguyen 2015/05/18 22:55:54 If you don't add the assertion that there is only
nednguyen 2015/05/19 00:34:15 Err, silly. This isn't true. Please ignore this co
+
+ def _AddResultsInternal(self, events, interactions, results):
+ reads = []
+ writes = []
+ for event in events:
+ if 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)
+ page = results.current_page
+ if reads:
+ results.AddValue(list_of_scalar_values.ListOfScalarValues(
+ page=results.current_page,
+ name='blob_reads_' + page.write_method + '_' + page.read_method,
nednguyen 2015/05/19 00:34:15 No, you would want the name to be static. And time
dmurph 2015/05/21 00:21:36 Done.
+ 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_' + page.write_method +
+ '_' + page.read_method + '-read',
+ units='ms',
+ values=writes,
+ description=('List of durations of blob writes.')))

Powered by Google App Engine
This is Rietveld 408576698