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

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: 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 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', '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))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698