| Index: tools/perf/measurements/timeline_based_measurement_unittest.py
|
| diff --git a/tools/perf/measurements/timeline_based_measurement_unittest.py b/tools/perf/measurements/timeline_based_measurement_unittest.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8c7959375a5829ad0864aef49d88fb3f04a4dd7b
|
| --- /dev/null
|
| +++ b/tools/perf/measurements/timeline_based_measurement_unittest.py
|
| @@ -0,0 +1,113 @@
|
| +# Copyright 2014 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import os
|
| +import unittest
|
| +
|
| +from measurements import timeline_based_measurement as tbm_module
|
| +from metrics import timeline_based_metric
|
| +from telemetry.core import wpr_modes
|
| +from telemetry.core.timeline import model as model_module
|
| +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.unittest import options_for_unittests
|
| +
|
| +class TimelineBasedMetricsTests(unittest.TestCase):
|
| + def setUp(self):
|
| + model = model_module.TimelineModel()
|
| + renderer_thread = model.GetOrCreateProcess(1).GetOrCreateThread(2)
|
| + renderer_thread.name = 'CrRendererMain'
|
| +
|
| + # [ X ]
|
| + # [ Y ]
|
| + renderer_thread.BeginSlice('cat1', 'x.y', 10, 0)
|
| + renderer_thread.EndSlice(20, 20)
|
| +
|
| + renderer_thread.async_slices.append(async_slice.AsyncSlice(
|
| + 'cat', 'Interaction.LogicalName1/is_smooth',
|
| + timestamp=0, duration=20,
|
| + start_thread=renderer_thread, end_thread=renderer_thread))
|
| + renderer_thread.async_slices.append(async_slice.AsyncSlice(
|
| + 'cat', 'Interaction.LogicalName2/is_loading_resources',
|
| + timestamp=25, duration=5,
|
| + start_thread=renderer_thread, end_thread=renderer_thread))
|
| + model.FinalizeImport()
|
| +
|
| + self.model = model
|
| + self.renderer_thread = renderer_thread
|
| +
|
| + def testFindTimelineInteractionRecords(self):
|
| + metric = tbm_module._TimelineBasedMetrics( # pylint: disable=W0212
|
| + self.model, self.renderer_thread)
|
| + interactions = metric.FindTimelineInteractionRecords()
|
| + self.assertEquals(2, len(interactions))
|
| + self.assertTrue(interactions[0].is_smooth)
|
| + self.assertEquals(0, interactions[0].start)
|
| + self.assertEquals(20, interactions[0].end)
|
| +
|
| + self.assertTrue(interactions[1].is_loading_resources)
|
| + self.assertEquals(25, interactions[1].start)
|
| + self.assertEquals(30, interactions[1].end)
|
| +
|
| + def testAddResults(self):
|
| + results = page_measurement_results.PageMeasurementResults()
|
| + class FakeSmoothMetric(timeline_based_metric.TimelineBasedMetric):
|
| + def AddResults(self, model, renderer_thread,
|
| + interaction_record, results):
|
| + results.Add(
|
| + interaction_record.GetResultNameFor('FakeSmoothMetric'), 'ms', 1)
|
| +
|
| + class FakeLoadingMetric(timeline_based_metric.TimelineBasedMetric):
|
| + def AddResults(self, model, renderer_thread,
|
| + interaction_record, results):
|
| + assert interaction_record.logical_name == 'LogicalName2'
|
| + results.Add(
|
| + interaction_record.GetResultNameFor('FakeLoadingMetric'), 'ms', 2)
|
| +
|
| + class TimelineBasedMetricsWithFakeMetricHandler(
|
| + tbm_module._TimelineBasedMetrics): # pylint: disable=W0212
|
| + def CreateMetricsForTimelineInteractionRecord(self, interaction):
|
| + res = []
|
| + if interaction.is_smooth:
|
| + res.append(FakeSmoothMetric())
|
| + if interaction.is_loading_resources:
|
| + res.append(FakeLoadingMetric())
|
| + return res
|
| +
|
| + metric = TimelineBasedMetricsWithFakeMetricHandler(
|
| + self.model, self.renderer_thread)
|
| + ps = page_set.PageSet.FromDict({
|
| + "description": "hello",
|
| + "archive_path": "foo.wpr",
|
| + "pages": [
|
| + {"url": "http://www.bar.com/"}
|
| + ]
|
| + }, os.path.dirname(__file__))
|
| + results.WillMeasurePage(ps.pages[0])
|
| + metric.AddResults(results)
|
| + results.DidMeasurePage()
|
| +
|
| + v = results.FindAllPageSpecificValuesNamed('LogicalName1/FakeSmoothMetric')
|
| + self.assertEquals(len(v), 1)
|
| + v = results.FindAllPageSpecificValuesNamed('LogicalName2/FakeLoadingMetric')
|
| + self.assertEquals(len(v), 1)
|
| +
|
| +
|
| +class TimelineBasedMeasurementTest(
|
| + page_measurement_unittest_base.PageMeasurementUnitTestBase):
|
| + def setUp(self):
|
| + self._options = options_for_unittests.GetCopy()
|
| + self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF
|
| +
|
| + def testTimelineBasedForSmoke(self):
|
| + ps = self.CreatePageSetFromFileInUnittestDataDir(
|
| + 'interaction_enabled_page.html')
|
| + setattr(ps.pages[0], 'smoothness', {'action': 'wait',
|
| + 'javascript': 'window.animationDone'})
|
| + measurement = tbm_module.TimelineBasedMeasurement()
|
| + results = self.RunMeasurement(measurement, ps,
|
| + options=self._options)
|
| + self.assertEquals(0, len(results.failures))
|
|
|