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

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

Issue 809393002: Added support for improvement_direction to relevant values, which is propogated to chartjson. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix linter issues Created 5 years, 11 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 process_statistic_timeline_data 8 from telemetry.core.platform import process_statistic_timeline_data
9 from telemetry.value import improvement_direction
9 from telemetry.value import scalar 10 from telemetry.value import scalar
10 11
11 12
12 class PowerMetric(Metric): 13 class PowerMetric(Metric):
13 """A metric for measuring power usage.""" 14 """A metric for measuring power usage."""
14 15
15 # System power draw while idle. 16 # System power draw while idle.
16 _quiescent_power_draw_mwh = 0 17 _quiescent_power_draw_mwh = 0
17 18
18 def __init__(self, platform, quiescent_measurement_time_s=0): 19 def __init__(self, platform, quiescent_measurement_time_s=0):
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 if (PowerMetric._quiescent_power_draw_mwh and 106 if (PowerMetric._quiescent_power_draw_mwh and
106 application_energy_consumption_mwh is None and 107 application_energy_consumption_mwh is None and
107 total_energy_consumption_mwh is not None): 108 total_energy_consumption_mwh is not None):
108 application_energy_consumption_mwh = max( 109 application_energy_consumption_mwh = max(
109 total_energy_consumption_mwh - PowerMetric._quiescent_power_draw_mwh, 110 total_energy_consumption_mwh - PowerMetric._quiescent_power_draw_mwh,
110 0) 111 0)
111 112
112 if total_energy_consumption_mwh is not None: 113 if total_energy_consumption_mwh is not None:
113 results.AddValue(scalar.ScalarValue( 114 results.AddValue(scalar.ScalarValue(
114 results.current_page, 'energy_consumption_mwh', 'mWh', 115 results.current_page, 'energy_consumption_mwh', 'mWh',
115 total_energy_consumption_mwh)) 116 total_energy_consumption_mwh,
117 improvement_direction=improvement_direction.DOWN))
116 118
117 if application_energy_consumption_mwh is not None: 119 if application_energy_consumption_mwh is not None:
118 results.AddValue(scalar.ScalarValue( 120 results.AddValue(scalar.ScalarValue(
119 results.current_page, 'application_energy_consumption_mwh', 'mWh', 121 results.current_page, 'application_energy_consumption_mwh', 'mWh',
120 application_energy_consumption_mwh)) 122 application_energy_consumption_mwh,
123 improvement_direction=improvement_direction.DOWN))
121 124
122 component_utilization = self._results.get('component_utilization', {}) 125 component_utilization = self._results.get('component_utilization', {})
123 # GPU Frequency. 126 # GPU Frequency.
124 gpu_power = component_utilization.get('gpu', {}) 127 gpu_power = component_utilization.get('gpu', {})
125 gpu_freq_hz = gpu_power.get('average_frequency_hz') 128 gpu_freq_hz = gpu_power.get('average_frequency_hz')
126 if gpu_freq_hz is not None: 129 if gpu_freq_hz is not None:
127 results.AddValue(scalar.ScalarValue( 130 results.AddValue(scalar.ScalarValue(
128 results.current_page, 'gpu_average_frequency_hz', 'hz', gpu_freq_hz, 131 results.current_page, 'gpu_average_frequency_hz', 'hz', gpu_freq_hz,
129 important=False)) 132 important=False, improvement_direction=improvement_direction.DOWN))
130 133
131 # Add idle wakeup numbers for all processes. 134 # Add idle wakeup numbers for all processes.
132 for (process_type, stats) in self._results.get('cpu_stats', {}).items(): 135 for (process_type, stats) in self._results.get('cpu_stats', {}).items():
133 trace_name_for_process = 'idle_wakeups_%s' % (process_type.lower()) 136 trace_name_for_process = 'idle_wakeups_%s' % (process_type.lower())
134 results.AddValue(scalar.ScalarValue( 137 results.AddValue(scalar.ScalarValue(
135 results.current_page, trace_name_for_process, 'count', stats, 138 results.current_page, trace_name_for_process, 'count', stats,
136 important=False)) 139 important=False, improvement_direction=improvement_direction.DOWN))
137 140
138 # Add temperature measurements. 141 # Add temperature measurements.
139 whole_package_utilization = component_utilization.get('whole_package', {}) 142 whole_package_utilization = component_utilization.get('whole_package', {})
140 board_temperature_c = whole_package_utilization.get('average_temperature_c') 143 board_temperature_c = whole_package_utilization.get('average_temperature_c')
141 if board_temperature_c is not None: 144 if board_temperature_c is not None:
142 results.AddValue(scalar.ScalarValue( 145 results.AddValue(scalar.ScalarValue(
143 results.current_page, 'board_temperature', 'celsius', 146 results.current_page, 'board_temperature', 'celsius',
144 board_temperature_c, important=False)) 147 board_temperature_c, important=False,
148 improvement_direction=improvement_direction.DOWN))
145 149
146 # Add CPU frequency measurements. 150 # Add CPU frequency measurements.
147 frequency_hz = whole_package_utilization.get('frequency_percent') 151 frequency_hz = whole_package_utilization.get('frequency_percent')
148 if frequency_hz is not None: 152 if frequency_hz is not None:
149 frequency_sum = 0.0 153 frequency_sum = 0.0
150 for freq, percent in frequency_hz.iteritems(): 154 for freq, percent in frequency_hz.iteritems():
151 frequency_sum += freq * (percent / 100.0) 155 frequency_sum += freq * (percent / 100.0)
152 results.AddValue(scalar.ScalarValue( 156 results.AddValue(scalar.ScalarValue(
153 results.current_page, 'cpu_average_frequency_hz', 'Hz', 157 results.current_page, 'cpu_average_frequency_hz', 'Hz',
154 frequency_sum, important=False)) 158 frequency_sum, important=False,
159 improvement_direction=improvement_direction.DOWN))
155 160
156 # Add CPU c-state residency measurements. 161 # Add CPU c-state residency measurements.
157 cstate_percent = whole_package_utilization.get('cstate_residency_percent') 162 cstate_percent = whole_package_utilization.get('cstate_residency_percent')
158 if cstate_percent is not None: 163 if cstate_percent is not None:
159 for state, percent in cstate_percent.iteritems(): 164 for state, percent in cstate_percent.iteritems():
160 results.AddValue(scalar.ScalarValue( 165 results.AddValue(scalar.ScalarValue(
161 results.current_page, 'cpu_cstate_%s_residency_percent' % state, 166 results.current_page, 'cpu_cstate_%s_residency_percent' % state,
162 '%', percent, important=False)) 167 '%', percent, important=False,
168 improvement_direction=improvement_direction.DOWN))
163 169
164 self._results = None 170 self._results = None
165 171
166 def _SubtractCpuStats(cpu_stats, start_cpu_stats): 172 def _SubtractCpuStats(cpu_stats, start_cpu_stats):
167 """Computes number of idle wakeups that occurred over measurement period. 173 """Computes number of idle wakeups that occurred over measurement period.
168 174
169 Each of the two cpu_stats arguments is a dict as returned by the 175 Each of the two cpu_stats arguments is a dict as returned by the
170 Browser.cpu_stats call. 176 Browser.cpu_stats call.
171 177
172 Returns: 178 Returns:
(...skipping 13 matching lines...) Expand all
186 continue 192 continue
187 193
188 assert isinstance(cpu_stats[process_type]['IdleWakeupCount'], 194 assert isinstance(cpu_stats[process_type]['IdleWakeupCount'],
189 process_statistic_timeline_data.IdleWakeupTimelineData) 195 process_statistic_timeline_data.IdleWakeupTimelineData)
190 idle_wakeup_delta = (cpu_stats[process_type]['IdleWakeupCount'] - 196 idle_wakeup_delta = (cpu_stats[process_type]['IdleWakeupCount'] -
191 start_cpu_stats[process_type]['IdleWakeupCount']) 197 start_cpu_stats[process_type]['IdleWakeupCount'])
192 cpu_delta[process_type] = idle_wakeup_delta.total_sum() 198 cpu_delta[process_type] = idle_wakeup_delta.total_sum()
193 total = total + cpu_delta[process_type] 199 total = total + cpu_delta[process_type]
194 cpu_delta['Total'] = total 200 cpu_delta['Total'] = total
195 return cpu_delta 201 return cpu_delta
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698