perf report: Support a new key to reload the browser
authorJin Yao <yao.jin@linux.intel.com>
Thu, 20 Feb 2020 01:36:15 +0000 (09:36 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 24 Mar 2020 12:37:27 +0000 (09:37 -0300)
Sometimes we may need to reload the browser to update the output since
some options are changed.

This patch creates a new key K_RELOAD. Once the __cmd_report() returns
K_RELOAD, it would repeat the whole process, such as, read samples from
data file, sort the data and display in the browser.

 v5:
 ---
 1. Fix the 'make NO_SLANG=1' error. Define K_RELOAD in util/hist.h.
 2. Skip setup_sorting() in repeat path if last key is K_RELOAD.

 v4:
 ---
 Need to quit in perf_evsel_menu__run if key is K_RELOAD.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20200220013616.19916-3-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-report.c
tools/perf/ui/browsers/hists.c
tools/perf/ui/keysyms.h
tools/perf/util/hist.h

index fa21c5ae3a512bbb5b2f961a17667951378e5b11..ea673b7eb3f43bc8f4393e2c60932093cf6adc5e 100644 (file)
@@ -635,7 +635,7 @@ static int report__browse_hists(struct report *rep)
                 * Usually "ret" is the last pressed key, and we only
                 * care if the key notifies us to switch data file.
                 */
-               if (ret != K_SWITCH_INPUT_DATA)
+               if (ret != K_SWITCH_INPUT_DATA && ret != K_RELOAD)
                        ret = 0;
                break;
        case 2:
@@ -1480,7 +1480,7 @@ repeat:
                sort_order = sort_tmp;
        }
 
-       if ((last_key != K_SWITCH_INPUT_DATA) &&
+       if ((last_key != K_SWITCH_INPUT_DATA && last_key != K_RELOAD) &&
            (setup_sorting(session->evlist) < 0)) {
                if (sort_order)
                        parse_options_usage(report_usage, options, "s", 1);
@@ -1559,7 +1559,7 @@ repeat:
        sort__setup_elide(stdout);
 
        ret = __cmd_report(&report);
-       if (ret == K_SWITCH_INPUT_DATA) {
+       if (ret == K_SWITCH_INPUT_DATA || ret == K_RELOAD) {
                perf_session__delete(session);
                last_key = K_SWITCH_INPUT_DATA;
                goto repeat;
index 1103a019d83f48b587205cdc79b8e90f4bd6e344..9f3401fd2cf635e6446d9a68f66214560a3e5d4f 100644 (file)
@@ -3495,6 +3495,7 @@ browse_hists:
                                        pos = perf_evsel__prev(pos);
                                goto browse_hists;
                        case K_SWITCH_INPUT_DATA:
+                       case K_RELOAD:
                        case 'q':
                        case CTRL('c'):
                                goto out;
index fbfac29077f2d0aa7fff0efcd45becd68db1e9e8..04cc4e5c031fac49e9268c216a652d67e32d493b 100644 (file)
@@ -25,5 +25,6 @@
 #define K_ERROR         -2
 #define K_RESIZE -3
 #define K_SWITCH_INPUT_DATA -4
+#define K_RELOAD -5
 
 #endif /* _PERF_KEYSYMS_H_ */
index 0aa63aeb58ecf048e67401846986000b27b12f34..bb994e030495900d83c6d22d6061d60677713756 100644 (file)
@@ -536,6 +536,7 @@ static inline int block_hists_tui_browse(struct block_hist *bh __maybe_unused,
 #define K_LEFT  -1000
 #define K_RIGHT -2000
 #define K_SWITCH_INPUT_DATA -3000
+#define K_RELOAD -4000
 #endif
 
 unsigned int hists__sort_list_width(struct hists *hists);