perf annotate: Show progress of sample processing
authorNamhyung Kim <namhyung@kernel.org>
Thu, 11 Apr 2024 03:32:51 +0000 (20:32 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 12 Apr 2024 15:02:06 +0000 (12:02 -0300)
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>
tools/perf/builtin-annotate.c

index 16e1581207c99152fa4f385740f33f001114fdbf..332e1ddcacbd368bfcb9c62d10172b86f8371d7d 100644 (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.