perf evlist: Make groups visible in evlist__format_evsels() output

Make groups visible in output:

Before:

{cycles,instructions} ->
cpu_atom/cycles/,cpu_atom/instructions/,cpu_core/cycles/,cpu_core/instructions/

After:

{cycles,instructions} ->
{cpu_atom/cycles/,cpu_atom/instructions/},{cpu_core/cycles/,cpu_core/instructions/}

Committer testing:

Before:

  root@number:~# perf record -e '{cycles,instructions,cache-misses}' /tmp/bla
  Failed to collect 'cycles,instructions,cache-misses' for the '/tmp/bla' workload: Permission denied
  root@number:~#

After:

  root@number:~# perf record -e '{cycles,instructions,cache-misses}' /tmp/bla
  Failed to collect '{cycles,instructions,cache-misses}' for the '/tmp/bla' workload: Permission denied
  root@number:~#

Reviewed-by: Kan Liang <kan.liang@linux.intel.com>
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Dominique Martinet <asmadeus@codewreck.org>
Cc: Dr. David Alan Gilbert <linux@treblig.org>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Levi Yun <yeoreum.yun@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Weilin Wang <weilin.wang@intel.com>
Link: https://lore.kernel.org/r/20250402201549.4090305-5-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Ian Rogers 2025-04-02 13:15:48 -07:00 committed by Arnaldo Carvalho de Melo
parent f0f245eaa2
commit 583dc500d1

View File

@ -2470,13 +2470,18 @@ struct evsel *evlist__find_evsel(struct evlist *evlist, int idx)
void evlist__format_evsels(struct evlist *evlist, struct strbuf *sb, size_t max_length)
{
struct evsel *evsel;
struct evsel *evsel, *leader = NULL;
bool first = true;
evlist__for_each_entry(evlist, evsel) {
struct evsel *new_leader = evsel__leader(evsel);
if (evsel__is_dummy_event(evsel))
continue;
if (leader != new_leader && leader && leader->core.nr_members > 1)
strbuf_addch(sb, '}');
if (!first)
strbuf_addch(sb, ',');
@ -2484,9 +2489,15 @@ void evlist__format_evsels(struct evlist *evlist, struct strbuf *sb, size_t max_
strbuf_addstr(sb, "...");
return;
}
if (leader != new_leader && new_leader->core.nr_members > 1)
strbuf_addch(sb, '{');
strbuf_addstr(sb, evsel__name(evsel));
first = false;
leader = new_leader;
}
if (leader && leader->core.nr_members > 1)
strbuf_addch(sb, '}');
}
void evlist__check_mem_load_aux(struct evlist *evlist)