summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/builtin-stat.c47
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
326static void print_interval(void) 326static 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
347static 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}