OLD | NEW |
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 scalar | 9 from telemetry.value import scalar |
10 | 10 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 if (PowerMetric._quiescent_power_draw_mwh and | 105 if (PowerMetric._quiescent_power_draw_mwh and |
106 application_energy_consumption_mwh is None and | 106 application_energy_consumption_mwh is None and |
107 total_energy_consumption_mwh is not None): | 107 total_energy_consumption_mwh is not None): |
108 application_energy_consumption_mwh = max( | 108 application_energy_consumption_mwh = max( |
109 total_energy_consumption_mwh - PowerMetric._quiescent_power_draw_mwh, | 109 total_energy_consumption_mwh - PowerMetric._quiescent_power_draw_mwh, |
110 0) | 110 0) |
111 | 111 |
112 if total_energy_consumption_mwh is not None: | 112 if total_energy_consumption_mwh is not None: |
113 results.AddValue(scalar.ScalarValue( | 113 results.AddValue(scalar.ScalarValue( |
114 results.current_page, 'energy_consumption_mwh', 'mWh', | 114 results.current_page, 'energy_consumption_mwh', 'mWh', |
115 total_energy_consumption_mwh)) | 115 total_energy_consumption_mwh, higher_is_better=False)) |
116 | 116 |
117 if application_energy_consumption_mwh is not None: | 117 if application_energy_consumption_mwh is not None: |
118 results.AddValue(scalar.ScalarValue( | 118 results.AddValue(scalar.ScalarValue( |
119 results.current_page, 'application_energy_consumption_mwh', 'mWh', | 119 results.current_page, 'application_energy_consumption_mwh', 'mWh', |
120 application_energy_consumption_mwh)) | 120 application_energy_consumption_mwh, higher_is_better=False)) |
121 | 121 |
122 component_utilization = self._results.get('component_utilization', {}) | 122 component_utilization = self._results.get('component_utilization', {}) |
123 # GPU Frequency. | 123 # GPU Frequency. |
124 gpu_power = component_utilization.get('gpu', {}) | 124 gpu_power = component_utilization.get('gpu', {}) |
125 gpu_freq_hz = gpu_power.get('average_frequency_hz') | 125 gpu_freq_hz = gpu_power.get('average_frequency_hz') |
126 if gpu_freq_hz is not None: | 126 if gpu_freq_hz is not None: |
127 results.AddValue(scalar.ScalarValue( | 127 results.AddValue(scalar.ScalarValue( |
128 results.current_page, 'gpu_average_frequency_hz', 'hz', gpu_freq_hz, | 128 results.current_page, 'gpu_average_frequency_hz', 'hz', gpu_freq_hz, |
129 important=False)) | 129 important=False, higher_is_better=False)) |
130 | 130 |
131 # Add idle wakeup numbers for all processes. | 131 # Add idle wakeup numbers for all processes. |
132 for (process_type, stats) in self._results.get('cpu_stats', {}).items(): | 132 for (process_type, stats) in self._results.get('cpu_stats', {}).items(): |
133 trace_name_for_process = 'idle_wakeups_%s' % (process_type.lower()) | 133 trace_name_for_process = 'idle_wakeups_%s' % (process_type.lower()) |
134 results.AddValue(scalar.ScalarValue( | 134 results.AddValue(scalar.ScalarValue( |
135 results.current_page, trace_name_for_process, 'count', stats, | 135 results.current_page, trace_name_for_process, 'count', stats, |
136 important=False)) | 136 important=False, higher_is_better=False)) |
137 | 137 |
138 # Add temperature measurements. | 138 # Add temperature measurements. |
139 whole_package_utilization = component_utilization.get('whole_package', {}) | 139 whole_package_utilization = component_utilization.get('whole_package', {}) |
140 board_temperature_c = whole_package_utilization.get('average_temperature_c') | 140 board_temperature_c = whole_package_utilization.get('average_temperature_c') |
141 if board_temperature_c is not None: | 141 if board_temperature_c is not None: |
142 results.AddValue(scalar.ScalarValue( | 142 results.AddValue(scalar.ScalarValue( |
143 results.current_page, 'board_temperature', 'celsius', | 143 results.current_page, 'board_temperature', 'celsius', |
144 board_temperature_c, important=False)) | 144 board_temperature_c, important=False, higher_is_better=False)) |
145 | 145 |
146 # Add CPU frequency measurements. | 146 # Add CPU frequency measurements. |
147 frequency_hz = whole_package_utilization.get('frequency_percent') | 147 frequency_hz = whole_package_utilization.get('frequency_percent') |
148 if frequency_hz is not None: | 148 if frequency_hz is not None: |
149 frequency_sum = 0.0 | 149 frequency_sum = 0.0 |
150 for freq, percent in frequency_hz.iteritems(): | 150 for freq, percent in frequency_hz.iteritems(): |
151 frequency_sum += freq * (percent / 100.0) | 151 frequency_sum += freq * (percent / 100.0) |
152 results.AddValue(scalar.ScalarValue( | 152 results.AddValue(scalar.ScalarValue( |
153 results.current_page, 'cpu_average_frequency_hz', 'Hz', | 153 results.current_page, 'cpu_average_frequency_hz', 'Hz', |
154 frequency_sum, important=False)) | 154 frequency_sum, important=False, higher_is_better=False)) |
155 | 155 |
156 # Add CPU c-state residency measurements. | 156 # Add CPU c-state residency measurements. |
157 cstate_percent = whole_package_utilization.get('cstate_residency_percent') | 157 cstate_percent = whole_package_utilization.get('cstate_residency_percent') |
158 if cstate_percent is not None: | 158 if cstate_percent is not None: |
159 for state, percent in cstate_percent.iteritems(): | 159 for state, percent in cstate_percent.iteritems(): |
160 results.AddValue(scalar.ScalarValue( | 160 results.AddValue(scalar.ScalarValue( |
161 results.current_page, 'cpu_cstate_%s_residency_percent' % state, | 161 results.current_page, 'cpu_cstate_%s_residency_percent' % state, |
162 '%', percent, important=False)) | 162 '%', percent, important=False, higher_is_better=False)) |
163 | 163 |
164 self._results = None | 164 self._results = None |
165 | 165 |
166 def _SubtractCpuStats(cpu_stats, start_cpu_stats): | 166 def _SubtractCpuStats(cpu_stats, start_cpu_stats): |
167 """Computes number of idle wakeups that occurred over measurement period. | 167 """Computes number of idle wakeups that occurred over measurement period. |
168 | 168 |
169 Each of the two cpu_stats arguments is a dict as returned by the | 169 Each of the two cpu_stats arguments is a dict as returned by the |
170 Browser.cpu_stats call. | 170 Browser.cpu_stats call. |
171 | 171 |
172 Returns: | 172 Returns: |
(...skipping 13 matching lines...) Expand all Loading... |
186 continue | 186 continue |
187 | 187 |
188 assert isinstance(cpu_stats[process_type]['IdleWakeupCount'], | 188 assert isinstance(cpu_stats[process_type]['IdleWakeupCount'], |
189 process_statistic_timeline_data.IdleWakeupTimelineData) | 189 process_statistic_timeline_data.IdleWakeupTimelineData) |
190 idle_wakeup_delta = (cpu_stats[process_type]['IdleWakeupCount'] - | 190 idle_wakeup_delta = (cpu_stats[process_type]['IdleWakeupCount'] - |
191 start_cpu_stats[process_type]['IdleWakeupCount']) | 191 start_cpu_stats[process_type]['IdleWakeupCount']) |
192 cpu_delta[process_type] = idle_wakeup_delta.total_sum() | 192 cpu_delta[process_type] = idle_wakeup_delta.total_sum() |
193 total = total + cpu_delta[process_type] | 193 total = total + cpu_delta[process_type] |
194 cpu_delta['Total'] = total | 194 cpu_delta['Total'] = total |
195 return cpu_delta | 195 return cpu_delta |
OLD | NEW |