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

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: copyright fix 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..684f331a96b99dc3f56795d92d982713e33fe294
--- /dev/null
+++ b/tools/telemetry/telemetry/web_perf/metrics/blob_timeline.py
@@ -0,0 +1,112 @@
+# 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
+
+
+WRITE_EVENT_NAME = 'Registry::RegisterBlob'
+READ_EVENT_NAME = 'BlobRequest'
+
+
+class BlobTimelineMetric(timeline_based_metric.TimelineBasedMetric):
+ """BlobTimelineMetric reports timing information about blob storage.
+
+ The following metrics are added to the results:
+ * blob write times (blob_writes)
+ * blob read times (blob_reads)
+ """
+
+ def __init__(self):
+ super(BlobTimelineMetric, self).__init__()
+
+ @staticmethod
+ def IsWriteEvent(event):
+ return event.name == WRITE_EVENT_NAME
+
+ @staticmethod
+ def IsReadEvent(event):
+ return event.name == READ_EVENT_NAME
+
+ @staticmethod
+ def IsEventInInteraction(event, interaction):
+ return interaction.start <= event.start <= interaction.end
+
+ @staticmethod
+ def ThreadDurationIfPresent(event):
+ if event.thread_duration:
+ return event.thread_duration
+ else:
+ return event.end - event.start
+
+ def AddResults(self, model, renderer_thread, interactions, results):
+ assert interactions
+
+ browser_process = [p for p in model.GetAllProcesses()
+ if p.name == "Browser"][0]
+
+ write_events = []
+ read_events = []
+ for event in renderer_thread.parent.IterAllEvents(
+ event_predicate=self.IsWriteEvent):
+ write_events.append(event)
+ for event in browser_process.parent.IterAllEvents(
+ event_predicate=self.IsReadEvent):
+ read_events.append(event)
+
+ # Only these private methods are tested for mocking simplicity.
+ self._AddWriteResultsInternal(write_events, interactions, results)
+ self._AddReadResultsInternal(read_events, interactions, results)
+
+ def _AddWriteResultsInternal(self, events, interactions, results):
+ writes = []
+ for event in events:
+ if (self.IsWriteEvent(event) and
+ any(self.IsEventInInteraction(event, interaction)
+ for interaction in interactions)):
+ writes.append(self.ThreadDurationIfPresent(event))
+ 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.'))
+ else:
+ results.AddValue(list_of_scalar_values.ListOfScalarValues(
+ page=results.current_page,
+ name='blob-writes',
+ units='ms',
+ values=None,
+ none_value_reason='No blob write events found for this interaction.'))
+
+
+ def _AddReadResultsInternal(self, events, interactions, results):
+ reads = dict()
+ for event in events:
+ if (not self.IsReadEvent(event) or
+ not any(self.IsEventInInteraction(event, interaction)
+ for interaction in interactions)):
+ continue
+ # Every blob has unique UUID. To get the total time for reading
+ # a blob, we add up the time of all events with the same blob UUID.
+ uuid = event.args['uuid']
+ if uuid not in reads:
+ reads[uuid] = 0
+ reads[uuid] += self.ThreadDurationIfPresent(event)
+
+ if reads:
+ results.AddValue(list_of_scalar_values.ListOfScalarValues(
+ page=results.current_page,
+ name='blob-reads',
+ units='ms',
+ values=reads.values(),
+ description='List of read times for blobs.'))
+ else:
+ results.AddValue(list_of_scalar_values.ListOfScalarValues(
+ page=results.current_page,
+ name='blob-reads',
+ units='ms',
+ values=None,
+ none_value_reason='No blob read events found for this interaction.'))
« no previous file with comments | « tools/perf/page_sets/blob_workshop.py ('k') | tools/telemetry/telemetry/web_perf/metrics/blob_timeline_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698