| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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]}) |
| OLD | NEW |