- add sources.
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / timeline / inspector_importer.py
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
3 # found in the LICENSE file.
4 '''Imports event data obtained from the inspector's timeline.'''
5
6 from telemetry.core.timeline import importer
7 import telemetry.core.timeline.thread as timeline_thread
8
9 class InspectorTimelineImporter(importer.TimelineImporter):
10   def __init__(self, model, event_data):
11     super(InspectorTimelineImporter, self).__init__(model, event_data)
12
13   @staticmethod
14   def CanImport(event_data):
15     ''' Checks if event_data is from the inspector timeline. We assume
16     that if the first event is a valid inspector event, we can import the
17     entire list.
18     '''
19     if isinstance(event_data, list) and len(event_data):
20       event_datum = event_data[0]
21       return 'startTime' in event_datum and 'endTime' in event_datum
22     return False
23
24   def ImportEvents(self):
25     render_process = self._model.GetOrCreateProcess(0)
26     render_thread = render_process.GetOrCreateThread(0)
27     for raw_event in self._event_data:
28       InspectorTimelineImporter.AddRawEventToThreadRecursive(
29           render_thread, raw_event)
30
31   def FinalizeImport(self):
32     pass
33
34   @staticmethod
35   def AddRawEventToThreadRecursive(thread, raw_inspector_event):
36     did_begin_slice = False
37     if ('startTime' in raw_inspector_event and
38         'endTime' in raw_inspector_event):
39       args = {}
40       for x in raw_inspector_event:
41         if x in ('startTime', 'endTime', 'children'):
42           continue
43         args[x] = raw_inspector_event[x]
44       if len(args) == 0:
45         args = None
46       thread.BeginSlice('inspector',
47                         raw_inspector_event['type'],
48                         raw_inspector_event['startTime'],
49                         args)
50       did_begin_slice = True
51
52     for child in raw_inspector_event.get('children', []):
53       InspectorTimelineImporter.AddRawEventToThreadRecursive(
54           thread, child)
55
56     if did_begin_slice:
57       thread.EndSlice(raw_inspector_event['endTime'])
58
59   @staticmethod
60   def RawEventToTimelineEvent(raw_inspector_event):
61     """Converts raw_inspector_event to TimelineEvent."""
62     thread = timeline_thread.Thread(None, 0)
63     InspectorTimelineImporter.AddRawEventToThreadRecursive(
64         thread, raw_inspector_event)
65     thread.FinalizeImport()
66     assert len(thread.toplevel_slices) <= 1
67     if len(thread.toplevel_slices) == 0:
68       return None
69     return thread.toplevel_slices[0]