Chromium Code Reviews| 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..cb64edc835b250ccf0c494f653b79d8d870ff0f3 |
| --- /dev/null |
| +++ b/tools/telemetry/telemetry/timeline/tab_id_importer.py |
| @@ -0,0 +1,56 @@ |
| +# 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.value import trace as trace_value_module |
| + |
| +class TraceBufferOverflowException(Exception): |
| + pass |
| + |
| + |
| +class TabIdImporter(importer.TimelineImporter): |
| + def __init__(self, model, trace_value): |
| + # Needs to run after all other importers so overflow events have been |
| + # created on the model. |
| + super(TabIdImporter, self).__init__( |
| + model, |
| + trace_value, |
| + import_order=999) |
| + self._trace_value = trace_value |
| + |
| + @staticmethod |
| + def GetSupportedPart(): |
| + return trace_value_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 maynot work in case we have trace events dropped due to |
| + # trace buffer overflow. for process in self._model.GetAllProcesses(): |
|
slamm
2014/08/12 23:11:59
Missing newline.
|
| + |
| + 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._events))) |
| + |
| + def _CreateTabIdsToThreadsMap(self, trace_value): |
| + tab_id_events = self._trace_value.GetEventsFor( |
| + trace_value_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 == |
|
slamm
2014/08/12 23:11:59
Needs line continuation.
|
| + timeline_markers[0].end_thread) |
| + self._model.AddMappingFromTabIdToRendererThread( |
| + tab_id, timeline_markers[0].start_thread) |
| + |