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 5051f47485c7aa762cec9d13b4a3d14c5b0ed56e..99444fbd0f1e99da566fd17e290e842a9380d3bf 100644 |
--- a/tools/telemetry/telemetry/web_perf/timeline_based_measurement_unittest.py |
+++ b/tools/telemetry/telemetry/web_perf/timeline_based_measurement_unittest.py |
@@ -12,11 +12,16 @@ from telemetry.core.timeline import async_slice |
from telemetry.page import page_measurement_results |
from telemetry.page import page_measurement_unittest_base |
from telemetry.page import page_set |
+from telemetry.page import page as page_module |
+# pylint: disable=W0401,W0614 |
+from telemetry.page.actions.all_page_actions import * |
from telemetry.unittest import options_for_unittests |
from telemetry.web_perf import timeline_based_measurement as tbm_module |
from telemetry.web_perf.metrics import timeline_based_metric |
+ |
class TimelineBasedMetricsTests(unittest.TestCase): |
+ |
def setUp(self): |
model = model_module.TimelineModel() |
renderer_thread = model.GetOrCreateProcess(1).GetOrCreateThread(2) |
@@ -43,8 +48,8 @@ class TimelineBasedMetricsTests(unittest.TestCase): |
self.renderer_thread = renderer_thread |
def testFindTimelineInteractionRecords(self): |
- metric = tbm_module._TimelineBasedMetrics( # pylint: disable=W0212 |
- self.model, self.renderer_thread, lambda _: [] ) |
+ metric = tbm_module._TimelineBasedMetrics( # pylint: disable=W0212 |
+ self.model, self.renderer_thread, lambda _: []) |
interactions = metric.FindTimelineInteractionRecords() |
self.assertEquals(2, len(interactions)) |
self.assertTrue(interactions[0].is_smooth) |
@@ -57,12 +62,15 @@ class TimelineBasedMetricsTests(unittest.TestCase): |
def testAddResults(self): |
results = page_measurement_results.PageMeasurementResults() |
+ |
class FakeSmoothMetric(timeline_based_metric.TimelineBasedMetric): |
+ |
def AddResults(self, model, renderer_thread, |
interaction_records, results): |
results.Add('FakeSmoothMetric', 'ms', 1) |
class FakeLoadingMetric(timeline_based_metric.TimelineBasedMetric): |
+ |
def AddResults(self, model, renderer_thread, |
interaction_records, results): |
for r in interaction_records: |
@@ -77,7 +85,7 @@ class TimelineBasedMetricsTests(unittest.TestCase): |
res.append(FakeLoadingMetric()) |
return res |
- metric = tbm_module._TimelineBasedMetrics( # pylint: disable=W0212 |
+ metric = tbm_module._TimelineBasedMetrics( # pylint: disable=W0212 |
self.model, self.renderer_thread, |
CreateMetricsForTimelineInteractionRecord) |
ps = page_set.PageSet(file_path=os.path.dirname(__file__)) |
@@ -93,19 +101,33 @@ class TimelineBasedMetricsTests(unittest.TestCase): |
self.assertEquals(len(v), 1) |
+class TestTimelinebasedMeasurementPage(page_module.Page): |
+ |
+ def __init__(self, ps, base_dir): |
+ super(TestTimelinebasedMeasurementPage, self).__init__( |
+ 'file://interaction_enabled_page.html', ps, base_dir) |
+ |
+ def RunSmoothness(self, action_runner): |
+ action_runner.RunAction(WaitAction({'seconds': 2})) |
+ action_runner.RunAction(TapAction( |
+ {'selector': '#drawer', 'automatically_record_interaction': False})) |
+ action_runner.RunAction(WaitAction({'seconds': 1})) |
+ |
+ |
class TimelineBasedMeasurementTest( |
- page_measurement_unittest_base.PageMeasurementUnitTestBase): |
+ page_measurement_unittest_base.PageMeasurementUnitTestBase): |
+ |
def setUp(self): |
self._options = options_for_unittests.GetCopy() |
self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF |
# Disabled due to flakiness: crbug.com/368386 |
@test.Disabled |
- def testTimelineBasedForSmoke(self): |
+ def testSmoothnessTimelineBasedMeasurementForSmoke(self): |
ps = self.CreatePageSetFromFileInUnittestDataDir( |
'interaction_enabled_page.html') |
- setattr(ps.pages[0], 'RunSmoothness', {'action': 'wait', |
- 'javascript': 'window.animationDone'}) |
+ setattr(ps.pages[0], 'RunSmoothness', { |
+ 'action': 'wait', 'javascript': 'window.animationDone'}) |
measurement = tbm_module.TimelineBasedMeasurement() |
results = self.RunMeasurement(measurement, ps, |
options=self._options) |
@@ -115,3 +137,28 @@ class TimelineBasedMeasurementTest( |
v = results.FindAllPageSpecificValuesNamed('DrawerAnimation-jank') |
self.assertEquals(len(v), 1) |
+ # Disabled since mainthread_jank metric is not supported on windows platform. |
+ @test.Disabled('win') |
+ def testMainthreadJankTimelineBasedMeasurement(self): |
+ ps = self.CreateEmptyPageSet() |
+ ps.AddPage(TestTimelinebasedMeasurementPage(ps, ps.base_dir)) |
+ |
+ measurement = tbm_module.TimelineBasedMeasurement() |
+ results = self.RunMeasurement(measurement, ps, |
+ options=self._options) |
+ self.assertEquals(0, len(results.failures)) |
+ |
+ # 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. |
+ v = results.FindAllPageSpecificValuesNamed( |
+ 'JankThreadJSRun-responsive-biggest_jank_thread_time') |
+ self.assertGreaterEqual(v[0].value, 50) |
+ |
+ v = results.FindAllPageSpecificValuesNamed( |
+ 'JankThreadJSRun-responsive-total_big_jank_thread_time') |
+ self.assertGreaterEqual(v[0].value, 50) |