Index: tools/telemetry/telemetry/timeline/trace_event_importer.py |
diff --git a/tools/telemetry/telemetry/timeline/trace_event_importer.py b/tools/telemetry/telemetry/timeline/trace_event_importer.py |
index d7eb5a3bcd9189da574f754c90d5e836631a26c1..dfe2b97f393c77ab8582c83babe70a5599ee32b1 100644 |
--- a/tools/telemetry/telemetry/timeline/trace_event_importer.py |
+++ b/tools/telemetry/telemetry/timeline/trace_event_importer.py |
@@ -12,6 +12,7 @@ import copy |
import telemetry.timeline.async_slice as tracing_async_slice |
import telemetry.timeline.flow_event as tracing_flow_event |
from telemetry.timeline import importer |
+from telemetry.timeline import memory_dump_event |
from telemetry.timeline import trace_data as trace_data_module |
@@ -25,6 +26,7 @@ class TraceEventTimelineImporter(importer.TimelineImporter): |
self._all_async_events = [] |
self._all_object_events = [] |
self._all_flow_events = [] |
+ self._all_memory_dump_events_by_dump_id = {} |
self._events = trace_data.GetEventsFor(trace_data_module.CHROME_TRACE_PART) |
@@ -178,6 +180,15 @@ class TraceEventTimelineImporter(importer.TimelineImporter): |
'event': event, |
'thread': thread}) |
+ def _ProcessMemoryDumpEvent(self, event): |
+ dump_id = event.get('id') |
+ if not dump_id: |
+ self._model.import_errors.append( |
+ 'Memory dump event with missing dump id.') |
+ return |
+ self._all_memory_dump_events_by_dump_id.setdefault(dump_id, []) |
+ self._all_memory_dump_events_by_dump_id[dump_id].append(event) |
+ |
def ImportEvents(self): |
"""Walks through the events_ list and outputs the structures discovered to |
model_. |
@@ -208,6 +219,8 @@ class TraceEventTimelineImporter(importer.TimelineImporter): |
self._ProcessObjectEvent(event) |
elif phase == 's' or phase == 't' or phase == 'f': |
self._ProcessFlowEvent(event) |
+ elif phase == 'v': |
+ self._ProcessMemoryDumpEvent(event) |
else: |
self._model.import_errors.append('Unrecognized event phase: ' + |
phase + '(' + event['name'] + ')') |
@@ -227,6 +240,7 @@ class TraceEventTimelineImporter(importer.TimelineImporter): |
self._SetGpuProcess() |
self._CreateExplicitObjects() |
self._CreateImplicitObjects() |
+ self._CreateMemoryDumps() |
def _CreateAsyncSlices(self): |
if len(self._all_async_events) == 0: |
@@ -392,6 +406,11 @@ class TraceEventTimelineImporter(importer.TimelineImporter): |
# Make this event the next start event in this flow. |
flow_id_to_event[event['id']] = flow_event |
+ def _CreateMemoryDumps(self): |
+ self._model.SetMemoryDumpEvents( |
+ memory_dump_event.MemoryDumpEvent(events) |
+ for events in self._all_memory_dump_events_by_dump_id.itervalues()) |
+ |
def _SetBrowserProcess(self): |
for thread in self._model.GetAllThreads(): |
if thread.name == 'CrBrowserMain': |