Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: tools/perf/benchmarks/blink_perf_unittest.py

Issue 2864643002: Support tracing metrics for measureValueAsync method (Closed)
Patch Set: Address Wang Xianzhu's comment Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/perf/benchmarks/blink_perf.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2017 The Chromium Authors. All rights reserved. 1 # Copyright 2017 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 import os 4 import os
5 import unittest 5 import unittest
6 6
7 from telemetry import story 7 from telemetry import story
8 from telemetry.page import page as page_module 8 from telemetry.page import page as page_module
9 from telemetry.testing import options_for_unittests 9 from telemetry.testing import options_for_unittests
10 from telemetry.testing import page_test_test_case 10 from telemetry.testing import page_test_test_case
(...skipping 30 matching lines...) Expand all
41 def testBlinkPerfTracingMetricsForMeasureTime(self): 41 def testBlinkPerfTracingMetricsForMeasureTime(self):
42 results = self.RunMeasurement(measurement=self._measurement, 42 results = self.RunMeasurement(measurement=self._measurement,
43 ps=self._CreateStorySetForTestFile('append-child-measure-time.html'), 43 ps=self._CreateStorySetForTestFile('append-child-measure-time.html'),
44 options=self._options) 44 options=self._options)
45 self.assertFalse(results.failures) 45 self.assertFalse(results.failures)
46 self.assertEquals(len(results.FindAllTraceValues()), 1) 46 self.assertEquals(len(results.FindAllTraceValues()), 1)
47 47
48 frame_view_layouts = results.FindAllPageSpecificValuesNamed( 48 frame_view_layouts = results.FindAllPageSpecificValuesNamed(
49 'FrameView::layout') 49 'FrameView::layout')
50 self.assertEquals(len(frame_view_layouts), 1) 50 self.assertEquals(len(frame_view_layouts), 1)
51 # append-child-measure-time.html specifies 5 iterationCount.
52 self.assertEquals(len(frame_view_layouts[0].values), 5)
51 self.assertGreater(frame_view_layouts[0].GetRepresentativeNumber, 0.1) 53 self.assertGreater(frame_view_layouts[0].GetRepresentativeNumber, 0.1)
52 54
53 update_layout_trees = results.FindAllPageSpecificValuesNamed( 55 update_layout_trees = results.FindAllPageSpecificValuesNamed(
54 'UpdateLayoutTree') 56 'UpdateLayoutTree')
55 self.assertEquals(len(update_layout_trees), 1) 57 self.assertEquals(len(update_layout_trees), 1)
58 # append-child-measure-time.html specifies 5 iterationCount.
59 self.assertEquals(len(update_layout_trees[0].values), 5)
60
56 self.assertGreater(update_layout_trees[0].GetRepresentativeNumber, 0.1) 61 self.assertGreater(update_layout_trees[0].GetRepresentativeNumber, 0.1)
57 62
58 def testBlinkPerfTracingMetricsForMeasureFrameTime(self): 63 def testBlinkPerfTracingMetricsForMeasureFrameTime(self):
59 results = self.RunMeasurement(measurement=self._measurement, 64 results = self.RunMeasurement(measurement=self._measurement,
60 ps=self._CreateStorySetForTestFile( 65 ps=self._CreateStorySetForTestFile(
61 'color-changes-measure-frame-time.html'), 66 'color-changes-measure-frame-time.html'),
62 options=self._options) 67 options=self._options)
63 self.assertFalse(results.failures) 68 self.assertFalse(results.failures)
64 self.assertEquals(len(results.FindAllTraceValues()), 1) 69 self.assertEquals(len(results.FindAllTraceValues()), 1)
65 70
66 frame_view_prepaints = results.FindAllPageSpecificValuesNamed( 71 frame_view_prepaints = results.FindAllPageSpecificValuesNamed(
67 'FrameView::prePaint') 72 'FrameView::prePaint')
68 self.assertEquals(len(frame_view_prepaints), 1) 73 self.assertEquals(len(frame_view_prepaints), 1)
74 # color-changes-measure-frame-time.html specifies 9 iterationCount.
75 self.assertEquals(len(frame_view_prepaints[0].values), 9)
69 self.assertGreater(frame_view_prepaints[0].GetRepresentativeNumber, 0.1) 76 self.assertGreater(frame_view_prepaints[0].GetRepresentativeNumber, 0.1)
70 77
71 frame_view_painttrees = results.FindAllPageSpecificValuesNamed( 78 frame_view_painttrees = results.FindAllPageSpecificValuesNamed(
72 'FrameView::paintTree') 79 'FrameView::paintTree')
73 self.assertEquals(len(frame_view_painttrees), 1) 80 self.assertEquals(len(frame_view_painttrees), 1)
81 # color-changes-measure-frame-time.html specifies 9 iterationCount.
82 self.assertEquals(len(frame_view_painttrees[0].values), 9)
74 self.assertGreater(frame_view_painttrees[0].GetRepresentativeNumber, 0.1) 83 self.assertGreater(frame_view_painttrees[0].GetRepresentativeNumber, 0.1)
75 84
85 def testBlinkPerfTracingMetricsForMeasureAsync(self):
86 results = self.RunMeasurement(measurement=self._measurement,
87 ps=self._CreateStorySetForTestFile(
88 'simple-blob-measure-async.html'),
89 options=self._options)
90 self.assertFalse(results.failures)
91 self.assertEquals(len(results.FindAllTraceValues()), 1)
92
93 blob_requests = results.FindAllPageSpecificValuesNamed(
94 'BlobRequest')
95 self.assertEquals(len(blob_requests), 1)
96 # simple-blob-measure-async.html specifies 6 iterationCount.
97 self.assertEquals(len(blob_requests[0].values), 6)
98 self.assertGreater(blob_requests[0].GetRepresentativeNumber, 0.1)
99
100 blob_request_read_raw_data = results.FindAllPageSpecificValuesNamed(
101 'BlobRequest::ReadRawData')
102 self.assertEquals(len(blob_request_read_raw_data), 1)
103 # simple-blob-measure-async.html specifies 6 iterationCount.
104 self.assertEquals(len(blob_request_read_raw_data[0].values), 6)
105 self.assertGreater(
106 blob_request_read_raw_data[0].GetRepresentativeNumber, 0.01)
107
76 108
77 # pylint: disable=protected-access 109 # pylint: disable=protected-access
78 # This is needed for testing _ComputeTraceEventsThreadTimeForBlinkPerf method. 110 # This is needed for testing _ComputeTraceEventsThreadTimeForBlinkPerf method.
79 class ComputeTraceEventsMetricsForBlinkPerfTest(unittest.TestCase): 111 class ComputeTraceEventsMetricsForBlinkPerfTest(unittest.TestCase):
80 112
81 def _AddBlinkTestSlice(self, renderer_thread, start, end): 113 def _AddBlinkTestSlice(self, renderer_thread, start, end):
82 s = async_slice.AsyncSlice( 114 s = async_slice.AsyncSlice(
83 'blink', 'blink_perf.runTest', 115 'blink', 'blink_perf.runTest',
84 timestamp=start, duration=end - start, start_thread=renderer_thread, 116 timestamp=start, duration=end - start, start_thread=renderer_thread,
85 end_thread=renderer_thread) 117 end_thread=renderer_thread)
(...skipping 22 matching lines...) Expand all
108 140
109 # Since this "baz" slice has CPU duration = 70ms, wall-time duration = 100ms 141 # Since this "baz" slice has CPU duration = 70ms, wall-time duration = 100ms
110 # & its overalapped wall-time with "blink_perf.run_test" is 50 ms, its 142 # & its overalapped wall-time with "blink_perf.run_test" is 50 ms, its
111 # overlapped CPU time with "blink_perf.run_test" is 143 # overlapped CPU time with "blink_perf.run_test" is
112 # 50 * 70 / 100 = 35ms. 144 # 50 * 70 / 100 = 35ms.
113 renderer_main.BeginSlice('blink', 'baz', 500, 520) 145 renderer_main.BeginSlice('blink', 'baz', 500, 520)
114 renderer_main.EndSlice(600, 590) 146 renderer_main.EndSlice(600, 590)
115 147
116 self.assertEquals( 148 self.assertEquals(
117 blink_perf._ComputeTraceEventsThreadTimeForBlinkPerf( 149 blink_perf._ComputeTraceEventsThreadTimeForBlinkPerf(
118 renderer_main, ['foo', 'bar', 'baz']), 150 model, renderer_main, ['foo', 'bar', 'baz']),
119 {'foo': [15], 'bar': [18], 'baz': [35]}) 151 {'foo': [15], 'bar': [18], 'baz': [35]})
120 152
121
122 def testTraceEventMetricsMultiBlinkTest(self): 153 def testTraceEventMetricsMultiBlinkTest(self):
123 model = model_module.TimelineModel() 154 model = model_module.TimelineModel()
124 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) 155 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2)
125 renderer_main.name = 'CrRendererMain' 156 renderer_main.name = 'CrRendererMain'
126 157
127 # Set up a main thread model that looks like: 158 # Set up a main thread model that looks like:
128 # [ blink_perf.run_test ] [ blink_perf.run_test ] 159 # [ blink_perf.run_test ] [ blink_perf.run_test ]
129 # | [ foo ] [ bar ] | [ | foo ] | 160 # | [ foo ] [ bar ] | [ | foo ] |
130 # | | | | | | | | | | | 161 # | | | | | | | | | | |
131 # 100 120 140 400 420 440 500 520 600 640 162 # 100 120 140 400 420 440 500 520 600 640
(...skipping 11 matching lines...) Expand all
143 174
144 # Since this "foo" slice has CPU duration = 40ms, wall-time duration = 100ms 175 # Since this "foo" slice has CPU duration = 40ms, wall-time duration = 100ms
145 # & its overalapped wall-time with "blink_perf.run_test" is 80 ms, its 176 # & its overalapped wall-time with "blink_perf.run_test" is 80 ms, its
146 # overlapped CPU time with "blink_perf.run_test" is 177 # overlapped CPU time with "blink_perf.run_test" is
147 # 80 * 40 / 100 = 32ms. 178 # 80 * 40 / 100 = 32ms.
148 renderer_main.BeginSlice('blink', 'foo', 500, 520) 179 renderer_main.BeginSlice('blink', 'foo', 500, 520)
149 renderer_main.EndSlice(600, 560) 180 renderer_main.EndSlice(600, 560)
150 181
151 self.assertEquals( 182 self.assertEquals(
152 blink_perf._ComputeTraceEventsThreadTimeForBlinkPerf( 183 blink_perf._ComputeTraceEventsThreadTimeForBlinkPerf(
153 renderer_main, ['foo', 'bar', 'baz']), 184 model, renderer_main, ['foo', 'bar', 'baz']),
154 {'foo': [15, 32], 'bar': [18, 0], 'baz': [0, 0]}) 185 {'foo': [15, 32], 'bar': [18, 0], 'baz': [0, 0]})
155 186
156 def testTraceEventMetricsNoThreadTimeAvailable(self): 187 def testTraceEventMetricsNoThreadTimeAvailable(self):
157 model = model_module.TimelineModel() 188 model = model_module.TimelineModel()
158 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) 189 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2)
159 renderer_main.name = 'CrRendererMain' 190 renderer_main.name = 'CrRendererMain'
160 191
161 # Set up a main thread model that looks like: 192 # Set up a main thread model that looks like:
162 # [ blink_perf.run_test ] 193 # [ blink_perf.run_test ]
163 # | [ foo ] [ bar ] | 194 # | [ foo ] [ bar ] |
164 # | | | | | | 195 # | | | | | |
165 # 100 120 140 400 420 550 196 # 100 120 140 400 420 550
166 # | | 197 # | |
167 # CPU dur: None None 198 # CPU dur: None None
168 # 199 #
169 self._AddBlinkTestSlice(renderer_main, 100, 550) 200 self._AddBlinkTestSlice(renderer_main, 100, 550)
170 201
171 renderer_main.BeginSlice('blink', 'foo', 120) 202 renderer_main.BeginSlice('blink', 'foo', 120)
172 renderer_main.EndSlice(140) 203 renderer_main.EndSlice(140)
173 204
174 renderer_main.BeginSlice('blink', 'bar', 400) 205 renderer_main.BeginSlice('blink', 'bar', 400)
175 renderer_main.EndSlice(420) 206 renderer_main.EndSlice(420)
176 207
177 self.assertEquals( 208 self.assertEquals(
178 blink_perf._ComputeTraceEventsThreadTimeForBlinkPerf( 209 blink_perf._ComputeTraceEventsThreadTimeForBlinkPerf(
179 renderer_main, ['foo', 'bar']), 210 model, renderer_main, ['foo', 'bar']),
180 {'foo': [20], 'bar': [20]}) 211 {'foo': [20], 'bar': [20]})
212
213 def testTraceEventMetricsMultiBlinkTestCrossProcesses(self):
214 model = model_module.TimelineModel()
215 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2)
216 renderer_main.name = 'CrRendererMain'
217
218 foo_thread = model.GetOrCreateProcess(2).GetOrCreateThread(4)
219 bar_thread = model.GetOrCreateProcess(2).GetOrCreateThread(5)
220
221 # Set up a main model that looks like (P1 & P2 are different processes):
222 # P1 [ blink_perf.run_test ] [ blink_perf.run_test ]
223 # | | | |
224 # P2 | [ foo ] | [ | foo ] |
225 # | | | | [ bar ] | | | | |
226 # | | | | | | | | | | | | |
227 # 100 120 | 140 400 | 420 440 500 520 | 600 640
228 # | | |
229 # CPU dur: 15 N/A 40
230 #
231 self._AddBlinkTestSlice(renderer_main, 100, 440)
232 self._AddBlinkTestSlice(renderer_main, 520, 640)
233
234 foo_thread.BeginSlice('blink', 'foo', 120, 122)
235 foo_thread.EndSlice(140, 137)
236
237 bar_thread.BeginSlice('blink', 'bar', 400)
238 bar_thread.EndSlice(420)
239
240 # Since this "foo" slice has CPU duration = 40ms, wall-time duration = 100ms
241 # & its overalapped wall-time with "blink_perf.run_test" is 80 ms, its
242 # overlapped CPU time with "blink_perf.run_test" is
243 # 80 * 40 / 100 = 32ms.
244 foo_thread.BeginSlice('blink', 'foo', 500, 520)
245 foo_thread.EndSlice(600, 560)
246
247 self.assertEquals(
248 blink_perf._ComputeTraceEventsThreadTimeForBlinkPerf(
249 model, renderer_main, ['foo', 'bar', 'baz']),
250 {'foo': [15, 32], 'bar': [20, 0], 'baz': [0, 0]})
OLDNEW
« no previous file with comments | « tools/perf/benchmarks/blink_perf.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698