| 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
|
|
|