]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - tools/perf/builtin-stat.c
perf stat: Introduce read_counters function
[karo-tx-linux.git] / tools / perf / builtin-stat.c
index 3e385f9f12ee8706f5051e05e430ad8f324f2d52..158859e622d374812c88b820363e7a60c2c9a147 100644 (file)
@@ -323,27 +323,35 @@ static int read_counter(struct perf_evsel *counter)
        return 0;
 }
 
-static void print_interval(void)
+static void read_counters(bool close)
 {
-       static int num_print_interval;
        struct perf_evsel *counter;
        struct perf_stat *ps;
-       struct timespec ts, rs;
-       char prefix[64];
 
-       if (aggr_mode == AGGR_GLOBAL) {
-               evlist__for_each(evsel_list, counter) {
-                       ps = counter->priv;
-                       memset(ps->res_stats, 0, sizeof(ps->res_stats));
+       evlist__for_each(evsel_list, counter) {
+               ps = counter->priv;
+               memset(ps->res_stats, 0, sizeof(ps->res_stats));
+
+               if (aggr_mode == AGGR_GLOBAL)
                        read_counter_aggr(counter);
-               }
-       } else  {
-               evlist__for_each(evsel_list, counter) {
-                       ps = counter->priv;
-                       memset(ps->res_stats, 0, sizeof(ps->res_stats));
+               else
                        read_counter(counter);
+
+               if (close) {
+                       perf_evsel__close_fd(counter, perf_evsel__nr_cpus(counter),
+                                            thread_map__nr(evsel_list->threads));
                }
        }
+}
+
+static void print_interval(void)
+{
+       static int num_print_interval;
+       struct perf_evsel *counter;
+       struct timespec ts, rs;
+       char prefix[64];
+
+       read_counters(false);
 
        clock_gettime(CLOCK_MONOTONIC, &ts);
        diff_timespec(&rs, &ts, &ref_time);
@@ -525,18 +533,7 @@ static int __run_perf_stat(int argc, const char **argv)
 
        update_stats(&walltime_nsecs_stats, t1 - t0);
 
-       if (aggr_mode == AGGR_GLOBAL) {
-               evlist__for_each(evsel_list, counter) {
-                       read_counter_aggr(counter);
-                       perf_evsel__close_fd(counter, perf_evsel__nr_cpus(counter),
-                                            thread_map__nr(evsel_list->threads));
-               }
-       } else {
-               evlist__for_each(evsel_list, counter) {
-                       read_counter(counter);
-                       perf_evsel__close_fd(counter, perf_evsel__nr_cpus(counter), 1);
-               }
-       }
+       read_counters(true);
 
        return WEXITSTATUS(status);
 }