OLD | NEW |
(Empty) | |
| 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 |
| 3 # found in the LICENSE file. |
| 4 |
| 5 import os |
| 6 import unittest |
| 7 |
| 8 from measurements import timeline_based_measurement as tbm_module |
| 9 from metrics import timeline_based_metric |
| 10 from telemetry.core import wpr_modes |
| 11 from telemetry.core.timeline import model as model_module |
| 12 from telemetry.core.timeline import async_slice |
| 13 from telemetry.page import page_measurement_results |
| 14 from telemetry.page import page_measurement_unittest_base |
| 15 from telemetry.page import page_set |
| 16 from telemetry.unittest import options_for_unittests |
| 17 |
| 18 class TimelineBasedMetricsTests(unittest.TestCase): |
| 19 def setUp(self): |
| 20 model = model_module.TimelineModel() |
| 21 renderer_thread = model.GetOrCreateProcess(1).GetOrCreateThread(2) |
| 22 renderer_thread.name = 'CrRendererMain' |
| 23 |
| 24 # [ X ] |
| 25 # [ Y ] |
| 26 renderer_thread.BeginSlice('cat1', 'x.y', 10, 0) |
| 27 renderer_thread.EndSlice(20, 20) |
| 28 |
| 29 renderer_thread.async_slices.append(async_slice.AsyncSlice( |
| 30 'cat', 'MetricRequest.LogicalName1/MetricType1', |
| 31 timestamp=0, duration=20, |
| 32 start_thread=renderer_thread, end_thread=renderer_thread)) |
| 33 renderer_thread.async_slices.append(async_slice.AsyncSlice( |
| 34 'cat', 'MetricRequest.LogicalName2/MetricType2', |
| 35 timestamp=25, duration=5, |
| 36 start_thread=renderer_thread, end_thread=renderer_thread)) |
| 37 model.FinalizeImport() |
| 38 |
| 39 self.model = model |
| 40 self.renderer_thread = renderer_thread |
| 41 |
| 42 def testFindTimelineMetricRequests(self): |
| 43 metric = tbm_module._TimelineBasedMetrics( # pylint: disable=W0212 |
| 44 self.model, self.renderer_thread) |
| 45 requests = metric.FindTimelineMetricRequests() |
| 46 self.assertEquals(2, len(requests)) |
| 47 self.assertEquals('MetricType1', requests[0].metric_type) |
| 48 self.assertEquals(0, requests[0].start) |
| 49 self.assertEquals(20, requests[0].end) |
| 50 |
| 51 self.assertEquals('MetricType2', requests[1].metric_type) |
| 52 self.assertEquals(25, requests[1].start) |
| 53 self.assertEquals(30, requests[1].end) |
| 54 |
| 55 def testAddResults(self): |
| 56 results = page_measurement_results.PageMeasurementResults() |
| 57 class Metric1(timeline_based_metric.TimelineBasedMetric): |
| 58 def AddResults(self, model, renderer_thread, |
| 59 metric_request, results): |
| 60 results.Add(metric_request.GetResultNameFor('Metric1'), 'ms', 1) |
| 61 |
| 62 class Metric2(timeline_based_metric.TimelineBasedMetric): |
| 63 def AddResults(self, model, renderer_thread, |
| 64 metric_request, results): |
| 65 assert metric_request.logical_name == 'LogicalName2' |
| 66 results.Add(metric_request.GetResultNameFor('Metric2'), 'ms', 2) |
| 67 |
| 68 class TimelineBasedMetricsWithFakeMetricHandler( |
| 69 tbm_module._TimelineBasedMetrics): # pylint: disable=W0212 |
| 70 def CreateMetricsForTimelineMetricRequest(self, request): |
| 71 cls = {'MetricType1': Metric1, |
| 72 'MetricType2': Metric2}[request.metric_type] |
| 73 return [cls()] |
| 74 |
| 75 metric = TimelineBasedMetricsWithFakeMetricHandler( |
| 76 self.model, self.renderer_thread) |
| 77 ps = page_set.PageSet.FromDict({ |
| 78 "description": "hello", |
| 79 "archive_path": "foo.wpr", |
| 80 "pages": [ |
| 81 {"url": "http://www.bar.com/"} |
| 82 ] |
| 83 }, os.path.dirname(__file__)) |
| 84 results.WillMeasurePage(ps.pages[0]) |
| 85 metric.AddResults(results) |
| 86 results.DidMeasurePage() |
| 87 |
| 88 v = results.FindAllPageSpecificValuesNamed('LogicalName1/Metric1') |
| 89 self.assertEquals(len(v), 1) |
| 90 v = results.FindAllPageSpecificValuesNamed('LogicalName2/Metric2') |
| 91 self.assertEquals(len(v), 1) |
| 92 |
| 93 |
| 94 class TimelineBasedMeasurementTest( |
| 95 page_measurement_unittest_base.PageMeasurementUnitTestBase): |
| 96 def setUp(self): |
| 97 self._options = options_for_unittests.GetCopy() |
| 98 self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF |
| 99 |
| 100 def testTimelineBasedForSmoke(self): |
| 101 ps = self.CreatePageSetFromFileInUnittestDataDir( |
| 102 'measurement_request_enabled_page.html') |
| 103 setattr(ps.pages[0], 'smoothness', {'action': 'wait', |
| 104 'javascript': 'window.animationDone'}) |
| 105 measurement = tbm_module.TimelineBasedMeasurement() |
| 106 results = self.RunMeasurement(measurement, ps, |
| 107 options=self._options) |
| 108 self.assertEquals(0, len(results.failures)) |
OLD | NEW |