Skip to content

Commit

Permalink
perf report/top: Allow pressing hotkeys in the options popup menu
Browse files Browse the repository at this point in the history
When the users presses ENTER in the main 'perf report/top' screen a
popup menu is presented, in it some hotkeys are suggested as
alternatives to using the menu, or for additional features.

At that point the user may try those hotkeys, so allow for that by
recording the key used and exiting, the caller then can check for that
possibility and process the hotkey.

I.e. try pressing ENTER, and then 'k' to exit and zoom into the kernel
map, using ESC then zooms out, etc.

Reviewed-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jin Yao <yao.jin@linux.intel.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-ujfq3fw44kf6qrtfajl5dcsp@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Arnaldo Carvalho de Melo committed Jan 6, 2020
1 parent d071265 commit 4c8b9c0
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions tools/perf/ui/browsers/hists.c
Original file line number Diff line number Diff line change
Expand Up @@ -2995,12 +2995,13 @@ static int perf_evsel__hists_browse(struct evsel *evsel, int nr_events,
while (1) {
struct thread *thread = NULL;
struct map *map = NULL;
int choice = 0;
int choice;
int socked_id = -1;

nr_options = 0;

key = hist_browser__run(browser, helpline, warn_lost_event, 0);
key = 0; // reset key
do_hotkey: // key came straight from options ui__popup_menu()
choice = nr_options = 0;
key = hist_browser__run(browser, helpline, warn_lost_event, key);

if (browser->he_selection != NULL) {
thread = hist_browser__selected_thread(browser);
Expand Down Expand Up @@ -3279,10 +3280,13 @@ static int perf_evsel__hists_browse(struct evsel *evsel, int nr_events,
do {
struct popup_action *act;

choice = ui__popup_menu(nr_options, options, NULL);
if (choice == -1 || choice >= nr_options)
choice = ui__popup_menu(nr_options, options, &key);
if (choice == -1)
break;

if (choice == nr_options)
goto do_hotkey;

act = &actions[choice];
key = act->fn(browser, act);
} while (key == 1);
Expand Down

0 comments on commit 4c8b9c0

Please sign in to comment.