Index: tools/perf/metrics/cpu.py |
diff --git a/tools/perf/metrics/cpu.py b/tools/perf/metrics/cpu.py |
index aa57b073078a791ea945e954f030c1c3cf9b3d9a..c813f86819302af8605bace1a76ec782ed1248b6 100644 |
--- a/tools/perf/metrics/cpu.py |
+++ b/tools/perf/metrics/cpu.py |
@@ -30,10 +30,26 @@ class CpuMetric(Metric): |
assert self._results, 'Must call Stop() first' |
# Add a result for each process type. |
for process_type in self._results: |
+ if process_type == 'Global': |
+ continue |
trace_name_for_process = '%s_%s' % (trace_name, process_type.lower()) |
cpu_percent = 100 * self._results[process_type] |
results.Add(trace_name_for_process, '%', cpu_percent, |
chart_name='cpu_utilization', data_type='unimportant') |
+ # Add a result for Global CPU stats: these are system-wide metrics, |
+ # not per process as the ones above. |
+ if 'Global' in self._results: |
+ total_time = 0.0 |
+ frequency_sum = 0.0 |
+ for frequency, time_in_state in \ |
+ self._results['Global']['GlobalCpuFrequencyStats'].iteritems(): |
+ frequency_sum += (frequency * time_in_state) |
+ total_time += time_in_state |
+ if total_time: |
+ results.Add('average_frequency_mhz', 'MHz', |
+ round((frequency_sum / total_time) / 1000000.0, 2), |
+ chart_name='cpu_frequency', |
+ data_type='unimportant') |
def _SubtractCpuStats(cpu_stats, start_cpu_stats): |
@@ -55,8 +71,10 @@ def _SubtractCpuStats(cpu_stats, start_cpu_stats): |
cpu_usage = {} |
for process_type in cpu_stats: |
assert process_type in start_cpu_stats, 'Mismatching process types' |
- # Skip any process_types that are empty. |
- if (not cpu_stats[process_type]) or (not start_cpu_stats[process_type]): |
+ # Skip any process_types that are empty or Global. |
+ if ((not cpu_stats[process_type]) or |
+ (not start_cpu_stats[process_type]) or |
+ process_type == 'Global'): |
continue |
cpu_process_time = (cpu_stats[process_type]['CpuProcessTime'] - |
start_cpu_stats[process_type]['CpuProcessTime']) |
@@ -64,5 +82,16 @@ def _SubtractCpuStats(cpu_stats, start_cpu_stats): |
start_cpu_stats[process_type]['TotalTime']) |
assert total_time > 0, 'Expected total_time > 0, was: %d' % total_time |
cpu_usage[process_type] = float(cpu_process_time) / total_time |
- return cpu_usage |
+ if 'Global' not in cpu_stats: |
+ return cpu_usage |
+ |
+ frequency_stats = cpu_stats['Global']['GlobalCpuFrequencyStats'] |
+ start_frequency_stats = start_cpu_stats['Global']['GlobalCpuFrequencyStats'] |
+ total_frequency_stats = {} |
+ for k in frequency_stats.iterkeys(): |
+ total_frequency_stats[k] = frequency_stats[k] - start_frequency_stats[k] |
+ |
+ cpu_usage['Global'] = {} |
+ cpu_usage['Global']['GlobalCpuFrequencyStats'] = total_frequency_stats |
+ return cpu_usage |