Skip to content

Commit

Permalink
perf stat: Introduce read_counters function
Browse files Browse the repository at this point in the history
Moving read counters logic into single read_counters function, which
will be called for both interval and overall processing legs.

The reason is to split reading and processing (following patches)
counters code, so we could read counters from other sources (like
perf.data) and process them in the same way as 'perf stat' command does.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1435310967-14570-15-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
olsajiri authored and acmel committed Jun 26, 2015
1 parent f99f471 commit 106a94a
Showing 1 changed file with 22 additions and 25 deletions.
47 changes: 22 additions & 25 deletions tools/perf/builtin-stat.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit 106a94a

Please sign in to comment.