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

Side by Side Diff: tools/perf/metrics/timeline_unittest.py

Issue 139743018: Telemetry: Remove 'overhead' time from thread times measurement. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@TELEMETRY_fix_trace_import_precision
Patch Set: Rebase. 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
« no previous file with comments | « tools/perf/metrics/timeline.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import unittest 5 import unittest
6 6
7 from metrics import timeline 7 from metrics import timeline
8 from telemetry.core.timeline import bounds 8 from telemetry.core.timeline import bounds
9 from telemetry.core.timeline import model as model_module 9 from telemetry.core.timeline import model as model_module
10 from telemetry.page import page as page_module 10 from telemetry.page import page as page_module
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 84
85 85
86 class ThreadTimesTimelineMetricUnittest(unittest.TestCase): 86 class ThreadTimesTimelineMetricUnittest(unittest.TestCase):
87 def GetResultsForModel(self, metric, model): 87 def GetResultsForModel(self, metric, model):
88 metric.model = model 88 metric.model = model
89 results = TestPageMeasurementResults(self) 89 results = TestPageMeasurementResults(self)
90 tab = None 90 tab = None
91 metric.AddResults(tab, results) 91 metric.AddResults(tab, results)
92 return results 92 return results
93 93
94 def GetActionRange(self, start, end):
95 action_range = bounds.Bounds()
96 action_range.AddValue(start)
97 action_range.AddValue(end)
98 return action_range
99
100 def testResults(self):
101 model = model_module.TimelineModel()
102 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2)
103 renderer_main.name = 'CrRendererMain'
104
105 metric = timeline.ThreadTimesTimelineMetric()
106 metric._action_ranges = [self.GetActionRange(1, 2)]
107 metric.details_to_report = timeline.ReportMainThreadOnly
108 results = self.GetResultsForModel(metric, model)
109
110 # Test that all result thread categories exist
111 for name in timeline.TimelineThreadCategories.values():
112 results.GetPageSpecificValueNamed(timeline.ThreadTimeResultName(name))
113 results.GetPageSpecificValueNamed(timeline.ThreadCpuTimeResultName(name))
114
94 def testBasic(self): 115 def testBasic(self):
95 model = model_module.TimelineModel() 116 model = model_module.TimelineModel()
96 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) 117 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2)
97 renderer_main.name = 'CrRendererMain' 118 renderer_main.name = 'CrRendererMain'
98 119
99 # Create two frame swaps (Results times should be divided by two) 120 # Create two frame swaps (Results times should be divided by two)
100 cc_main = model.GetOrCreateProcess(1).GetOrCreateThread(3) 121 cc_main = model.GetOrCreateProcess(1).GetOrCreateThread(3)
101 cc_main.name = 'Compositor' 122 cc_main.name = 'Compositor'
102 cc_main.BeginSlice('cc_cat', timeline.CompositorFrameTraceName, 10, 10) 123 cc_main.BeginSlice('cc_cat', timeline.FrameTraceName, 10, 10)
103 cc_main.EndSlice(11, 11) 124 cc_main.EndSlice(11, 11)
104 cc_main.BeginSlice('cc_cat', timeline.CompositorFrameTraceName, 12, 12) 125 cc_main.BeginSlice('cc_cat', timeline.FrameTraceName, 12, 12)
105 cc_main.EndSlice(13, 13) 126 cc_main.EndSlice(13, 13)
106 127
107 # [ X ] [ Z ] 128 # [ X ] [ Z ]
108 # [ Y ] 129 # [ Y ]
109 renderer_main.BeginSlice('cat1', 'X', 10, 0) 130 renderer_main.BeginSlice('cat1', 'X', 10, 0)
110 renderer_main.BeginSlice('cat2', 'Y', 15, 5) 131 renderer_main.BeginSlice('cat2', 'Y', 15, 5)
111 renderer_main.EndSlice(16, 5.5) 132 renderer_main.EndSlice(16, 5.5)
112 renderer_main.EndSlice(30, 19.5) 133 renderer_main.EndSlice(30, 19.5)
113 renderer_main.BeginSlice('cat1', 'Z', 31, 20) 134 renderer_main.BeginSlice('cat1', 'Z', 31, 20)
114 renderer_main.BeginSlice('cat1', 'Z', 33, 21) 135 renderer_main.BeginSlice('cat1', 'Z', 33, 21)
115 model.FinalizeImport() 136 model.FinalizeImport()
116 137
117 # Exclude Z using an action-range. 138 # Exclude 'Z' using an action-range.
118 action_range = bounds.Bounds()
119 action_range.AddValue(10)
120 action_range.AddValue(30)
121
122 metric = timeline.ThreadTimesTimelineMetric() 139 metric = timeline.ThreadTimesTimelineMetric()
123 metric._action_ranges = [action_range] 140 metric._action_ranges = [self.GetActionRange(10, 30)]
124 metric.details_to_report = timeline.MainThread 141 metric.details_to_report = timeline.ReportMainThreadOnly
125 results = self.GetResultsForModel(metric, model) 142 results = self.GetResultsForModel(metric, model)
126 143
127 # Test that all categories exist
128 for name in timeline.TimelineThreadCategories.values():
129 results.GetPageSpecificValueNamed(timeline.ThreadTimeResultName(name))
130 results.GetPageSpecificValueNamed(timeline.ThreadCpuTimeResultName(name))
131
132 # Test a couple specific results. 144 # Test a couple specific results.
133 assert_results = { 145 assert_results = {
134 timeline.ThreadTimeResultName('renderer_main') : 10, 146 timeline.ThreadTimeResultName('renderer_main') : 10,
135 timeline.ThreadDetailResultName('renderer_main','cat1') : 9.5, 147 timeline.ThreadDetailResultName('renderer_main','cat1') : 9.5,
136 timeline.ThreadDetailResultName('renderer_main','cat2') : 0.5, 148 timeline.ThreadDetailResultName('renderer_main','cat2') : 0.5,
137 timeline.ThreadDetailResultName('renderer_main','idle') : 0 149 timeline.ThreadDetailResultName('renderer_main','idle') : 0
138 } 150 }
139 for name, value in assert_results.iteritems(): 151 for name, value in assert_results.iteritems():
140 results.AssertHasPageSpecificScalarValue(name, 'ms', value) 152 results.AssertHasPageSpecificScalarValue(name, 'ms', value)
153
154 def testOverheadIsRemoved(self):
155 model = model_module.TimelineModel()
156 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2)
157 renderer_main.name = 'CrRendererMain'
158
159 # Create one frame swap.
160 cc_main = model.GetOrCreateProcess(1).GetOrCreateThread(3)
161 cc_main.name = 'Compositor'
162 cc_main.BeginSlice('cc_cat', timeline.FrameTraceName, 10, 10)
163 cc_main.EndSlice(11, 11)
164
165 # [ X ]
166 # [Overhead]
167 overhead_category = timeline.OverheadTraceCategory
168 overhead_name = timeline.OverheadTraceName
169 renderer_main.BeginSlice('cat1', 'X', 10, 0)
170 renderer_main.BeginSlice(overhead_category, overhead_name, 15, 5)
171 renderer_main.EndSlice(16, 6)
172 renderer_main.EndSlice(30, 10)
173 model.FinalizeImport()
174
175 # Include everything in an action-range.
176 metric = timeline.ThreadTimesTimelineMetric()
177 metric._action_ranges = [self.GetActionRange(10, 30)]
178 metric.details_to_report = timeline.ReportMainThreadOnly
179 results = self.GetResultsForModel(metric, model)
180
181 # Test a couple specific results.
182 assert_results = {
183 timeline.ThreadTimeResultName('renderer_main') : 19,
184 timeline.ThreadCpuTimeResultName('renderer_main') : 9.0,
185 }
186 for name, value in assert_results.iteritems():
187 results.AssertHasPageSpecificScalarValue(name, 'ms', value)
OLDNEW
« no previous file with comments | « tools/perf/metrics/timeline.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698