Index: tools/telemetry/telemetry/core/timeline/model.py |
diff --git a/tools/telemetry/telemetry/core/timeline/model.py b/tools/telemetry/telemetry/core/timeline/model.py |
index 8473a64ad1a6889fbeb95d399781ca96228b7938..00b0f87a4a5616028f78424dc48278217e8dc045 100644 |
--- a/tools/telemetry/telemetry/core/timeline/model.py |
+++ b/tools/telemetry/telemetry/core/timeline/model.py |
@@ -8,11 +8,8 @@ https://code.google.com/p/trace-viewer/ |
''' |
from operator import attrgetter |
-import weakref |
import telemetry.core.timeline.process as tracing_process |
-from telemetry.core import web_contents |
-from telemetry.core import browser |
# Register importers for data |
from telemetry.core.timeline import bounds |
@@ -52,14 +49,10 @@ class TimelineModel(object): |
self._processes = {} |
self._browser_process = None |
self._frozen = False |
+ self._tab_ids_to_renderer_threads_map = {} |
self.import_errors = [] |
self.metadata = [] |
self.flow_events = [] |
- # Use a WeakKeyDictionary, because an ordinary dictionary could keep |
- # references to Tab objects around until it gets garbage collected. |
- # This would prevent telemetry from navigating to another page. |
- self._core_object_to_timeline_container_map = weakref.WeakKeyDictionary() |
- |
if timeline_data is not None: |
self.ImportTraces(timeline_data, shift_world_to_zero=shift_world_to_zero) |
@@ -85,9 +78,15 @@ class TimelineModel(object): |
def browser_process(self, browser_process): |
self._browser_process = browser_process |
+ def AddMappingFromTabIdToRendererThread(self, tab_id, renderer_thread): |
+ if self._frozen: |
+ raise Exception('Cannot add mapping from tab id to renderer thread once ' |
+ 'trace is imported') |
+ self._tab_ids_to_renderer_threads_map[tab_id] = renderer_thread |
+ |
def ImportTraces(self, timeline_data, shift_world_to_zero=True): |
if self._frozen: |
- raise Exception("Cannot add events once recording is done") |
+ raise Exception("Cannot add events once trace is imported") |
importers = [] |
if isinstance(timeline_data, list): |
@@ -232,20 +231,14 @@ class TimelineModel(object): |
return events |
- def GetRendererProcessFromTab(self, tab): |
- return self._core_object_to_timeline_container_map[tab].parent |
+ def GetRendererProcessFromTabId(self, tab_id): |
+ renderer_thread = self.GetRendererThreadFromTabId(tab_id) |
+ if renderer_thread: |
+ return renderer_thread.parent |
+ return None |
- def GetRendererThreadFromTab(self, tab): |
- return self._core_object_to_timeline_container_map[tab] |
- |
- def AddCoreObjectToContainerMapping(self, core_object, container): |
- """ Add a mapping from a core object to a timeline container. |
- |
- Used for example to map a Tab to its renderer process in the timeline model. |
- """ |
- assert(isinstance(core_object, web_contents.WebContents) or |
- isinstance(core_object, browser.Browser)) |
- self._core_object_to_timeline_container_map[core_object] = container |
+ def GetRendererThreadFromTabId(self, tab_id): |
+ return self._tab_ids_to_renderer_threads_map.get(tab_id, None) |
def _CreateImporter(self, event_data): |
for importer_class in _IMPORTERS: |