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: Jin Yao <yao.jin@linux.intel.com> Tested-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com> Acked-by: Jiri 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.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
064b4e82aa
commit
40480a8136
|
@ -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,
|
||||||
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,
|
||||||
* 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);
|
||||||
|
|
Loading…
Reference in New Issue