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', 'Interaction.LogicalName1/is_smooth', |
| 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', 'Interaction.LogicalName2/is_loading_resources', |
| 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 testFindTimelineInteractionRecords(self): |
| 43 metric = tbm_module._TimelineBasedMetrics( # pylint: disable=W0212 |
| 44 self.model, self.renderer_thread) |
| 45 interactions = metric.FindTimelineInteractionRecords() |
| 46 self.assertEquals(2, len(interactions)) |
| 47 self.assertTrue(interactions[0].is_smooth) |
| 48 self.assertEquals(0, interactions[0].start) |
| 49 self.assertEquals(20, interactions[0].end) |
| 50 |
| 51 self.assertTrue(interactions[1].is_loading_resources) |
| 52 self.assertEquals(25, interactions[1].start) |
| 53 self.assertEquals(30, interactions[1].end) |
| 54 |
| 55 def testAddResults(self): |
| 56 results = page_measurement_results.PageMeasurementResults() |
| 57 class FakeSmoothMetric(timeline_based_metric.TimelineBasedMetric): |
| 58 def AddResults(self, model, renderer_thread, |
| 59 interaction_record, results): |
| 60 results.Add( |
| 61 interaction_record.GetResultNameFor('FakeSmoothMetric'), 'ms', 1) |
| 62 |
| 63 class FakeLoadingMetric(timeline_based_metric.TimelineBasedMetric): |
| 64 def AddResults(self, model, renderer_thread, |
| 65 interaction_record, results): |
| 66 assert interaction_record.logical_name == 'LogicalName2' |
| 67 results.Add( |
| 68 interaction_record.GetResultNameFor('FakeLoadingMetric'), 'ms', 2) |
| 69 |
| 70 class TimelineBasedMetricsWithFakeMetricHandler( |
| 71 tbm_module._TimelineBasedMetrics): # pylint: disable=W0212 |
| 72 def CreateMetricsForTimelineInteractionRecord(self, interaction): |
| 73 res = [] |
| 74 if interaction.is_smooth: |
| 75 res.append(FakeSmoothMetric()) |
| 76 if interaction.is_loading_resources: |
| 77 res.append(FakeLoadingMetric()) |
| 78 return res |
| 79 |
| 80 metric = TimelineBasedMetricsWithFakeMetricHandler( |
| 81 self.model, self.renderer_thread) |
| 82 ps = page_set.PageSet.FromDict({ |
| 83 "description": "hello", |
| 84 "archive_path": "foo.wpr", |
| 85 "pages": [ |
| 86 {"url": "http://www.bar.com/"} |
| 87 ] |
| 88 }, os.path.dirname(__file__)) |
| 89 results.WillMeasurePage(ps.pages[0]) |
| 90 metric.AddResults(results) |
| 91 results.DidMeasurePage() |
| 92 |
| 93 v = results.FindAllPageSpecificValuesNamed('LogicalName1/FakeSmoothMetric') |
| 94 self.assertEquals(len(v), 1) |
| 95 v = results.FindAllPageSpecificValuesNamed('LogicalName2/FakeLoadingMetric') |
| 96 self.assertEquals(len(v), 1) |
| 97 |
| 98 |
| 99 class TimelineBasedMeasurementTest( |
| 100 page_measurement_unittest_base.PageMeasurementUnitTestBase): |
| 101 def setUp(self): |
| 102 self._options = options_for_unittests.GetCopy() |
| 103 self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF |
| 104 |
| 105 def testTimelineBasedForSmoke(self): |
| 106 ps = self.CreatePageSetFromFileInUnittestDataDir( |
| 107 'interaction_enabled_page.html') |
| 108 setattr(ps.pages[0], 'smoothness', {'action': 'wait', |
| 109 'javascript': 'window.animationDone'}) |
| 110 measurement = tbm_module.TimelineBasedMeasurement() |
| 111 results = self.RunMeasurement(measurement, ps, |
| 112 options=self._options) |
| 113 self.assertEquals(0, len(results.failures)) |
OLD | NEW |