Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / timeline / inspector_importer_unittest.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 import unittest
5
6 from telemetry.core.timeline import inspector_importer
7 from telemetry.core.timeline import model
8
9 _BACKGROUND_MESSAGE = {
10   'data': {},
11   'type': 'BeginFrame',
12   'thread': '2',
13   'startTime': 1352783525921.824}
14
15 _SAMPLE_MESSAGE = {
16   'children': [
17     {'data': {},
18      'startTime': 1352783525921.823,
19      'type': 'BeginFrame',
20      'usedHeapSize': 1870736},
21     {'children': [],
22      'data': {'height': 723,
23               'width': 1272,
24               'x': 0,
25               'y': 0},
26      'endTime': 1352783525921.8992,
27      'frameId': '10.2',
28      'startTime': 1352783525921.8281,
29      'type': 'Layout',
30      'usedHeapSize': 1870736},
31     {'children': [
32         {'children': [],
33          'data': {'imageType': 'PNG'},
34          'endTime': 1352783525927.7939,
35          'startTime': 1352783525922.4241,
36          'type': 'DecodeImage',
37          'usedHeapSize': 1870736}
38         ],
39      'data': {'height': 432,
40               'width': 1272,
41               'x': 0,
42               'y': 8},
43      'endTime': 1352783525927.9822,
44      'frameId': '10.2',
45      'startTime': 1352783525921.9292,
46      'type': 'Paint',
47      'usedHeapSize': 1870736}
48     ],
49   'data': {},
50   'endTime': 1352783525928.041,
51   'startTime': 1352783525921.8049,
52   'type': 'Program'}
53
54 class InspectorEventParsingTest(unittest.TestCase):
55   def testParsingWithSampleData(self):
56     root_event = (inspector_importer.InspectorTimelineImporter
57         .RawEventToTimelineEvent(_SAMPLE_MESSAGE))
58     self.assertTrue(root_event)
59     decode_image_event = [
60       child for child in root_event.IterEventsInThisContainerRecrusively()
61       if child.name == 'DecodeImage'][0]
62     self.assertEquals(decode_image_event.args['data']['imageType'], 'PNG')
63     self.assertTrue(decode_image_event.duration > 0)
64
65   def testParsingWithSimpleData(self):
66     raw_event = {'type': 'Foo',
67                  'startTime': 1,
68                  'endTime': 3,
69                  'children': []}
70     event = (inspector_importer.InspectorTimelineImporter
71         .RawEventToTimelineEvent(raw_event))
72     self.assertEquals('Foo', event.name)
73     self.assertEquals(1, event.start)
74     self.assertEquals(3, event.end)
75     self.assertEquals(2, event.duration)
76     self.assertEquals([], event.sub_slices)
77
78   def testParsingWithArgs(self):
79     raw_event = {'type': 'Foo',
80                  'startTime': 1,
81                  'endTime': 3,
82                  'foo': 7,
83                  'bar': {'x': 1}}
84     event = (inspector_importer.InspectorTimelineImporter
85         .RawEventToTimelineEvent(raw_event))
86     self.assertEquals('Foo', event.name)
87     self.assertEquals(1, event.start)
88     self.assertEquals(3, event.end)
89     self.assertEquals(2, event.duration)
90     self.assertEquals([], event.sub_slices)
91     self.assertEquals(7, event.args['foo'])
92     self.assertEquals(1, event.args['bar']['x'])
93
94   def testEventsWithNoStartTimeAreDropped(self):
95     raw_event = {'type': 'Foo',
96                  'endTime': 1,
97                  'children': []}
98     event = (inspector_importer.InspectorTimelineImporter.
99         RawEventToTimelineEvent(raw_event))
100     self.assertEquals(None, event)
101
102   def testEventsWithNoEndTimeAreOk(self):
103     raw_event = {'type': 'Foo',
104                  'startTime': 1,
105                  'children': []}
106     event = (inspector_importer.InspectorTimelineImporter.
107         RawEventToTimelineEvent(raw_event))
108     self.assertEquals(1, event.start)
109     self.assertEquals(1, event.end)
110
111 class InspectorImporterTest(unittest.TestCase):
112   def testImport(self):
113     messages = [_BACKGROUND_MESSAGE, _SAMPLE_MESSAGE]
114     m = model.TimelineModel(messages, shift_world_to_zero=False)
115     self.assertEquals(1, len(m.processes))
116     process = m.processes.values()[0]
117     threads = process.threads
118     self.assertEquals(2, len(threads))
119     renderer_thread = threads[0]
120     self.assertEquals(1, len(renderer_thread.toplevel_slices))
121     self.assertEquals('Program',
122                       renderer_thread.toplevel_slices[0].name)
123     second_thread = threads['2']
124     self.assertEquals(1, len(second_thread.toplevel_slices))
125     self.assertEquals('BeginFrame',
126                       second_thread.toplevel_slices[0].name)