Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(393)

Unified Diff: tools/perf/measurements/timeline_based_measurement_unittest.py

Issue 165673008: [telemetry] Implement first version of timeline based measurement (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..af1e9c8833410bbb8254bc62a7cd6f21789d8218
--- /dev/null
+++ b/tools/perf/measurements/timeline_based_measurement_unittest.py
@@ -0,0 +1,108 @@
+# 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', 'MetricRequest.LogicalName1/MetricType1',
+ timestamp=0, duration=20,
+ start_thread=renderer_thread, end_thread=renderer_thread))
+ renderer_thread.async_slices.append(async_slice.AsyncSlice(
+ 'cat', 'MetricRequest.LogicalName2/MetricType2',
+ timestamp=25, duration=5,
+ start_thread=renderer_thread, end_thread=renderer_thread))
+ model.FinalizeImport()
+
+ self.model = model
+ self.renderer_thread = renderer_thread
+
+ def testFindTimelineMetricRequests(self):
+ metric = tbm_module._TimelineBasedMetrics( # pylint: disable=W0212
+ self.model, self.renderer_thread)
+ requests = metric.FindTimelineMetricRequests()
+ self.assertEquals(2, len(requests))
+ self.assertEquals('MetricType1', requests[0].metric_type)
+ self.assertEquals(0, requests[0].start)
+ self.assertEquals(20, requests[0].end)
+
+ self.assertEquals('MetricType2', requests[1].metric_type)
+ self.assertEquals(25, requests[1].start)
+ self.assertEquals(30, requests[1].end)
+
+ def testAddResults(self):
+ results = page_measurement_results.PageMeasurementResults()
+ class Metric1(timeline_based_metric.TimelineBasedMetric):
+ def AddResults(self, model, renderer_thread,
+ metric_request, results):
+ results.Add(metric_request.GetResultNameFor('Metric1'), 'ms', 1)
+
+ class Metric2(timeline_based_metric.TimelineBasedMetric):
+ def AddResults(self, model, renderer_thread,
+ metric_request, results):
+ assert metric_request.logical_name == 'LogicalName2'
+ results.Add(metric_request.GetResultNameFor('Metric2'), 'ms', 2)
+
+ class TimelineBasedMetricsWithFakeMetricHandler(
+ tbm_module._TimelineBasedMetrics): # pylint: disable=W0212
+ def CreateMetricsForTimelineMetricRequest(self, request):
+ cls = {'MetricType1': Metric1,
+ 'MetricType2': Metric2}[request.metric_type]
+ return [cls()]
+
+ 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/Metric1')
+ self.assertEquals(len(v), 1)
+ v = results.FindAllPageSpecificValuesNamed('LogicalName2/Metric2')
+ 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(
+ 'measurement_request_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))

Powered by Google App Engine
This is Rietveld 408576698