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.
6 from telemetry.core.timeline import inspector_importer
7 from telemetry.core.timeline import model
9 _BACKGROUND_MESSAGE = {
13 'startTime': 1352783525921.824}
18 'startTime': 1352783525921.823,
20 'usedHeapSize': 1870736},
22 'data': {'height': 723,
26 'endTime': 1352783525921.8992,
28 'startTime': 1352783525921.8281,
30 'usedHeapSize': 1870736},
33 'data': {'imageType': 'PNG'},
34 'endTime': 1352783525927.7939,
35 'startTime': 1352783525922.4241,
36 'type': 'DecodeImage',
37 'usedHeapSize': 1870736}
39 'data': {'height': 432,
43 'endTime': 1352783525927.9822,
45 'startTime': 1352783525921.9292,
47 'usedHeapSize': 1870736}
50 'endTime': 1352783525928.041,
51 'startTime': 1352783525921.8049,
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)
65 def testParsingWithSimpleData(self):
66 raw_event = {'type': 'Foo',
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)
78 def testParsingWithArgs(self):
79 raw_event = {'type': 'Foo',
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'])
94 def testEventsWithNoStartTimeAreDropped(self):
95 raw_event = {'type': 'Foo',
98 event = (inspector_importer.InspectorTimelineImporter.
99 RawEventToTimelineEvent(raw_event))
100 self.assertEquals(None, event)
102 def testEventsWithNoEndTimeAreOk(self):
103 raw_event = {'type': 'Foo',
106 event = (inspector_importer.InspectorTimelineImporter.
107 RawEventToTimelineEvent(raw_event))
108 self.assertEquals(1, event.start)
109 self.assertEquals(1, event.end)
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)