| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 | 4 |
| 5 import os | 5 import os |
| 6 import unittest | 6 import unittest |
| 7 | 7 |
| 8 from telemetry import benchmark | 8 from telemetry import benchmark |
| 9 from telemetry.core import platform | 9 from telemetry.core import platform |
| 10 from telemetry.core import wpr_modes | 10 from telemetry.core import wpr_modes |
| 11 from telemetry.page import page as page_module | 11 from telemetry.page import page as page_module |
| 12 from telemetry.page import page_set | 12 from telemetry.page import page_set |
| 13 from telemetry.results import page_test_results | 13 from telemetry.results import page_test_results |
| 14 from telemetry.timeline import model as model_module | 14 from telemetry.timeline import model as model_module |
| 15 from telemetry.timeline import async_slice | 15 from telemetry.timeline import async_slice |
| 16 from telemetry.unittest import options_for_unittests | 16 from telemetry.unittest import options_for_unittests |
| 17 from telemetry.unittest import page_test_test_case | 17 from telemetry.unittest import page_test_test_case |
| 18 from telemetry.unittest import browser_test_case |
| 18 from telemetry.value import scalar | 19 from telemetry.value import scalar |
| 19 from telemetry.web_perf import timeline_based_measurement as tbm_module | 20 from telemetry.web_perf import timeline_based_measurement as tbm_module |
| 20 from telemetry.web_perf import timeline_interaction_record as tir_module | 21 from telemetry.web_perf import timeline_interaction_record as tir_module |
| 21 from telemetry.web_perf.metrics import timeline_based_metric | 22 from telemetry.web_perf.metrics import timeline_based_metric |
| 22 | 23 |
| 23 | 24 |
| 24 class FakeFastMetric(timeline_based_metric.TimelineBasedMetric): | 25 class FakeFastMetric(timeline_based_metric.TimelineBasedMetric): |
| 25 | 26 |
| 26 def AddResults(self, model, renderer_thread, interaction_records, results): | 27 def AddResults(self, model, renderer_thread, interaction_records, results): |
| 27 results.AddValue(scalar.ScalarValue( | 28 results.AddValue(scalar.ScalarValue( |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 action_runner.TapElement('#jank-button') | 195 action_runner.TapElement('#jank-button') |
| 195 action_runner.WaitForJavaScriptCondition('window.jankScriptDone') | 196 action_runner.WaitForJavaScriptCondition('window.jankScriptDone') |
| 196 if self._trigger_slow: | 197 if self._trigger_slow: |
| 197 action_runner.TapElement('#slow-button') | 198 action_runner.TapElement('#slow-button') |
| 198 action_runner.WaitForJavaScriptCondition('window.slowScriptDone') | 199 action_runner.WaitForJavaScriptCondition('window.slowScriptDone') |
| 199 | 200 |
| 200 | 201 |
| 201 class TimelineBasedMeasurementTest(page_test_test_case.PageTestTestCase): | 202 class TimelineBasedMeasurementTest(page_test_test_case.PageTestTestCase): |
| 202 | 203 |
| 203 def setUp(self): | 204 def setUp(self): |
| 205 browser_test_case.teardown_browser() |
| 204 self._options = options_for_unittests.GetCopy() | 206 self._options = options_for_unittests.GetCopy() |
| 205 self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF | 207 self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF |
| 206 | 208 |
| 209 # This test is flaky when run in parallel on the mac: crbug.com/426676 |
| 210 @benchmark.Disabled('mac') |
| 207 def testSmoothnessTimelineBasedMeasurementForSmoke(self): | 211 def testSmoothnessTimelineBasedMeasurementForSmoke(self): |
| 208 ps = self.CreateEmptyPageSet() | 212 ps = self.CreateEmptyPageSet() |
| 209 ps.AddPage(TestTimelinebasedMeasurementPage( | 213 ps.AddPage(TestTimelinebasedMeasurementPage( |
| 210 ps, ps.base_dir, trigger_animation=True)) | 214 ps, ps.base_dir, trigger_animation=True)) |
| 211 | 215 |
| 212 measurement = tbm_module.TimelineBasedMeasurement() | 216 measurement = tbm_module.TimelineBasedMeasurement() |
| 213 results = self.RunMeasurement(measurement, ps, | 217 results = self.RunMeasurement(measurement, ps, |
| 214 options=self._options) | 218 options=self._options) |
| 215 | 219 |
| 216 self.assertEquals(0, len(results.failures)) | 220 self.assertEquals(0, len(results.failures)) |
| 217 v = results.FindAllPageSpecificValuesNamed( | 221 v = results.FindAllPageSpecificValuesNamed( |
| 218 'CenterAnimation-frame_time_discrepancy') | 222 'CenterAnimation-frame_time_discrepancy') |
| 219 self.assertEquals(len(v), 1) | 223 self.assertEquals(len(v), 1) |
| 220 v = results.FindAllPageSpecificValuesNamed( | 224 v = results.FindAllPageSpecificValuesNamed( |
| 221 'DrawerAnimation-frame_time_discrepancy') | 225 'DrawerAnimation-frame_time_discrepancy') |
| 222 self.assertEquals(len(v), 1) | 226 self.assertEquals(len(v), 1) |
| 223 | 227 |
| 228 # This test is flaky when run in parallel on the mac: crbug.com/426676 |
| 229 @benchmark.Disabled('mac') |
| 224 def testFastTimelineBasedMeasurementForSmoke(self): | 230 def testFastTimelineBasedMeasurementForSmoke(self): |
| 225 ps = self.CreateEmptyPageSet() | 231 ps = self.CreateEmptyPageSet() |
| 226 ps.AddPage(TestTimelinebasedMeasurementPage( | 232 ps.AddPage(TestTimelinebasedMeasurementPage( |
| 227 ps, ps.base_dir, trigger_slow=True)) | 233 ps, ps.base_dir, trigger_slow=True)) |
| 228 | 234 |
| 229 measurement = tbm_module.TimelineBasedMeasurement() | 235 measurement = tbm_module.TimelineBasedMeasurement() |
| 230 results = self.RunMeasurement(measurement, ps, options=self._options) | 236 results = self.RunMeasurement(measurement, ps, options=self._options) |
| 231 | 237 |
| 232 self.assertEquals([], results.failures) | 238 self.assertEquals([], results.failures) |
| 233 expected_names = set([ | 239 expected_names = set([ |
| (...skipping 15 matching lines...) Expand all Loading... |
| 249 self.assertEquals( | 255 self.assertEquals( |
| 250 expected_names, set(v.name for v in results.all_page_specific_values)) | 256 expected_names, set(v.name for v in results.all_page_specific_values)) |
| 251 | 257 |
| 252 # In interaction_enabled_page.html, the "slow" interaction executes | 258 # In interaction_enabled_page.html, the "slow" interaction executes |
| 253 # a loop with window.performance.now() to wait 200ms. | 259 # a loop with window.performance.now() to wait 200ms. |
| 254 # fast-duration measures wall time so its value should be at least 200ms. | 260 # fast-duration measures wall time so its value should be at least 200ms. |
| 255 v = results.FindAllPageSpecificValuesNamed('SlowThreadJsRun-fast-duration') | 261 v = results.FindAllPageSpecificValuesNamed('SlowThreadJsRun-fast-duration') |
| 256 self.assertGreaterEqual(v[0].value, 200.0) | 262 self.assertGreaterEqual(v[0].value, 200.0) |
| 257 | 263 |
| 258 # Disabled since mainthread_jank metric is not supported on windows platform. | 264 # Disabled since mainthread_jank metric is not supported on windows platform. |
| 259 @benchmark.Disabled('win') | 265 # Also, flaky on the mac when run in parallel: crbug.com/426676 |
| 266 @benchmark.Disabled('win', 'mac') |
| 260 def testMainthreadJankTimelineBasedMeasurement(self): | 267 def testMainthreadJankTimelineBasedMeasurement(self): |
| 261 ps = self.CreateEmptyPageSet() | 268 ps = self.CreateEmptyPageSet() |
| 262 ps.AddPage(TestTimelinebasedMeasurementPage( | 269 ps.AddPage(TestTimelinebasedMeasurementPage( |
| 263 ps, ps.base_dir, trigger_jank=True)) | 270 ps, ps.base_dir, trigger_jank=True)) |
| 264 | 271 |
| 265 measurement = tbm_module.TimelineBasedMeasurement() | 272 measurement = tbm_module.TimelineBasedMeasurement() |
| 266 results = self.RunMeasurement(measurement, ps, | 273 results = self.RunMeasurement(measurement, ps, |
| 267 options=self._options) | 274 options=self._options) |
| 268 self.assertEquals(0, len(results.failures)) | 275 self.assertEquals(0, len(results.failures)) |
| 269 | 276 |
| 270 # In interaction_enabled_page.html, we create a jank loop based on | 277 # In interaction_enabled_page.html, we create a jank loop based on |
| 271 # window.performance.now() (basically loop for x milliseconds). | 278 # window.performance.now() (basically loop for x milliseconds). |
| 272 # Since window.performance.now() uses wall-time instead of thread time, | 279 # Since window.performance.now() uses wall-time instead of thread time, |
| 273 # we only assert the biggest jank > 50ms here to account for the fact | 280 # we only assert the biggest jank > 50ms here to account for the fact |
| 274 # that the browser may deschedule during the jank loop. | 281 # that the browser may deschedule during the jank loop. |
| 275 v = results.FindAllPageSpecificValuesNamed( | 282 v = results.FindAllPageSpecificValuesNamed( |
| 276 'JankThreadJSRun-responsive-biggest_jank_thread_time') | 283 'JankThreadJSRun-responsive-biggest_jank_thread_time') |
| 277 self.assertGreaterEqual(v[0].value, 50) | 284 self.assertGreaterEqual(v[0].value, 50) |
| 278 | 285 |
| 279 v = results.FindAllPageSpecificValuesNamed( | 286 v = results.FindAllPageSpecificValuesNamed( |
| 280 'JankThreadJSRun-responsive-total_big_jank_thread_time') | 287 'JankThreadJSRun-responsive-total_big_jank_thread_time') |
| 281 self.assertGreaterEqual(v[0].value, 50) | 288 self.assertGreaterEqual(v[0].value, 50) |
| OLD | NEW |