perf stat: Factor our shadow stats
Commit-ID: dcd9936a5a6d89512b5323c1145647f2dbe0236f Gitweb: http://git.kernel.org/tip/dcd9936a5a6d89512b5323c1145647f2dbe0236f Author: Ingo Molnar <[email protected]> AuthorDate: Wed, 27 Apr 2011 04:36:37 +0200 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 26 Apr 2011 20:04:56 +0200
perf stat: Factor our shadow stats
Create update_shadow_stats() which is then used in both read_counter_aggr() and read_counter().
This not only simplifies the code but also fixes a bug: HW_CACHE_REFERENCES was not updated in read_counter().
Acked-by Peter Zijlstra <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- tools/perf/builtin-stat.c | 33 +++++++++++++++++++-------------- 1 files changed, 19 insertions(+), 14 deletions(-)
tools/perf/builtin-stat.c +19 -14
@@ -194,6 +194,23 @@ static inline int nsec_counter(struct perf_evsel *evsel) }/* +* Update various tracking values we maintain to print +* more semantic information such as miss/hit ratios, +* instruction rates, etc: +*/ +static void update_shadow_stats (struct perf_evsel *counter,u64 *count) +{ +if (perf_evsel__match (counter,SOFTWARE ,SW_TASK_CLOCK )) +update_stats (&runtime_nsecs_stats[0 ], count[0 ]); +else if (perf_evsel__match (counter,HARDWARE ,HW_CPU_CYCLES )) +update_stats (&runtime_cycles_stats[0 ], count[0 ]); +else if (perf_evsel__match (counter,HARDWARE ,HW_BRANCH_INSTRUCTIONS )) +update_stats (&runtime_branches_stats[0 ], count[0 ]); +else if (perf_evsel__match (counter,HARDWARE ,HW_CACHE_REFERENCES )) +update_stats (&runtime_cacherefs_stats[0 ], count[0 ]); +} + +/* * Read out the results of a single counter: * aggregate counts across CPUs in system-wide mode */
@@ -218,14 +235,7 @@ static int read_counter_aggr(struct perf_evsel *counter)/* * Save the full runtime - to allow normalization during printout: */ -if (perf_evsel__match (counter,SOFTWARE ,SW_TASK_CLOCK )) -update_stats (&runtime_nsecs_stats[0 ], count[0 ]); -else if (perf_evsel__match (counter,HARDWARE ,HW_CPU_CYCLES )) -update_stats (&runtime_cycles_stats[0 ], count[0 ]); -else if (perf_evsel__match (counter,HARDWARE ,HW_BRANCH_INSTRUCTIONS )) -update_stats (&runtime_branches_stats[0 ], count[0 ]); -else if (perf_evsel__match (counter,HARDWARE ,HW_CACHE_REFERENCES )) -update_stats (&runtime_cacherefs_stats[0 ], count[0 ]); +update_shadow_stats (counter, count);return 0 ; }
@@ -245,12 +255,7 @@ static int read_counter(struct perf_evsel *counter) count = counter->counts->cpu[cpu].values; -if (perf_evsel__match (counter,SOFTWARE ,SW_TASK_CLOCK )) -update_stats (&runtime_nsecs_stats[cpu], count[0 ]); -if (perf_evsel__match (counter,HARDWARE ,HW_CPU_CYCLES )) -update_stats (&runtime_cycles_stats[cpu], count[0 ]); -if (perf_evsel__match (counter,HARDWARE ,HW_BRANCH_INSTRUCTIONS )) -update_stats (&runtime_branches_stats[cpu], count[0 ]); +update_shadow_stats (counter, count); }return 0 ;