diff options
| author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-01-03 13:49:44 -0500 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-01-03 13:49:44 -0500 |
| commit | daec78a09de3df5fbfbbd167da0304d49d7fcfe5 (patch) | |
| tree | 6ad4b3450f70e6f8bb99f19a9c6342b18661748d /tools | |
| parent | 69aad6f1ee69546dea8535ab8f3da9f445d57328 (diff) | |
perf evsel: Adopt MATCH_EVENT macro from 'stat'
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/perf/builtin-stat.c | 37 | ||||
| -rw-r--r-- | tools/perf/util/evsel.h | 4 |
2 files changed, 20 insertions, 21 deletions
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 511ebaff9a66..3e5f356a5241 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
| @@ -170,10 +170,6 @@ struct stats runtime_cycles_stats[MAX_NR_CPUS]; | |||
| 170 | struct stats runtime_branches_stats[MAX_NR_CPUS]; | 170 | struct stats runtime_branches_stats[MAX_NR_CPUS]; |
| 171 | struct stats walltime_nsecs_stats; | 171 | struct stats walltime_nsecs_stats; |
| 172 | 172 | ||
| 173 | #define MATCH_EVENT(t, c, evsel) \ | ||
| 174 | (evsel->attr.type == PERF_TYPE_##t && \ | ||
| 175 | evsel->attr.config == PERF_COUNT_##c) | ||
| 176 | |||
| 177 | #define ERR_PERF_OPEN \ | 173 | #define ERR_PERF_OPEN \ |
| 178 | "counter %d, sys_perf_event_open() syscall returned with %d (%s). /bin/dmesg may provide additional information." | 174 | "counter %d, sys_perf_event_open() syscall returned with %d (%s). /bin/dmesg may provide additional information." |
| 179 | 175 | ||
| @@ -229,10 +225,10 @@ static int create_perf_stat_counter(struct perf_evsel *evsel, bool *perm_err) | |||
| 229 | /* | 225 | /* |
| 230 | * Does the counter have nsecs as a unit? | 226 | * Does the counter have nsecs as a unit? |
| 231 | */ | 227 | */ |
| 232 | static inline int nsec_counter(struct perf_evsel *counter) | 228 | static inline int nsec_counter(struct perf_evsel *evsel) |
| 233 | { | 229 | { |
| 234 | if (MATCH_EVENT(SOFTWARE, SW_CPU_CLOCK, counter) || | 230 | if (perf_evsel__match(evsel, SOFTWARE, SW_CPU_CLOCK) || |
| 235 | MATCH_EVENT(SOFTWARE, SW_TASK_CLOCK, counter)) | 231 | perf_evsel__match(evsel, SOFTWARE, SW_TASK_CLOCK)) |
| 236 | return 1; | 232 | return 1; |
| 237 | 233 | ||
| 238 | return 0; | 234 | return 0; |
| @@ -300,11 +296,11 @@ static void read_counter_aggr(struct perf_evsel *counter) | |||
| 300 | /* | 296 | /* |
| 301 | * Save the full runtime - to allow normalization during printout: | 297 | * Save the full runtime - to allow normalization during printout: |
| 302 | */ | 298 | */ |
| 303 | if (MATCH_EVENT(SOFTWARE, SW_TASK_CLOCK, counter)) | 299 | if (perf_evsel__match(counter, SOFTWARE, SW_TASK_CLOCK)) |
| 304 | update_stats(&runtime_nsecs_stats[0], count[0]); | 300 | update_stats(&runtime_nsecs_stats[0], count[0]); |
| 305 | if (MATCH_EVENT(HARDWARE, HW_CPU_CYCLES, counter)) | 301 | if (perf_evsel__match(counter, HARDWARE, HW_CPU_CYCLES)) |
| 306 | update_stats(&runtime_cycles_stats[0], count[0]); | 302 | update_stats(&runtime_cycles_stats[0], count[0]); |
| 307 | if (MATCH_EVENT(HARDWARE, HW_BRANCH_INSTRUCTIONS, counter)) | 303 | if (perf_evsel__match(counter, HARDWARE, HW_BRANCH_INSTRUCTIONS)) |
| 308 | update_stats(&runtime_branches_stats[0], count[0]); | 304 | update_stats(&runtime_branches_stats[0], count[0]); |
| 309 | } | 305 | } |
| 310 | 306 | ||
| @@ -347,11 +343,11 @@ static void read_counter(struct perf_evsel *counter) | |||
| 347 | cpu_counts[cpu].ena = count[1]; | 343 | cpu_counts[cpu].ena = count[1]; |
| 348 | cpu_counts[cpu].run = count[2]; | 344 | cpu_counts[cpu].run = count[2]; |
| 349 | 345 | ||
| 350 | if (MATCH_EVENT(SOFTWARE, SW_TASK_CLOCK, counter)) | 346 | if (perf_evsel__match(counter, SOFTWARE, SW_TASK_CLOCK)) |
| 351 | update_stats(&runtime_nsecs_stats[cpu], count[0]); | 347 | update_stats(&runtime_nsecs_stats[cpu], count[0]); |
| 352 | if (MATCH_EVENT(HARDWARE, HW_CPU_CYCLES, counter)) | 348 | if (perf_evsel__match(counter, HARDWARE, HW_CPU_CYCLES)) |
| 353 | update_stats(&runtime_cycles_stats[cpu], count[0]); | 349 | update_stats(&runtime_cycles_stats[cpu], count[0]); |
| 354 | if (MATCH_EVENT(HARDWARE, HW_BRANCH_INSTRUCTIONS, counter)) | 350 | if (perf_evsel__match(counter, HARDWARE, HW_BRANCH_INSTRUCTIONS)) |
| 355 | update_stats(&runtime_branches_stats[cpu], count[0]); | 351 | update_stats(&runtime_branches_stats[cpu], count[0]); |
| 356 | } | 352 | } |
| 357 | } | 353 | } |
| @@ -474,7 +470,7 @@ static void print_noise(struct perf_evsel *evsel, double avg) | |||
| 474 | 100 * stddev_stats(&ps->res_stats[0]) / avg); | 470 | 100 * stddev_stats(&ps->res_stats[0]) / avg); |
| 475 | } | 471 | } |
| 476 | 472 | ||
| 477 | static void nsec_printout(int cpu, struct perf_evsel *counter, double avg) | 473 | static void nsec_printout(int cpu, struct perf_evsel *evsel, double avg) |
| 478 | { | 474 | { |
| 479 | double msecs = avg / 1e6; | 475 | double msecs = avg / 1e6; |
| 480 | char cpustr[16] = { '\0', }; | 476 | char cpustr[16] = { '\0', }; |
| @@ -485,18 +481,17 @@ static void nsec_printout(int cpu, struct perf_evsel *counter, double avg) | |||
| 485 | csv_output ? 0 : -4, | 481 | csv_output ? 0 : -4, |
| 486 | cpumap[cpu], csv_sep); | 482 | cpumap[cpu], csv_sep); |
| 487 | 483 | ||
| 488 | fprintf(stderr, fmt, cpustr, msecs, csv_sep, event_name(counter)); | 484 | fprintf(stderr, fmt, cpustr, msecs, csv_sep, event_name(evsel)); |
| 489 | 485 | ||
| 490 | if (csv_output) | 486 | if (csv_output) |
| 491 | return; | 487 | return; |
| 492 | 488 | ||
| 493 | if (MATCH_EVENT(SOFTWARE, SW_TASK_CLOCK, counter)) { | 489 | if (perf_evsel__match(evsel, SOFTWARE, SW_TASK_CLOCK)) |
| 494 | fprintf(stderr, " # %10.3f CPUs ", | 490 | fprintf(stderr, " # %10.3f CPUs ", |
| 495 | avg / avg_stats(&walltime_nsecs_stats)); | 491 | avg / avg_stats(&walltime_nsecs_stats)); |
| 496 | } | ||
| 497 | } | 492 | } |
| 498 | 493 | ||
| 499 | static void abs_printout(int cpu, struct perf_evsel *counter, double avg) | 494 | static void abs_printout(int cpu, struct perf_evsel *evsel, double avg) |
| 500 | { | 495 | { |
| 501 | double total, ratio = 0.0; | 496 | double total, ratio = 0.0; |
| 502 | char cpustr[16] = { '\0', }; | 497 | char cpustr[16] = { '\0', }; |
| @@ -516,19 +511,19 @@ static void abs_printout(int cpu, struct perf_evsel *counter, double avg) | |||
| 516 | else | 511 | else |
| 517 | cpu = 0; | 512 | cpu = 0; |
| 518 | 513 | ||
| 519 | fprintf(stderr, fmt, cpustr, avg, csv_sep, event_name(counter)); | 514 | fprintf(stderr, fmt, cpustr, avg, csv_sep, event_name(evsel)); |
| 520 | 515 | ||
| 521 | if (csv_output) | 516 | if (csv_output) |
| 522 | return; | 517 | return; |
| 523 | 518 | ||
| 524 | if (MATCH_EVENT(HARDWARE, HW_INSTRUCTIONS, counter)) { | 519 | if (perf_evsel__match(evsel, HARDWARE, HW_INSTRUCTIONS)) { |
| 525 | total = avg_stats(&runtime_cycles_stats[cpu]); | 520 | total = avg_stats(&runtime_cycles_stats[cpu]); |
| 526 | 521 | ||
| 527 | if (total) | 522 | if (total) |
| 528 | ratio = avg / total; | 523 | ratio = avg / total; |
| 529 | 524 | ||
| 530 | fprintf(stderr, " # %10.3f IPC ", ratio); | 525 | fprintf(stderr, " # %10.3f IPC ", ratio); |
| 531 | } else if (MATCH_EVENT(HARDWARE, HW_BRANCH_MISSES, counter) && | 526 | } else if (perf_evsel__match(evsel, HARDWARE, HW_BRANCH_MISSES) && |
| 532 | runtime_branches_stats[cpu].n != 0) { | 527 | runtime_branches_stats[cpu].n != 0) { |
| 533 | total = avg_stats(&runtime_branches_stats[cpu]); | 528 | total = avg_stats(&runtime_branches_stats[cpu]); |
| 534 | 529 | ||
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 3eb3989a2110..8a5cfb656674 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h | |||
| @@ -21,4 +21,8 @@ void perf_evsel__delete(struct perf_evsel *evsel); | |||
| 21 | int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); | 21 | int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); |
| 22 | void perf_evsel__free_fd(struct perf_evsel *evsel); | 22 | void perf_evsel__free_fd(struct perf_evsel *evsel); |
| 23 | 23 | ||
| 24 | #define perf_evsel__match(evsel, t, c) \ | ||
| 25 | (evsel->attr.type == PERF_TYPE_##t && \ | ||
| 26 | evsel->attr.config == PERF_COUNT_##c) | ||
| 27 | |||
| 24 | #endif /* __PERF_EVSEL_H */ | 28 | #endif /* __PERF_EVSEL_H */ |
