Commit 0bfbe661 authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo
Browse files

perf report: Add a menu item to annotate data type in TUI



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: default avatarIan Rogers <irogers@google.com>
Signed-off-by: default avatarNamhyung 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 2b08f219
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1694,6 +1694,11 @@ int cmd_report(int argc, const char **argv)
	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;
+31 −0
Original line number Diff line number Diff line
@@ -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 @@ static int evsel__hists_browse(struct evsel *evsel, int nr_events, const char *h
						       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],