forked from luck/tmp_suning_uos_patched
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: Stephane 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: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
4c47f4fcd6
commit
d5dbc518cd
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue
Block a user