Commit 40480a81 authored by Jin Yao's avatar Jin Yao Committed by Arnaldo Carvalho de Melo

perf stat: Factor out aggregate counts printing

Move the aggregate counts printing to a new function
print_counter_aggrdata, which will be used in following patches.
Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
Tested-by: default avatarRavi Bangoria <ravi.bangoria@linux.ibm.com>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jin Yao <yao.jin@intel.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1555077590-27664-3-git-send-email-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 064b4e82
...@@ -594,6 +594,41 @@ static void aggr_cb(struct perf_stat_config *config, ...@@ -594,6 +594,41 @@ static void aggr_cb(struct perf_stat_config *config,
} }
} }
static void print_counter_aggrdata(struct perf_stat_config *config,
struct perf_evsel *counter, int s,
char *prefix, bool metric_only,
bool *first)
{
struct aggr_data ad;
FILE *output = config->output;
u64 ena, run, val;
int id, nr;
double uval;
ad.id = id = config->aggr_map->map[s];
ad.val = ad.ena = ad.run = 0;
ad.nr = 0;
if (!collect_data(config, counter, aggr_cb, &ad))
return;
nr = ad.nr;
ena = ad.ena;
run = ad.run;
val = ad.val;
if (*first && metric_only) {
*first = false;
aggr_printout(config, counter, id, nr);
}
if (prefix && !metric_only)
fprintf(output, "%s", prefix);
uval = val * counter->scale;
printout(config, id, nr, counter, uval, prefix,
run, ena, 1.0, &rt_stat);
if (!metric_only)
fputc('\n', output);
}
static void print_aggr(struct perf_stat_config *config, static void print_aggr(struct perf_stat_config *config,
struct perf_evlist *evlist, struct perf_evlist *evlist,
char *prefix) char *prefix)
...@@ -601,9 +636,7 @@ static void print_aggr(struct perf_stat_config *config, ...@@ -601,9 +636,7 @@ static void print_aggr(struct perf_stat_config *config,
bool metric_only = config->metric_only; bool metric_only = config->metric_only;
FILE *output = config->output; FILE *output = config->output;
struct perf_evsel *counter; struct perf_evsel *counter;
int s, id, nr; int s;
double uval;
u64 ena, run, val;
bool first; bool first;
if (!(config->aggr_map || config->aggr_get_id)) if (!(config->aggr_map || config->aggr_get_id))
...@@ -616,33 +649,14 @@ static void print_aggr(struct perf_stat_config *config, ...@@ -616,33 +649,14 @@ static void print_aggr(struct perf_stat_config *config,
* Without each counter has its own line. * Without each counter has its own line.
*/ */
for (s = 0; s < config->aggr_map->nr; s++) { for (s = 0; s < config->aggr_map->nr; s++) {
struct aggr_data ad;
if (prefix && metric_only) if (prefix && metric_only)
fprintf(output, "%s", prefix); fprintf(output, "%s", prefix);
ad.id = id = config->aggr_map->map[s];
first = true; first = true;
evlist__for_each_entry(evlist, counter) { evlist__for_each_entry(evlist, counter) {
ad.val = ad.ena = ad.run = 0; print_counter_aggrdata(config, counter, s,
ad.nr = 0; prefix, metric_only,
if (!collect_data(config, counter, aggr_cb, &ad)) &first);
continue;
nr = ad.nr;
ena = ad.ena;
run = ad.run;
val = ad.val;
if (first && metric_only) {
first = false;
aggr_printout(config, counter, id, nr);
}
if (prefix && !metric_only)
fprintf(output, "%s", prefix);
uval = val * counter->scale;
printout(config, id, nr, counter, uval, prefix,
run, ena, 1.0, &rt_stat);
if (!metric_only)
fputc('\n', output);
} }
if (metric_only) if (metric_only)
fputc('\n', output); fputc('\n', output);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment