Commit 33b2e2c2 authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo

perf stat: Split aggr_printout() function

The aggr_printout() function is to print aggr_id and count (nr).
Split it for each output mode to simplify the code.
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Athira Jajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
Link: https://lore.kernel.org/r/20221114230227.1255976-6-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 41cb8752
......@@ -135,124 +135,135 @@ static void print_cgroup(struct perf_stat_config *config, struct evsel *evsel)
}
}
static void aggr_printout(struct perf_stat_config *config,
struct evsel *evsel, struct aggr_cpu_id id, int nr)
static void print_aggr_id_std(struct perf_stat_config *config,
struct evsel *evsel, struct aggr_cpu_id id, int nr)
{
FILE *output = config->output;
switch (config->aggr_mode) {
case AGGR_CORE:
fprintf(output, "S%d-D%d-C%*d %*d ",
id.socket, id.die, -8, id.core, 4, nr);
break;
case AGGR_DIE:
fprintf(output, "S%d-D%*d %*d ",
id.socket, -8, id.die, 4, nr);
break;
case AGGR_SOCKET:
fprintf(output, "S%*d %*d ",
-5, id.socket, 4, nr);
break;
case AGGR_NODE:
fprintf(output, "N%*d %*d ",
-5, id.node, 4, nr);
break;
case AGGR_NONE:
if (evsel->percore && !config->percore_show_thread) {
fprintf(output, "S%d-D%d-C%*d ",
id.socket, id.die, -3, id.core);
} else if (id.cpu.cpu > -1) {
fprintf(output, "CPU%*d ",
-7, id.cpu.cpu);
}
break;
case AGGR_THREAD:
fprintf(output, "%*s-%*d ",
16, perf_thread_map__comm(evsel->core.threads, id.thread_idx),
-8, perf_thread_map__pid(evsel->core.threads, id.thread_idx));
break;
case AGGR_GLOBAL:
case AGGR_UNSET:
case AGGR_MAX:
default:
break;
}
}
if (config->json_output && !config->interval)
fprintf(config->output, "{");
static void print_aggr_id_csv(struct perf_stat_config *config,
struct evsel *evsel, struct aggr_cpu_id id, int nr)
{
FILE *output = config->output;
const char *sep = config->csv_sep;
switch (config->aggr_mode) {
case AGGR_CORE:
if (config->json_output) {
fprintf(config->output,
"\"core\" : \"S%d-D%d-C%d\", \"aggregate-number\" : %d, ",
id.socket,
id.die,
id.core,
nr);
} else {
fprintf(config->output, "S%d-D%d-C%*d%s%*d%s",
id.socket,
id.die,
config->csv_output ? 0 : -8,
id.core,
config->csv_sep,
config->csv_output ? 0 : 4,
nr,
config->csv_sep);
}
fprintf(output, "S%d-D%d-C%d%s%d%s",
id.socket, id.die, id.core, sep, nr, sep);
break;
case AGGR_DIE:
if (config->json_output) {
fprintf(config->output,
"\"die\" : \"S%d-D%d\", \"aggregate-number\" : %d, ",
id.socket,
id.die,
nr);
} else {
fprintf(config->output, "S%d-D%*d%s%*d%s",
id.socket,
config->csv_output ? 0 : -8,
id.die,
config->csv_sep,
config->csv_output ? 0 : 4,
nr,
config->csv_sep);
}
fprintf(output, "S%d-D%d%s%d%s",
id.socket, id.die, sep, nr, sep);
break;
case AGGR_SOCKET:
if (config->json_output) {
fprintf(config->output,
"\"socket\" : \"S%d\", \"aggregate-number\" : %d, ",
id.socket,
nr);
} else {
fprintf(config->output, "S%*d%s%*d%s",
config->csv_output ? 0 : -5,
id.socket,
config->csv_sep,
config->csv_output ? 0 : 4,
nr,
config->csv_sep);
}
fprintf(output, "S%d%s%d%s",
id.socket, sep, nr, sep);
break;
case AGGR_NODE:
if (config->json_output) {
fprintf(config->output, "\"node\" : \"N%d\", \"aggregate-number\" : %d, ",
id.node,
nr);
} else {
fprintf(config->output, "N%*d%s%*d%s",
config->csv_output ? 0 : -5,
id.node,
config->csv_sep,
config->csv_output ? 0 : 4,
nr,
config->csv_sep);
}
fprintf(output, "N%d%s%d%s",
id.node, sep, nr, sep);
break;
case AGGR_NONE:
if (config->json_output) {
if (evsel->percore && !config->percore_show_thread) {
fprintf(config->output, "\"core\" : \"S%d-D%d-C%d\"",
id.socket,
id.die,
id.core);
} else if (id.cpu.cpu > -1) {
fprintf(config->output, "\"cpu\" : \"%d\", ",
id.cpu.cpu);
}
} else {
if (evsel->percore && !config->percore_show_thread) {
fprintf(config->output, "S%d-D%d-C%*d%s",
id.socket,
id.die,
config->csv_output ? 0 : -3,
id.core, config->csv_sep);
} else if (id.cpu.cpu > -1) {
fprintf(config->output, "CPU%*d%s",
config->csv_output ? 0 : -7,
id.cpu.cpu, config->csv_sep);
}
if (evsel->percore && !config->percore_show_thread) {
fprintf(output, "S%d-D%d-C%d%s",
id.socket, id.die, id.core, sep);
} else if (id.cpu.cpu > -1) {
fprintf(output, "CPU%d%s",
id.cpu.cpu, sep);
}
break;
case AGGR_THREAD:
if (config->json_output) {
fprintf(config->output, "\"thread\" : \"%s-%d\", ",
perf_thread_map__comm(evsel->core.threads, id.thread_idx),
perf_thread_map__pid(evsel->core.threads, id.thread_idx));
} else {
fprintf(config->output, "%*s-%*d%s",
config->csv_output ? 0 : 16,
perf_thread_map__comm(evsel->core.threads, id.thread_idx),
config->csv_output ? 0 : -8,
perf_thread_map__pid(evsel->core.threads, id.thread_idx),
config->csv_sep);
fprintf(output, "%s-%d%s",
perf_thread_map__comm(evsel->core.threads, id.thread_idx),
perf_thread_map__pid(evsel->core.threads, id.thread_idx),
sep);
break;
case AGGR_GLOBAL:
case AGGR_UNSET:
case AGGR_MAX:
default:
break;
}
}
static void print_aggr_id_json(struct perf_stat_config *config,
struct evsel *evsel, struct aggr_cpu_id id, int nr)
{
FILE *output = config->output;
if (!config->interval)
fputc('{', output);
switch (config->aggr_mode) {
case AGGR_CORE:
fprintf(output, "\"core\" : \"S%d-D%d-C%d\", \"aggregate-number\" : %d, ",
id.socket, id.die, id.core, nr);
break;
case AGGR_DIE:
fprintf(output, "\"die\" : \"S%d-D%d\", \"aggregate-number\" : %d, ",
id.socket, id.die, nr);
break;
case AGGR_SOCKET:
fprintf(output, "\"socket\" : \"S%d\", \"aggregate-number\" : %d, ",
id.socket, nr);
break;
case AGGR_NODE:
fprintf(output, "\"node\" : \"N%d\", \"aggregate-number\" : %d, ",
id.node, nr);
break;
case AGGR_NONE:
if (evsel->percore && !config->percore_show_thread) {
fprintf(output, "\"core\" : \"S%d-D%d-C%d\"",
id.socket, id.die, id.core);
} else if (id.cpu.cpu > -1) {
fprintf(output, "\"cpu\" : \"%d\", ",
id.cpu.cpu);
}
break;
case AGGR_THREAD:
fprintf(output, "\"thread\" : \"%s-%d\", ",
perf_thread_map__comm(evsel->core.threads, id.thread_idx),
perf_thread_map__pid(evsel->core.threads, id.thread_idx));
break;
case AGGR_GLOBAL:
case AGGR_UNSET:
case AGGR_MAX:
......@@ -261,6 +272,17 @@ static void aggr_printout(struct perf_stat_config *config,
}
}
static void aggr_printout(struct perf_stat_config *config,
struct evsel *evsel, struct aggr_cpu_id id, int nr)
{
if (config->json_output)
print_aggr_id_json(config, evsel, id, nr);
else if (config->csv_output)
print_aggr_id_csv(config, evsel, id, nr);
else
print_aggr_id_std(config, evsel, id, nr);
}
struct outstate {
FILE *fh;
bool newline;
......
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