perf stat: Use field separator in the metric header
authorNamhyung Kim <namhyung@kernel.org>
Fri, 28 Jun 2024 00:06:04 +0000 (17:06 -0700)
committerNamhyung Kim <namhyung@kernel.org>
Fri, 28 Jun 2024 17:58:09 +0000 (10:58 -0700)
It didn't use the passed field separator (using -x option) when it
prints the metric headers and always put "," between the fields.

Before:
  $ sudo ./perf stat -a -x : --per-core -M tma_core_bound --metric-only true
  core,cpus,%  tma_core_bound:     <<<--- here: "core,cpus," but ":" expected
  S0-D0-C0:2:10.5:
  S0-D0-C1:2:14.8:
  S0-D0-C2:2:9.9:
  S0-D0-C3:2:13.2:

After:
  $ sudo ./perf stat -a -x : --per-core -M tma_core_bound --metric-only true
  core:cpus:%  tma_core_bound:
  S0-D0-C0:2:10.5:
  S0-D0-C1:2:15.0:
  S0-D0-C2:2:16.5:
  S0-D0-C3:2:12.5:

Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: https://lore.kernel.org/r/20240628000604.1296808-2-namhyung@kernel.org
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/stat-display.c

index 186305fd2d0efa23500f4fc194b614da466c58f4..c38bcb6f4c78e34c7abe32995f23f2ec29750375 100644 (file)
@@ -1186,10 +1186,21 @@ static void print_metric_headers_std(struct perf_stat_config *config,
 static void print_metric_headers_csv(struct perf_stat_config *config,
                                     bool no_indent __maybe_unused)
 {
+       const char *p;
+
        if (config->interval)
-               fputs("time,", config->output);
-       if (!config->iostat_run)
-               fputs(aggr_header_csv[config->aggr_mode], config->output);
+               fprintf(config->output, "time%s", config->csv_sep);
+       if (config->iostat_run)
+               return;
+
+       p = aggr_header_csv[config->aggr_mode];
+       while (*p) {
+               if (*p == ',')
+                       fputs(config->csv_sep, config->output);
+               else
+                       fputc(*p, config->output);
+               p++;
+       }
 }
 
 static void print_metric_headers_json(struct perf_stat_config *config __maybe_unused,