Index: tools/telemetry/telemetry/web_perf/timeline_based_measurement_unittest.py |
diff --git a/tools/telemetry/telemetry/web_perf/timeline_based_measurement_unittest.py b/tools/telemetry/telemetry/web_perf/timeline_based_measurement_unittest.py |
index e245cd5b8795fd6e93352007362db7a5b26ebf15..da67d16165d3cb3e987397de633560ea077ede4d 100644 |
--- a/tools/telemetry/telemetry/web_perf/timeline_based_measurement_unittest.py |
+++ b/tools/telemetry/telemetry/web_perf/timeline_based_measurement_unittest.py |
@@ -6,6 +6,7 @@ import os |
import unittest |
from telemetry import benchmark |
+from telemetry.core import platform |
from telemetry.core import wpr_modes |
from telemetry.page import page as page_module |
from telemetry.page import page_set |
@@ -178,11 +179,12 @@ class TimelineBasedMetricsTests(unittest.TestCase): |
class TestTimelinebasedMeasurementPage(page_module.Page): |
def __init__(self, ps, base_dir, trigger_animation=False, |
- trigger_jank=False): |
+ trigger_jank=False, trigger_slow=False): |
super(TestTimelinebasedMeasurementPage, self).__init__( |
'file://interaction_enabled_page.html', ps, base_dir) |
self._trigger_animation = trigger_animation |
self._trigger_jank = trigger_jank |
+ self._trigger_slow = trigger_slow |
def RunSmoothness(self, action_runner): |
if self._trigger_animation: |
@@ -191,6 +193,9 @@ class TestTimelinebasedMeasurementPage(page_module.Page): |
if self._trigger_jank: |
action_runner.TapElement('#jank-button') |
action_runner.WaitForJavaScriptCondition('window.jankScriptDone') |
+ if self._trigger_slow: |
+ action_runner.TapElement('#slow-button') |
+ action_runner.WaitForJavaScriptCondition('window.slowScriptDone') |
class TimelineBasedMeasurementTest(page_test_test_case.PageTestTestCase): |
@@ -214,6 +219,31 @@ class TimelineBasedMeasurementTest(page_test_test_case.PageTestTestCase): |
v = results.FindAllPageSpecificValuesNamed('DrawerAnimation-jank') |
self.assertEquals(len(v), 1) |
+ def testFastTimelineBasedMeasurementForSmoke(self): |
+ ps = self.CreateEmptyPageSet() |
+ ps.AddPage(TestTimelinebasedMeasurementPage( |
+ ps, ps.base_dir, trigger_slow=True)) |
+ |
+ measurement = tbm_module.TimelineBasedMeasurement() |
+ results = self.RunMeasurement(measurement, ps, options=self._options) |
+ |
+ self.assertEquals([], results.failures) |
+ expected_names = set([ |
+ 'SlowThreadJsRun-fast-duration', |
+ 'SlowThreadJsRun-fast-idle_time', |
+ ]) |
+ if platform.GetHostPlatform().GetOSName() != 'win': |
+ # CPU metric is only supported non-Windows platforms. |
+ expected_names.add('SlowThreadJsRun-fast-cpu_time') |
+ self.assertEquals( |
+ expected_names, set(v.name for v in results.all_page_specific_values)) |
+ |
+ # In interaction_enabled_page.html, the "slow" interaction executes |
+ # a loop with window.performance.now() to wait 200ms. |
+ # fast-duration measures wall time so its value should be at least 200ms. |
+ v = results.FindAllPageSpecificValuesNamed('SlowThreadJsRun-fast-duration') |
+ self.assertGreaterEqual(v[0].value, 200.0) |
+ |
# Disabled since mainthread_jank metric is not supported on windows platform. |
@benchmark.Disabled('win') |
def testMainthreadJankTimelineBasedMeasurement(self): |
@@ -228,11 +258,9 @@ class TimelineBasedMeasurementTest(page_test_test_case.PageTestTestCase): |
# In interaction_enabled_page.html, we create a jank loop based on |
# window.performance.now() (basically loop for x milliseconds). |
- # Since window.performance.now() uses wall-time |
- # instead of thread time, we set time to looping to 100ms in |
- # interaction_enabled_page.html and only assert the biggest jank > 50ms here |
- # to account for the fact that the browser may deschedule during the jank |
- # loop. |
+ # Since window.performance.now() uses wall-time instead of thread time, |
+ # we only assert the biggest jank > 50ms here to account for the fact |
+ # that the browser may deschedule during the jank loop. |
v = results.FindAllPageSpecificValuesNamed( |
'JankThreadJSRun-responsive-biggest_jank_thread_time') |
self.assertGreaterEqual(v[0].value, 50) |