Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: tools/telemetry/telemetry/timeline/trace_event_importer.py

Issue 1553183002: [telemetry] Add support for composable process dumps in memory-infra (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 111e241fd1539a6027ed4daa835f69fd244c609f..2113f08c0ec1aa3c7b1d7ae143f11d29263ce62c 100644
--- a/tools/telemetry/telemetry/timeline/trace_event_importer.py
+++ b/tools/telemetry/telemetry/timeline/trace_event_importer.py
@@ -194,16 +194,26 @@ class TraceEventTimelineImporter(importer.TimelineImporter):
'event': event,
'thread': thread})
- def _ProcessMemoryDumpEvent(self, event):
- process = self._GetOrCreateProcess(event['pid'])
- memory_dump = memory_dump_event.ProcessMemoryDumpEvent(process, event)
- process.AddMemoryDumpEvent(memory_dump)
- self._all_memory_dumps_by_dump_id[memory_dump.dump_id].append(memory_dump)
+ def _ProcessMemoryDumpEvents(self, events):
+ # Dictionary to order dumps by id and process.
+ global_dumps = {}
+ for event in events:
+ global_dump = global_dumps.setdefault(event['id'], {})
+ dump_events = global_dump.setdefault(event['pid'], [])
+ dump_events.append(event)
+ for dump_id, global_dump in global_dumps.iteritems():
+ for pid, dump_events in global_dump.iteritems():
+ process = self._GetOrCreateProcess(pid)
+ memory_dump = memory_dump_event.ProcessMemoryDumpEvent(process,
+ dump_events)
+ process.AddMemoryDumpEvent(memory_dump)
+ self._all_memory_dumps_by_dump_id[dump_id].append(memory_dump)
def ImportEvents(self):
"""Walks through the events_ list and outputs the structures discovered to
model_.
"""
+ memory_dump_events = []
for event in self._events:
phase = event.get('ph', None)
if phase == 'B' or phase == 'E':
@@ -231,13 +241,16 @@ class TraceEventTimelineImporter(importer.TimelineImporter):
elif phase == 's' or phase == 't' or phase == 'f':
self._ProcessFlowEvent(event)
elif phase == 'v':
- self._ProcessMemoryDumpEvent(event)
+ memory_dump_events.append(event)
elif phase == 'R':
self._ProcessMarkEvent(event)
else:
self._model.import_errors.append('Unrecognized event phase: ' +
phase + '(' + event['name'] + ')')
+ # Memory dumps of a process with the same dump id need to be merged before
+ # processing. So, memory dump events are processed all at once.
+ self._ProcessMemoryDumpEvents(memory_dump_events)
return self._model
def FinalizeImport(self):

Powered by Google App Engine
This is Rietveld 408576698