Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5dbc518 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

perf hists browser: Allow annotating entries in callchains



Instead of annotating just the top level hist_entry, allow instead
annotating a map_symbol, i.e. the top level hist_entry or one of the
callchains for which there were samples.

Suggested-by: default avatarStephane Eranian <eranian@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/n/tip-k1zxj5564je9jei4yd15ouwn@git.kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 4c47f4fc
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -829,10 +829,16 @@ static int annotate_browser__run(struct annotate_browser *browser,
	return key;
}

int map_symbol__tui_annotate(struct map_symbol *ms, struct perf_evsel *evsel,
			     struct hist_browser_timer *hbt)
{
	return symbol__tui_annotate(ms->sym, ms->map, evsel, hbt);
}

int hist_entry__tui_annotate(struct hist_entry *he, struct perf_evsel *evsel,
			     struct hist_browser_timer *hbt)
{
	return symbol__tui_annotate(he->ms.sym, he->ms.map, evsel, hbt);
	return map_symbol__tui_annotate(&he->ms, evsel, hbt);
}

static void annotate_browser__mark_jump_targets(struct annotate_browser *browser,
+10 −13
Original line number Diff line number Diff line
@@ -1704,6 +1704,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
		if (choice == annotate || choice == annotate_t || choice == annotate_f) {
			struct hist_entry *he;
			struct annotation *notes;
			struct map_symbol ms;
			int err;
do_annotate:
			if (!objdump_path && perf_session_env__lookup_objdump(env))
@@ -1713,25 +1714,21 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
			if (he == NULL)
				continue;

			/*
			 * we stash the branch_info symbol + map into the
			 * the ms so we don't have to rewrite all the annotation
			 * code to use branch_info.
			 * in branch mode, the ms struct is not used
			 */
			if (choice == annotate_f) {
				he->ms.sym = he->branch_info->from.sym;
				he->ms.map = he->branch_info->from.map;
				ms.map = he->branch_info->from.map;
				ms.sym = he->branch_info->from.sym;
			} else if (choice == annotate_t) {
				he->ms.sym = he->branch_info->to.sym;
				he->ms.map = he->branch_info->to.map;
				ms.map = he->branch_info->to.map;
				ms.sym = he->branch_info->to.sym;
			} else {
				ms = *browser->selection;
			}

			notes = symbol__annotation(he->ms.sym);
			notes = symbol__annotation(ms.sym);
			if (!notes->src)
				continue;

			err = hist_entry__tui_annotate(he, evsel, hbt);
			err = map_symbol__tui_annotate(&ms, evsel, hbt);
			/*
			 * offer option to annotate the other branch source or target
			 * (if they exists) when returning from annotate
+9 −0
Original line number Diff line number Diff line
@@ -303,6 +303,9 @@ struct hist_browser_timer {

#ifdef HAVE_SLANG_SUPPORT
#include "../ui/keysyms.h"
int map_symbol__tui_annotate(struct map_symbol *ms, struct perf_evsel *evsel,
			     struct hist_browser_timer *hbt);

int hist_entry__tui_annotate(struct hist_entry *he, struct perf_evsel *evsel,
			     struct hist_browser_timer *hbt);

@@ -321,6 +324,12 @@ int perf_evlist__tui_browse_hists(struct perf_evlist *evlist __maybe_unused,
{
	return 0;
}
static inline int map_symbol__tui_annotate(struct map_symbol *ms __maybe_unused,
					   struct perf_evsel *evsel __maybe_unused,
					   struct hist_browser_timer *hbt __maybe_unused)
{
	return 0;
}

static inline int hist_entry__tui_annotate(struct hist_entry *he __maybe_unused,
					   struct perf_evsel *evsel __maybe_unused,