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.core import util | |
8 from telemetry.core.chrome import inspector_timeline | |
9 from telemetry.test import tab_test_case | |
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 = inspector_timeline.InspectorTimeline.RawEventToTimelineEvent( | |
53 _SAMPLE_MESSAGE) | |
54 self.assertTrue(root_event) | |
55 decode_image_event = [ | |
56 child for child in root_event.GetAllChildrenRecursive() | |
57 if child.name == 'DecodeImage'][0] | |
58 self.assertEquals(decode_image_event.args['data']['imageType'], 'PNG') | |
59 self.assertTrue(decode_image_event.duration_ms > 0) | |
60 | |
61 def testParsingWithSimpleData(self): | |
62 raw_event = {'type': 'Foo', | |
63 'startTime': 1, | |
64 'endTime': 3, | |
65 'children': []} | |
66 event = inspector_timeline.InspectorTimeline.RawEventToTimelineEvent( | |
67 raw_event) | |
68 self.assertEquals('Foo', event.name) | |
69 self.assertEquals(1, event.start_time_ms) | |
70 self.assertEquals(3, event.end_time_ms) | |
71 self.assertEquals(2, event.duration_ms) | |
72 self.assertEquals([], event.children) | |
73 | |
74 def testParsingWithArgs(self): | |
75 raw_event = {'type': 'Foo', | |
76 'startTime': 1, | |
77 'endTime': 3, | |
78 'foo': 7, | |
79 'bar': {'x': 1}} | |
80 event = inspector_timeline.InspectorTimeline.RawEventToTimelineEvent( | |
81 raw_event) | |
82 self.assertEquals('Foo', event.name) | |
83 self.assertEquals(1, event.start_time_ms) | |
84 self.assertEquals(3, event.end_time_ms) | |
85 self.assertEquals(2, event.duration_ms) | |
86 self.assertEquals([], event.children) | |
87 self.assertEquals(7, event.args['foo']) | |
88 self.assertEquals(1, event.args['bar']['x']) | |
89 | |
90 def testEventsWithNoStartTimeAreDropped(self): | |
91 raw_event = {'type': 'Foo', | |
92 'endTime': 1, | |
93 'children': []} | |
94 event = inspector_timeline.InspectorTimeline.RawEventToTimelineEvent( | |
95 raw_event) | |
96 self.assertEquals(None, event) | |
97 | |
98 def testEventsWithNoEndTimeAreDropped(self): | |
99 raw_event = {'type': 'Foo', | |
100 'endTime': 1, | |
101 'children': []} | |
102 event = inspector_timeline.InspectorTimeline.RawEventToTimelineEvent( | |
103 raw_event) | |
104 self.assertEquals(None, event) | |
105 | |
106 | |
107 class InspectorTimelineTabTest(tab_test_case.TabTestCase): | |
108 def _StartServer(self): | |
109 base_dir = os.path.dirname(__file__) | |
110 self._browser.SetHTTPServerDirectory(os.path.join(base_dir, '..', '..', | |
111 'unittest_data')) | |
112 | |
113 def _WaitForAnimationFrame(self): | |
114 def _IsDone(): | |
115 js_is_done = """done""" | |
116 return bool(self._tab.EvaluateJavaScript(js_is_done)) | |
117 util.WaitFor(_IsDone, 5) | |
118 | |
119 def testGotTimeline(self): | |
120 with inspector_timeline.InspectorTimeline.Recorder(self._tab): | |
121 self._tab.ExecuteJavaScript( | |
122 """ | |
123 var done = false; | |
124 window.webkitRequestAnimationFrame(function() { done = true; }); | |
125 """) | |
126 self._WaitForAnimationFrame() | |
127 | |
128 r = self._tab.timeline_model.GetAllOfName('FireAnimationFrame') | |
129 self.assertTrue(len(r) > 0) | |
130 self.assertTrue(r[0].duration_ms > 0) | |
OLD | NEW |