perf report: Add a menu item to annotate data type in TUI
authorNamhyung Kim <namhyung@kernel.org>
Thu, 11 Apr 2024 03:32:55 +0000 (20:32 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 12 Apr 2024 15:02:06 +0000 (12:02 -0300)
When the hist entry has the type info, it should be able to display the
annotation browser for the type like in `perf annotate --data-type`.

Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
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-7-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-report.c
tools/perf/ui/browsers/hists.c

index dcd93ee5fc24e3389f6e154171fd9faa499706dd..aaa6427a12247486d08910febf864e99e83c8c92 100644 (file)
@@ -1694,6 +1694,11 @@ repeat:
        else
                use_browser = 0;
 
+       if (report.data_type && use_browser == 1) {
+               symbol_conf.annotate_data_member = true;
+               symbol_conf.annotate_data_sample = true;
+       }
+
        if (sort_order && strstr(sort_order, "ipc")) {
                parse_options_usage(report_usage, options, "s", 1);
                goto error;
index 0c02b3a8e121ffaaaa17647237ed5ab2c9ad67d0..71b32591d61a65e44ae89addebeb0494391e07eb 100644 (file)
@@ -38,6 +38,7 @@
 #include "../ui.h"
 #include "map.h"
 #include "annotate.h"
+#include "annotate-data.h"
 #include "srcline.h"
 #include "string2.h"
 #include "units.h"
@@ -2505,6 +2506,32 @@ add_annotate_opt(struct hist_browser *browser __maybe_unused,
        return 1;
 }
 
+static int
+do_annotate_type(struct hist_browser *browser, struct popup_action *act)
+{
+       struct hist_entry *he = browser->he_selection;
+
+       hist_entry__annotate_data_tui(he, act->evsel, browser->hbt);
+       ui_browser__handle_resize(&browser->b);
+       return 0;
+}
+
+static int
+add_annotate_type_opt(struct hist_browser *browser,
+                     struct popup_action *act, char **optstr,
+                     struct hist_entry *he)
+{
+       if (he == NULL || he->mem_type == NULL || he->mem_type->histograms == NULL)
+               return 0;
+
+       if (asprintf(optstr, "Annotate type %s", he->mem_type->self.type_name) < 0)
+               return 0;
+
+       act->evsel = hists_to_evsel(browser->hists);
+       act->fn = do_annotate_type;
+       return 1;
+}
+
 static int
 do_zoom_thread(struct hist_browser *browser, struct popup_action *act)
 {
@@ -3307,6 +3334,10 @@ do_hotkey:                // key came straight from options ui__popup_menu()
                                                       browser->he_selection->ip);
                }
 skip_annotation:
+               nr_options += add_annotate_type_opt(browser,
+                                                   &actions[nr_options],
+                                                   &options[nr_options],
+                                                   browser->he_selection);
                nr_options += add_thread_opt(browser, &actions[nr_options],
                                             &options[nr_options], thread);
                nr_options += add_dso_opt(browser, &actions[nr_options],