]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf report: Fix histogram entry collapsing for -F option
authorNamhyung Kim <namhyung@kernel.org>
Wed, 10 Dec 2025 02:33:26 +0000 (18:33 -0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 17 Dec 2025 12:30:37 +0000 (09:30 -0300)
Users can use -F/--fields option to set output fields and sort keys
together.

But it missed to set perf_hpp_list->need_collapse for sort entries that
have se_collapse callbacks.

So it ends up with having duplicated entries separately.

For example, let's run this command first.

  $ perf mem record -t load -U -- perf test -w datasym

This will record samples for memory access (load) to struct 'buf' and a
loop condition ('sig_atomic_t') types.

So the following two commands should have identical output.

  $ perf report -s type --stdio --percent-limit=1 -q
      87.80%  perf                  buf
      12.17%  perf                  sig_atomic_t

But using -F option didn't collapse the entries based on types so the
result looked like below:

  $ perf report -F overhead,type --stdio --percent-limit=1 -q
      23.31%  perf                  buf
      22.84%  perf                  buf
      21.26%  perf                  buf
      20.39%  perf                  buf
      12.17%  perf                  sig_atomic_t

Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/sort.c

index f3a565b0e2307a8adf159725f803df5fef0dff83..3d4b68fd6e44543f3038ada67da90df3db3c8488 100644 (file)
@@ -3585,6 +3585,9 @@ static int __sort_dimension__add_output(struct perf_hpp_list *list,
        if (__sort_dimension__add_hpp_output(sd, list, level) < 0)
                return -1;
 
+       if (sd->entry->se_collapse)
+               list->need_collapse = 1;
+
        sd->taken = 1;
        return 0;
 }