| 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':
|
|
|