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

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

Issue 501813002: [Telemetry] Fix idle wakeup reporting in the face of dead processes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 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 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 time 5 import time
6 6
7 from metrics import Metric 7 from metrics import Metric
8 from telemetry.core.platform import timeline_objects
8 from telemetry.value import scalar 9 from telemetry.value import scalar
9 10
10 11
11 class PowerMetric(Metric): 12 class PowerMetric(Metric):
12 """A metric for measuring power usage.""" 13 """A metric for measuring power usage."""
13 14
14 # System power draw while idle. 15 # System power draw while idle.
15 _quiescent_power_draw_mwh = 0 16 _quiescent_power_draw_mwh = 0
16 17
17 def __init__(self, browser, quiescent_measurement_time_s=0): 18 def __init__(self, browser, quiescent_measurement_time_s=0):
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 # Add CPU c-state residency measurements. 152 # Add CPU c-state residency measurements.
152 cstate_percent = whole_package_utilization.get('cstate_residency_percent') 153 cstate_percent = whole_package_utilization.get('cstate_residency_percent')
153 if cstate_percent is not None: 154 if cstate_percent is not None:
154 for state, percent in cstate_percent.iteritems(): 155 for state, percent in cstate_percent.iteritems():
155 results.AddValue(scalar.ScalarValue( 156 results.AddValue(scalar.ScalarValue(
156 results.current_page, 'cpu_cstate_%s_residency_percent' % state, 157 results.current_page, 'cpu_cstate_%s_residency_percent' % state,
157 '%', percent, important=False)) 158 '%', percent, important=False))
158 159
159 self._results = None 160 self._results = None
160 161
161 def _SubtractCpuStats(cpu_stats, start_cpu_stats): 162 def _SubtractCpuStats(cpu_stats, start_cpu_stats):
tonyg 2014/08/24 16:53:43 I was hoping this whole method would go away from
162 """Computes number of idle wakeups that occurred over measurement period. 163 """Computes number of idle wakeups that occurred over measurement period.
163 164
164 Each of the two cpu_stats arguments is a dict as returned by the 165 Each of the two cpu_stats arguments is a dict as returned by the
165 Browser.cpu_stats call. 166 Browser.cpu_stats call.
166 167
167 Returns: 168 Returns:
168 A dict of process type names (Browser, Renderer, etc.) to idle wakeup count 169 A dict of process type names (Browser, Renderer, etc.) to idle wakeup count
169 over the period recorded by the input. 170 over the period recorded by the input.
170 """ 171 """
171 cpu_delta = {} 172 cpu_delta = {}
172 for process_type in cpu_stats: 173 for process_type in cpu_stats:
173 assert process_type in start_cpu_stats, 'Mismatching process types' 174 assert process_type in start_cpu_stats, 'Mismatching process types'
174 # Skip any process_types that are empty. 175 # Skip any process_types that are empty.
175 if (not cpu_stats[process_type]) or (not start_cpu_stats[process_type]): 176 if (not cpu_stats[process_type]) or (not start_cpu_stats[process_type]):
176 continue 177 continue
177 # Skip if IdleWakeupCount is not present. 178 # Skip if IdleWakeupCount is not present.
178 if (('IdleWakeupCount' not in cpu_stats[process_type]) or 179 if (('IdleWakeupCount' not in cpu_stats[process_type]) or
179 ('IdleWakeupCount' not in start_cpu_stats[process_type])): 180 ('IdleWakeupCount' not in start_cpu_stats[process_type])):
180 continue 181 continue
182
183 # Verify that the IdleWakeupCount field has been converted to a
tonyg 2014/08/24 16:53:43 Let's just kill this comment. It answers "what" in
jeremy 2014/08/26 14:14:16 Done.
184 # TimlineData-based object.
185 assert isinstance(cpu_stats[process_type]['IdleWakeupCount'],
186 timeline_objects.IdleStatsData)
181 idle_wakeup_delta = (cpu_stats[process_type]['IdleWakeupCount'] - 187 idle_wakeup_delta = (cpu_stats[process_type]['IdleWakeupCount'] -
182 start_cpu_stats[process_type]['IdleWakeupCount']) 188 start_cpu_stats[process_type]['IdleWakeupCount'])
183 cpu_delta[process_type] = idle_wakeup_delta 189 cpu_delta[process_type] = idle_wakeup_delta.IdleWakeupCount()
184 return cpu_delta 190 return cpu_delta
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698