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

Side by Side 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: ready for landing Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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))
OLDNEW
« no previous file with comments | « tools/perf/measurements/timeline_based_measurement.py ('k') | tools/perf/metrics/timeline_based_metric.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698