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