Chromium Code Reviews| 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 wpr_modes | 9 from telemetry.core import wpr_modes |
| 10 from telemetry.page import page as page_module | 10 from telemetry.page import page as page_module |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 171 d.AddInteraction(ts=10, duration=5, marker=responsive_marker) | 171 d.AddInteraction(ts=10, duration=5, marker=responsive_marker) |
| 172 smooth_marker = 'Interaction.LogicalName/is_smooth,repeatable' | 172 smooth_marker = 'Interaction.LogicalName/is_smooth,repeatable' |
| 173 d.AddInteraction(ts=20, duration=5, marker=smooth_marker) | 173 d.AddInteraction(ts=20, duration=5, marker=smooth_marker) |
| 174 d.FinalizeImport() | 174 d.FinalizeImport() |
| 175 self.assertRaises(tbm_module.InvalidInteractions, d.AddResults) | 175 self.assertRaises(tbm_module.InvalidInteractions, d.AddResults) |
| 176 | 176 |
| 177 | 177 |
| 178 class TestTimelinebasedMeasurementPage(page_module.Page): | 178 class TestTimelinebasedMeasurementPage(page_module.Page): |
| 179 | 179 |
| 180 def __init__(self, ps, base_dir, trigger_animation=False, | 180 def __init__(self, ps, base_dir, trigger_animation=False, |
| 181 trigger_jank=False): | 181 trigger_jank=False, trigger_slow=False): |
| 182 super(TestTimelinebasedMeasurementPage, self).__init__( | 182 super(TestTimelinebasedMeasurementPage, self).__init__( |
| 183 'file://interaction_enabled_page.html', ps, base_dir) | 183 'file://interaction_enabled_page.html', ps, base_dir) |
| 184 self._trigger_animation = trigger_animation | 184 self._trigger_animation = trigger_animation |
| 185 self._trigger_jank = trigger_jank | 185 self._trigger_jank = trigger_jank |
| 186 self._trigger_slow = trigger_slow | |
| 186 | 187 |
| 187 def RunSmoothness(self, action_runner): | 188 def RunSmoothness(self, action_runner): |
| 188 if self._trigger_animation: | 189 if self._trigger_animation: |
| 189 action_runner.TapElement('#animating-button') | 190 action_runner.TapElement('#animating-button') |
| 190 action_runner.WaitForJavaScriptCondition('window.animationDone') | 191 action_runner.WaitForJavaScriptCondition('window.animationDone') |
| 191 if self._trigger_jank: | 192 if self._trigger_jank: |
| 192 action_runner.TapElement('#jank-button') | 193 action_runner.TapElement('#jank-button') |
| 193 action_runner.WaitForJavaScriptCondition('window.jankScriptDone') | 194 action_runner.WaitForJavaScriptCondition('window.jankScriptDone') |
| 195 if self._trigger_slow: | |
| 196 action_runner.TapElement('#slow-button') | |
| 197 action_runner.WaitForJavaScriptCondition('window.slowScriptDone') | |
| 194 | 198 |
| 195 | 199 |
| 196 class TimelineBasedMeasurementTest(page_test_test_case.PageTestTestCase): | 200 class TimelineBasedMeasurementTest(page_test_test_case.PageTestTestCase): |
| 197 | 201 |
| 198 def setUp(self): | 202 def setUp(self): |
| 199 self._options = options_for_unittests.GetCopy() | 203 self._options = options_for_unittests.GetCopy() |
| 200 self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF | 204 self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF |
| 201 | 205 |
| 202 def testSmoothnessTimelineBasedMeasurementForSmoke(self): | 206 def testSmoothnessTimelineBasedMeasurementForSmoke(self): |
| 203 ps = self.CreateEmptyPageSet() | 207 ps = self.CreateEmptyPageSet() |
| 204 ps.AddPage(TestTimelinebasedMeasurementPage( | 208 ps.AddPage(TestTimelinebasedMeasurementPage( |
| 205 ps, ps.base_dir, trigger_animation=True)) | 209 ps, ps.base_dir, trigger_animation=True)) |
| 206 | 210 |
| 207 measurement = tbm_module.TimelineBasedMeasurement() | 211 measurement = tbm_module.TimelineBasedMeasurement() |
| 208 results = self.RunMeasurement(measurement, ps, | 212 results = self.RunMeasurement(measurement, ps, |
| 209 options=self._options) | 213 options=self._options) |
| 210 | 214 |
| 211 self.assertEquals(0, len(results.failures)) | 215 self.assertEquals(0, len(results.failures)) |
| 212 v = results.FindAllPageSpecificValuesNamed('CenterAnimation-jank') | 216 v = results.FindAllPageSpecificValuesNamed('CenterAnimation-jank') |
| 213 self.assertEquals(len(v), 1) | 217 self.assertEquals(len(v), 1) |
| 214 v = results.FindAllPageSpecificValuesNamed('DrawerAnimation-jank') | 218 v = results.FindAllPageSpecificValuesNamed('DrawerAnimation-jank') |
| 215 self.assertEquals(len(v), 1) | 219 self.assertEquals(len(v), 1) |
| 216 | 220 |
| 221 def testFastTimelineBasedMeasurementForSmoke(self): | |
| 222 ps = self.CreateEmptyPageSet() | |
| 223 ps.AddPage(TestTimelinebasedMeasurementPage( | |
| 224 ps, ps.base_dir, trigger_slow=True)) | |
| 225 | |
| 226 measurement = tbm_module.TimelineBasedMeasurement() | |
| 227 results = self.RunMeasurement(measurement, ps, options=self._options) | |
| 228 | |
| 229 self.assertEquals([], results.failures) | |
| 230 expected_names = [ | |
| 231 'SlowThreadJsRun-fast-cpu_time', | |
| 232 'SlowThreadJsRun-fast-duration', | |
| 233 'SlowThreadJsRun-fast-idle_time', | |
| 234 ] | |
| 235 names = sorted(v.name for v in results.all_page_specific_values) | |
| 236 self.assertEquals(expected_names, names) | |
|
nednguyen
2014/08/14 01:33:47
Can you compare the two sets instead?
slamm
2014/08/14 17:27:08
Done.
| |
| 237 | |
|
nednguyen
2014/08/14 01:33:47
We can also assert duration >= 200 ms.
slamm
2014/08/14 17:27:09
Done.
| |
| 217 # Disabled since mainthread_jank metric is not supported on windows platform. | 238 # Disabled since mainthread_jank metric is not supported on windows platform. |
| 218 @benchmark.Disabled('win') | 239 @benchmark.Disabled('win') |
| 219 def testMainthreadJankTimelineBasedMeasurement(self): | 240 def testMainthreadJankTimelineBasedMeasurement(self): |
| 220 ps = self.CreateEmptyPageSet() | 241 ps = self.CreateEmptyPageSet() |
| 221 ps.AddPage(TestTimelinebasedMeasurementPage( | 242 ps.AddPage(TestTimelinebasedMeasurementPage( |
| 222 ps, ps.base_dir, trigger_jank=True)) | 243 ps, ps.base_dir, trigger_jank=True)) |
| 223 | 244 |
| 224 measurement = tbm_module.TimelineBasedMeasurement() | 245 measurement = tbm_module.TimelineBasedMeasurement() |
| 225 results = self.RunMeasurement(measurement, ps, | 246 results = self.RunMeasurement(measurement, ps, |
| 226 options=self._options) | 247 options=self._options) |
| 227 self.assertEquals(0, len(results.failures)) | 248 self.assertEquals(0, len(results.failures)) |
| 228 | 249 |
| 229 # In interaction_enabled_page.html, we create a jank loop based on | 250 # In interaction_enabled_page.html, we create a jank loop based on |
| 230 # window.performance.now() (basically loop for x milliseconds). | 251 # window.performance.now() (basically loop for x milliseconds). |
| 231 # Since window.performance.now() uses wall-time | 252 # Since window.performance.now() uses wall-time |
| 232 # instead of thread time, we set time to looping to 100ms in | 253 # instead of thread time, we set time to looping to 100ms in |
| 233 # interaction_enabled_page.html and only assert the biggest jank > 50ms here | 254 # interaction_enabled_page.html and only assert the biggest jank > 50ms here |
| 234 # to account for the fact that the browser may deschedule during the jank | 255 # to account for the fact that the browser may deschedule during the jank |
| 235 # loop. | 256 # loop. |
| 236 v = results.FindAllPageSpecificValuesNamed( | 257 v = results.FindAllPageSpecificValuesNamed( |
| 237 'JankThreadJSRun-responsive-biggest_jank_thread_time') | 258 'JankThreadJSRun-responsive-biggest_jank_thread_time') |
| 238 self.assertGreaterEqual(v[0].value, 50) | 259 self.assertGreaterEqual(v[0].value, 50) |
| 239 | 260 |
| 240 v = results.FindAllPageSpecificValuesNamed( | 261 v = results.FindAllPageSpecificValuesNamed( |
| 241 'JankThreadJSRun-responsive-total_big_jank_thread_time') | 262 'JankThreadJSRun-responsive-total_big_jank_thread_time') |
| 242 self.assertGreaterEqual(v[0].value, 50) | 263 self.assertGreaterEqual(v[0].value, 50) |
| OLD | NEW |