OLD | NEW |
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 '''A container for timeline-based events and traces and can handle importing | 4 '''A container for timeline-based events and traces and can handle importing |
5 raw event data from different sources. This model closely resembles that in the | 5 raw event data from different sources. This model closely resembles that in the |
6 trace_viewer project: | 6 trace_viewer project: |
7 https://code.google.com/p/trace-viewer/ | 7 https://code.google.com/p/trace-viewer/ |
8 ''' | 8 ''' |
9 | 9 |
10 from operator import attrgetter | 10 from operator import attrgetter |
11 | 11 |
12 import telemetry.core.timeline.process as tracing_process | 12 import telemetry.core.timeline.process as tracing_process |
| 13 from telemetry.core import web_contents |
| 14 from telemetry.core import browser |
13 | 15 |
14 # Register importers for data | 16 # Register importers for data |
15 from telemetry.core.timeline import inspector_importer | 17 from telemetry.core.timeline import inspector_importer |
16 from telemetry.core.timeline import bounds | 18 from telemetry.core.timeline import bounds |
17 from telemetry.core.timeline import trace_event_importer | 19 from telemetry.core.timeline import trace_event_importer |
18 | 20 |
19 _IMPORTERS = [ | 21 _IMPORTERS = [ |
20 inspector_importer.InspectorTimelineImporter, | 22 inspector_importer.InspectorTimelineImporter, |
21 trace_event_importer.TraceEventTimelineImporter | 23 trace_event_importer.TraceEventTimelineImporter |
22 ] | 24 ] |
(...skipping 11 matching lines...) Expand all Loading... |
34 'Overlapping timeline markers found') | 36 'Overlapping timeline markers found') |
35 | 37 |
36 | 38 |
37 class TimelineModel(object): | 39 class TimelineModel(object): |
38 def __init__(self, event_data=None, shift_world_to_zero=True): | 40 def __init__(self, event_data=None, shift_world_to_zero=True): |
39 self._bounds = bounds.Bounds() | 41 self._bounds = bounds.Bounds() |
40 self._processes = {} | 42 self._processes = {} |
41 self._frozen = False | 43 self._frozen = False |
42 self.import_errors = [] | 44 self.import_errors = [] |
43 self.metadata = [] | 45 self.metadata = [] |
| 46 self._core_object_to_timeline_container_map = {} |
44 | 47 |
45 if event_data is not None: | 48 if event_data is not None: |
46 self.ImportTraces([event_data], shift_world_to_zero=shift_world_to_zero) | 49 self.ImportTraces([event_data], shift_world_to_zero=shift_world_to_zero) |
47 | 50 |
48 @property | 51 @property |
49 def bounds(self): | 52 def bounds(self): |
50 return self._bounds | 53 return self._bounds |
51 | 54 |
52 @property | 55 @property |
53 def processes(self): | 56 def processes(self): |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 for (i, event) in enumerate(events): | 164 for (i, event) in enumerate(events): |
162 if event.name != labels[i]: | 165 if event.name != labels[i]: |
163 raise MarkerMismatchError() | 166 raise MarkerMismatchError() |
164 for i in xrange(0, len(events)): | 167 for i in xrange(0, len(events)): |
165 for j in xrange(i+1, len(events)): | 168 for j in xrange(i+1, len(events)): |
166 if (events[j].start < events[i].start + events[i].duration): | 169 if (events[j].start < events[i].start + events[i].duration): |
167 raise MarkerOverlapError() | 170 raise MarkerOverlapError() |
168 | 171 |
169 return events | 172 return events |
170 | 173 |
| 174 def GetRendererProcessFromTab(self, tab): |
| 175 return self._core_object_to_timeline_container_map[tab] |
| 176 |
| 177 def AddCoreObjectToContainerMapping(self, core_object, container): |
| 178 """ Add a mapping from a core object to a timeline container. |
| 179 |
| 180 Used for example to map a Tab to its renderer process in the timeline model. |
| 181 """ |
| 182 assert(isinstance(core_object, web_contents.WebContents) or |
| 183 isinstance(core_object, browser.Browser)) |
| 184 self._core_object_to_timeline_container_map[core_object] = container |
| 185 |
171 def _CreateImporter(self, event_data): | 186 def _CreateImporter(self, event_data): |
172 for importer_class in _IMPORTERS: | 187 for importer_class in _IMPORTERS: |
173 if importer_class.CanImport(event_data): | 188 if importer_class.CanImport(event_data): |
174 return importer_class(self, event_data) | 189 return importer_class(self, event_data) |
175 raise ValueError("Could not find an importer for the provided event data") | 190 raise ValueError("Could not find an importer for the provided event data") |
OLD | NEW |