OLD | NEW |
| (Empty) |
1 # Copyright (c) 2012 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 os | |
5 import unittest | |
6 | |
7 from telemetry import tab_test_case | |
8 from telemetry import util | |
9 from telemetry.inspector_timeline import InspectorTimeline | |
10 | |
11 _SAMPLE_MESSAGE = { | |
12 'children': [ | |
13 {'data': {}, | |
14 'startTime': 1352783525921.823, | |
15 'type': 'BeginFrame', | |
16 'usedHeapSize': 1870736}, | |
17 {'children': [], | |
18 'data': {'height': 723, | |
19 'width': 1272, | |
20 'x': 0, | |
21 'y': 0}, | |
22 'endTime': 1352783525921.8992, | |
23 'frameId': '10.2', | |
24 'startTime': 1352783525921.8281, | |
25 'type': 'Layout', | |
26 'usedHeapSize': 1870736}, | |
27 {'children': [ | |
28 {'children': [], | |
29 'data': {'imageType': 'PNG'}, | |
30 'endTime': 1352783525927.7939, | |
31 'startTime': 1352783525922.4241, | |
32 'type': 'DecodeImage', | |
33 'usedHeapSize': 1870736} | |
34 ], | |
35 'data': {'height': 432, | |
36 'width': 1272, | |
37 'x': 0, | |
38 'y': 8}, | |
39 'endTime': 1352783525927.9822, | |
40 'frameId': '10.2', | |
41 'startTime': 1352783525921.9292, | |
42 'type': 'Paint', | |
43 'usedHeapSize': 1870736} | |
44 ], | |
45 'data': {}, | |
46 'endTime': 1352783525928.041, | |
47 'startTime': 1352783525921.8049, | |
48 'type': 'Program'} | |
49 | |
50 class InspectorEventParsingTest(unittest.TestCase): | |
51 def testParsingWithSampleData(self): | |
52 root_event = InspectorTimeline.RawEventToTimelineEvent(_SAMPLE_MESSAGE) | |
53 self.assertTrue(root_event) | |
54 decode_image_event = [ | |
55 child for child in root_event.GetAllChildrenRecursive() | |
56 if child.name == 'DecodeImage'][0] | |
57 self.assertEquals(decode_image_event.args['data']['imageType'], 'PNG') | |
58 self.assertTrue(decode_image_event.duration_ms > 0) | |
59 | |
60 def testParsingWithSimpleData(self): | |
61 raw_event = {'type': 'Foo', | |
62 'startTime': 1, | |
63 'endTime': 3, | |
64 'children': []} | |
65 event = InspectorTimeline.RawEventToTimelineEvent(raw_event) | |
66 self.assertEquals('Foo', event.name) | |
67 self.assertEquals(1, event.start_time_ms) | |
68 self.assertEquals(3, event.end_time_ms) | |
69 self.assertEquals(2, event.duration_ms) | |
70 self.assertEquals([], event.children) | |
71 | |
72 def testParsingWithArgs(self): | |
73 raw_event = {'type': 'Foo', | |
74 'startTime': 1, | |
75 'endTime': 3, | |
76 'foo': 7, | |
77 'bar': {'x': 1}} | |
78 event = InspectorTimeline.RawEventToTimelineEvent(raw_event) | |
79 self.assertEquals('Foo', event.name) | |
80 self.assertEquals(1, event.start_time_ms) | |
81 self.assertEquals(3, event.end_time_ms) | |
82 self.assertEquals(2, event.duration_ms) | |
83 self.assertEquals([], event.children) | |
84 self.assertEquals(7, event.args['foo']) | |
85 self.assertEquals(1, event.args['bar']['x']) | |
86 | |
87 def testEventsWithNoStartTimeAreDropped(self): | |
88 raw_event = {'type': 'Foo', | |
89 'endTime': 1, | |
90 'children': []} | |
91 event = InspectorTimeline.RawEventToTimelineEvent(raw_event) | |
92 self.assertEquals(None, event) | |
93 | |
94 def testEventsWithNoEndTimeAreDropped(self): | |
95 raw_event = {'type': 'Foo', | |
96 'endTime': 1, | |
97 'children': []} | |
98 event = InspectorTimeline.RawEventToTimelineEvent(raw_event) | |
99 self.assertEquals(None, event) | |
100 | |
101 | |
102 class InspectorTimelineTabTest(tab_test_case.TabTestCase): | |
103 def _StartServer(self): | |
104 base_dir = os.path.dirname(__file__) | |
105 self._browser.SetHTTPServerDirectory(os.path.join(base_dir, '..', | |
106 'unittest_data')) | |
107 | |
108 def _WaitForAnimationFrame(self): | |
109 def _IsDone(): | |
110 js_is_done = """done""" | |
111 return bool(self._tab.EvaluateJavaScript(js_is_done)) | |
112 util.WaitFor(_IsDone, 5) | |
113 | |
114 def testGotTimeline(self): | |
115 with InspectorTimeline.Recorder(self._tab): | |
116 self._tab.ExecuteJavaScript( | |
117 """ | |
118 var done = false; | |
119 window.webkitRequestAnimationFrame(function() { done = true; }); | |
120 """) | |
121 self._WaitForAnimationFrame() | |
122 | |
123 r = self._tab.timeline_model.GetAllOfName('FireAnimationFrame') | |
124 self.assertTrue(len(r) > 0) | |
125 self.assertTrue(r[0].duration_ms > 0) | |
OLD | NEW |