This patch supports jumping from tui total cycles view to symbol source
view.
For example,
perf record -b ./div
perf report --total-cycles
In total cycles view, we can select one entry and press 'a' or press
ENTER key to jump to symbol source view.
This patch also sets sort_order to NULL in cmd_report() which will use
the default branch sort order. The percent value in new annotate view
will be consistent with the percent in annotate view switched from perf
report (we observed the original percent gap with previous patches).
v2:
---
Fix the 'make NO_SLANG=1' error. (set __maybe_unused to
annotation_opts in block_hists_tui_browse()).
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jin Yao <yao.jin@intel.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20191118140849.20714-2-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
evlist__for_each_entry(evlist, pos) {
ret = report__browse_block_hists(&rep->block_reports[i++].hist,
- rep->min_percent, pos);
+ rep->min_percent, pos,
+ &rep->session->header.env,
+ &rep->annotation_opts);
if (ret != 0)
return ret;
}
if (rep->total_cycles_mode) {
report__browse_block_hists(&rep->block_reports[i++].hist,
- rep->min_percent, pos);
+ rep->min_percent, pos,
+ NULL, NULL);
continue;
}
if (sort__mode != SORT_MODE__BRANCH)
report.total_cycles_mode = false;
else
- sort_order = "sym";
+ sort_order = NULL;
}
if (strcmp(input_name, "-") != 0)
if (!notes->src)
return 0;
- evsel = hists_to_evsel(browser->hists);
+ if (browser->block_evsel)
+ evsel = browser->block_evsel;
+ else
+ evsel = hists_to_evsel(browser->hists);
+
err = map_symbol__tui_annotate(&act->ms, evsel, browser->hbt,
browser->annotation_opts);
he = hist_browser__selected_entry(browser);
}
int block_hists_tui_browse(struct block_hist *bh, struct evsel *evsel,
- float min_percent)
+ float min_percent, struct perf_env *env,
+ struct annotation_options *annotation_opts)
{
struct hists *hists = &bh->block_hists;
struct hist_browser *browser;
int key = -1;
+ struct popup_action action;
static const char help[] =
" q Quit \n";
browser->block_evsel = evsel;
browser->title = block_hists_browser__title;
browser->min_pcnt = min_percent;
+ browser->env = env;
+ browser->annotation_opts = annotation_opts;
/* reset abort key so that it can get Ctrl-C as a key */
SLang_reset_tty();
SLang_init_tty(0, 0, 0);
+ memset(&action, 0, sizeof(action));
+
while (1) {
key = hist_browser__run(browser, "? - help", true);
case '?':
ui_browser__help_window(&browser->b, help);
break;
+ case 'a':
+ case K_ENTER:
+ if (!browser->selection ||
+ !browser->selection->sym) {
+ continue;
+ }
+
+ action.ms.map = browser->selection->map;
+ action.ms.sym = browser->selection->sym;
+ do_annotate(browser, &action);
+ continue;
default:
break;
}
}
int report__browse_block_hists(struct block_hist *bh, float min_percent,
- struct evsel *evsel)
+ struct evsel *evsel, struct perf_env *env,
+ struct annotation_options *annotation_opts)
{
int ret;
return 0;
case 1:
symbol_conf.report_individual_block = true;
- ret = block_hists_tui_browse(bh, evsel, min_percent);
+ ret = block_hists_tui_browse(bh, evsel, min_percent,
+ env, annotation_opts);
hists__delete_entries(&bh->block_hists);
return ret;
default:
u64 total_cycles);
int report__browse_block_hists(struct block_hist *bh, float min_percent,
- struct evsel *evsel);
+ struct evsel *evsel, struct perf_env *env,
+ struct annotation_options *annotation_opts);
float block_info__total_cycles_percent(struct hist_entry *he);
void res_sample_init(void);
int block_hists_tui_browse(struct block_hist *bh, struct evsel *evsel,
- float min_percent);
+ float min_percent, struct perf_env *env,
+ struct annotation_options *annotation_opts);
#else
static inline
int perf_evlist__tui_browse_hists(struct evlist *evlist __maybe_unused,
static inline int block_hists_tui_browse(struct block_hist *bh __maybe_unused,
struct evsel *evsel __maybe_unused,
- float min_percent __maybe_unused)
+ float min_percent __maybe_unused,
+ struct perf_env *env __maybe_unused,
+ struct annotation_options *annotation_opts __maybe_unused)
{
return 0;
}