perf annotate: Show progress of sample processing

Like 'perf report', it can take a while to process samples.

Show a progress window to inform users how that it is not stuck.

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: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20240411033256.2099646-3-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Namhyung Kim 2024-04-10 20:32:51 -07:00 committed by Arnaldo Carvalho de Melo
parent eb83348863
commit d9aedc12d3

View file

@ -37,6 +37,7 @@
#include "util/map_symbol.h"
#include "util/branch.h"
#include "util/util.h"
#include "ui/progress.h"
#include <dlfcn.h>
#include <errno.h>
@ -665,13 +666,23 @@ static int __cmd_annotate(struct perf_annotate *ann)
evlist__for_each_entry(session->evlist, pos) {
struct hists *hists = evsel__hists(pos);
u32 nr_samples = hists->stats.nr_samples;
struct ui_progress prog;
if (nr_samples > 0) {
total_nr_samples += nr_samples;
hists__collapse_resort(hists, NULL);
ui_progress__init(&prog, nr_samples,
"Merging related events...");
hists__collapse_resort(hists, &prog);
ui_progress__finish();
/* Don't sort callchain */
evsel__reset_sample_bit(pos, CALLCHAIN);
evsel__output_resort(pos, NULL);
ui_progress__init(&prog, nr_samples,
"Sorting events for output...");
evsel__output_resort(pos, &prog);
ui_progress__finish();
/*
* An event group needs to display other events too.