diff options
-rw-r--r-- | tools/perf/builtin-stat.c | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 3e385f9f12ee..158859e622d3 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
@@ -323,27 +323,35 @@ static int read_counter(struct perf_evsel *counter) | |||
323 | return 0; | 323 | return 0; |
324 | } | 324 | } |
325 | 325 | ||
326 | static void print_interval(void) | 326 | static void read_counters(bool close) |
327 | { | 327 | { |
328 | static int num_print_interval; | ||
329 | struct perf_evsel *counter; | 328 | struct perf_evsel *counter; |
330 | struct perf_stat *ps; | 329 | struct perf_stat *ps; |
331 | struct timespec ts, rs; | ||
332 | char prefix[64]; | ||
333 | 330 | ||
334 | if (aggr_mode == AGGR_GLOBAL) { | 331 | evlist__for_each(evsel_list, counter) { |
335 | evlist__for_each(evsel_list, counter) { | 332 | ps = counter->priv; |
336 | ps = counter->priv; | 333 | memset(ps->res_stats, 0, sizeof(ps->res_stats)); |
337 | memset(ps->res_stats, 0, sizeof(ps->res_stats)); | 334 | |
335 | if (aggr_mode == AGGR_GLOBAL) | ||
338 | read_counter_aggr(counter); | 336 | read_counter_aggr(counter); |
339 | } | 337 | else |
340 | } else { | ||
341 | evlist__for_each(evsel_list, counter) { | ||
342 | ps = counter->priv; | ||
343 | memset(ps->res_stats, 0, sizeof(ps->res_stats)); | ||
344 | read_counter(counter); | 338 | read_counter(counter); |
339 | |||
340 | if (close) { | ||
341 | perf_evsel__close_fd(counter, perf_evsel__nr_cpus(counter), | ||
342 | thread_map__nr(evsel_list->threads)); | ||
345 | } | 343 | } |
346 | } | 344 | } |
345 | } | ||
346 | |||
347 | static void print_interval(void) | ||
348 | { | ||
349 | static int num_print_interval; | ||
350 | struct perf_evsel *counter; | ||
351 | struct timespec ts, rs; | ||
352 | char prefix[64]; | ||
353 | |||
354 | read_counters(false); | ||
347 | 355 | ||
348 | clock_gettime(CLOCK_MONOTONIC, &ts); | 356 | clock_gettime(CLOCK_MONOTONIC, &ts); |
349 | diff_timespec(&rs, &ts, &ref_time); | 357 | diff_timespec(&rs, &ts, &ref_time); |
@@ -525,18 +533,7 @@ static int __run_perf_stat(int argc, const char **argv) | |||
525 | 533 | ||
526 | update_stats(&walltime_nsecs_stats, t1 - t0); | 534 | update_stats(&walltime_nsecs_stats, t1 - t0); |
527 | 535 | ||
528 | if (aggr_mode == AGGR_GLOBAL) { | 536 | read_counters(true); |
529 | evlist__for_each(evsel_list, counter) { | ||
530 | read_counter_aggr(counter); | ||
531 | perf_evsel__close_fd(counter, perf_evsel__nr_cpus(counter), | ||
532 | thread_map__nr(evsel_list->threads)); | ||
533 | } | ||
534 | } else { | ||
535 | evlist__for_each(evsel_list, counter) { | ||
536 | read_counter(counter); | ||
537 | perf_evsel__close_fd(counter, perf_evsel__nr_cpus(counter), 1); | ||
538 | } | ||
539 | } | ||
540 | 537 | ||
541 | return WEXITSTATUS(status); | 538 | return WEXITSTATUS(status); |
542 | } | 539 | } |