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

Unified Diff: tools/telemetry/telemetry/timeline/tab_id_importer.py

Issue 814813003: Added test that SurfaceFlinger metrics are calculated on android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: PLEASE IGNORE: accidentally uploaded to wrong issue Created 6 years 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/timeline/tab_id_importer.py
diff --git a/tools/telemetry/telemetry/timeline/tab_id_importer.py b/tools/telemetry/telemetry/timeline/tab_id_importer.py
new file mode 100644
index 0000000000000000000000000000000000000000..f5929d5bc6a67d40b6a53cdfaa08d6acae9c8430
--- /dev/null
+++ b/tools/telemetry/telemetry/timeline/tab_id_importer.py
@@ -0,0 +1,54 @@
+# Copyright 2014 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.timeline import importer
+from telemetry.timeline import trace_data as trace_data_module
+
+class TraceBufferOverflowException(Exception):
+ pass
+
+
+class TabIdImporter(importer.TimelineImporter):
+ def __init__(self, model, trace_data):
+ # Needs to run after all other importers so overflow events have been
+ # created on the model.
+ super(TabIdImporter, self).__init__(
+ model,
+ trace_data,
+ import_order=999)
+ self._trace_data = trace_data
+
+ @staticmethod
+ def GetSupportedPart():
+ return trace_data_module.TAB_ID_PART
+
+ def ImportEvents(self):
+ pass
+
+ def FinalizeImport(self):
+ self._CheckTraceBufferOverflow()
+ self._CreateTabIdsToThreadsMap()
+
+ def _CheckTraceBufferOverflow(self):
+ # Since _CreateTabIdsToThreadsMap() relies on markers output on timeline
+ # tracing data, it may not work in case we have trace events dropped due to
+ # trace buffer overflow.
+ for process in self._model.GetAllProcesses():
+ if process.trace_buffer_did_overflow:
+ raise TraceBufferOverflowException(
+ 'Trace buffer of process with pid=%d overflowed at timestamp %d. '
+ 'Raw trace data:\n%s' %
+ (process.pid, process.trace_buffer_overflow_event.start,
+ repr(self._trace_data)))
+
+ def _CreateTabIdsToThreadsMap(self):
+ tab_id_events = self._trace_data.GetEventsFor(
+ trace_data_module.TAB_ID_PART)
+
+ for tab_id in tab_id_events:
+ timeline_markers = self._model.FindTimelineMarkers(tab_id)
+ assert(len(timeline_markers) == 1)
+ assert(timeline_markers[0].start_thread == timeline_markers[0].end_thread)
+ self._model.AddMappingFromTabIdToRendererThread(
+ tab_id, timeline_markers[0].start_thread)

Powered by Google App Engine
This is Rietveld 408576698