perf util: Move block TUI function to ui browsers
authorJin Yao <yao.jin@linux.intel.com>
Mon, 18 Nov 2019 14:08:48 +0000 (22:08 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 19 Nov 2019 22:33:40 +0000 (19:33 -0300)
It would be nice if we could jump to the assembler/source view (like the
normal perf report) from total cycles view.

This patch moves the block_hists_tui_browse from block-info.c to
ui/browsers/hists.c in order to reuse some browser codes (i.e
do_annotate) for implementing new annotation view.

 v2:
 ---
 Fix the 'make NO_SLANG=1' error. (Change 'int block_hists_tui_browse()'
 to 'static inline int block_hists_tui_browse()')

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
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-1-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/ui/browsers/hists.c
tools/perf/util/block-info.c
tools/perf/util/hist.h

index 4d2d0acfd41a219a467ed05a3549ecc8507d7505..87405dc4750c04079497ebe76cb951082ba8d3c0 100644 (file)
@@ -3444,3 +3444,58 @@ single_entry:
                                               warn_lost_event,
                                               annotation_opts);
 }
+
+static int block_hists_browser__title(struct hist_browser *browser, char *bf,
+                                     size_t size)
+{
+       struct hists *hists = evsel__hists(browser->block_evsel);
+       const char *evname = perf_evsel__name(browser->block_evsel);
+       unsigned long nr_samples = hists->stats.nr_events[PERF_RECORD_SAMPLE];
+       int ret;
+
+       ret = scnprintf(bf, size, "# Samples: %lu", nr_samples);
+       if (evname)
+               scnprintf(bf + ret, size -  ret, " of event '%s'", evname);
+
+       return 0;
+}
+
+int block_hists_tui_browse(struct block_hist *bh, struct evsel *evsel,
+                          float min_percent)
+{
+       struct hists *hists = &bh->block_hists;
+       struct hist_browser *browser;
+       int key = -1;
+       static const char help[] =
+       " q             Quit \n";
+
+       browser = hist_browser__new(hists);
+       if (!browser)
+               return -1;
+
+       browser->block_evsel = evsel;
+       browser->title = block_hists_browser__title;
+       browser->min_pcnt = min_percent;
+
+       /* reset abort key so that it can get Ctrl-C as a key */
+       SLang_reset_tty();
+       SLang_init_tty(0, 0, 0);
+
+       while (1) {
+               key = hist_browser__run(browser, "? - help", true);
+
+               switch (key) {
+               case 'q':
+                       goto out;
+               case '?':
+                       ui_browser__help_window(&browser->b, help);
+                       break;
+               default:
+                       break;
+               }
+       }
+
+out:
+       hist_browser__delete(browser);
+       return 0;
+}
index 9abc201ebe63937342dc2d04612e32e36a210573..5887f8f9149fd8f2eb2610f96d48c753bb44eb6c 100644 (file)
@@ -10,6 +10,7 @@
 #include "map.h"
 #include "srcline.h"
 #include "evlist.h"
+#include "hist.h"
 #include "ui/browsers/hists.h"
 
 static struct block_header_column {
@@ -439,70 +440,6 @@ struct block_report *block_info__create_report(struct evlist *evlist,
        return block_reports;
 }
 
-#ifdef HAVE_SLANG_SUPPORT
-static int block_hists_browser__title(struct hist_browser *browser, char *bf,
-                                     size_t size)
-{
-       struct hists *hists = evsel__hists(browser->block_evsel);
-       const char *evname = perf_evsel__name(browser->block_evsel);
-       unsigned long nr_samples = hists->stats.nr_events[PERF_RECORD_SAMPLE];
-       int ret;
-
-       ret = scnprintf(bf, size, "# Samples: %lu", nr_samples);
-       if (evname)
-               scnprintf(bf + ret, size -  ret, " of event '%s'", evname);
-
-       return 0;
-}
-
-static int block_hists_tui_browse(struct block_hist *bh, struct evsel *evsel,
-                                 float min_percent)
-{
-       struct hists *hists = &bh->block_hists;
-       struct hist_browser *browser;
-       int key = -1;
-       static const char help[] =
-       " q             Quit \n";
-
-       browser = hist_browser__new(hists);
-       if (!browser)
-               return -1;
-
-       browser->block_evsel = evsel;
-       browser->title = block_hists_browser__title;
-       browser->min_pcnt = min_percent;
-
-       /* reset abort key so that it can get Ctrl-C as a key */
-       SLang_reset_tty();
-       SLang_init_tty(0, 0, 0);
-
-       while (1) {
-               key = hist_browser__run(browser, "? - help", true);
-
-               switch (key) {
-               case 'q':
-                       goto out;
-               case '?':
-                       ui_browser__help_window(&browser->b, help);
-                       break;
-               default:
-                       break;
-               }
-       }
-
-out:
-       hist_browser__delete(browser);
-       return 0;
-}
-#else
-static int block_hists_tui_browse(struct block_hist *bh __maybe_unused,
-                                 struct evsel *evsel __maybe_unused,
-                                 float min_percent __maybe_unused)
-{
-       return 0;
-}
-#endif
-
 int report__browse_block_hists(struct block_hist *bh, float min_percent,
                               struct evsel *evsel)
 {
index 4d87c7b4c1b263bb5550e77092b19457ccbee676..2aca8ce16b2cd56f429374ce68b78840d7648819 100644 (file)
@@ -449,6 +449,8 @@ enum rstype {
        A_SOURCE
 };
 
+struct block_hist;
+
 #ifdef HAVE_SLANG_SUPPORT
 #include "../ui/keysyms.h"
 void attr_to_script(char *buf, struct perf_event_attr *attr);
@@ -474,6 +476,9 @@ void run_script(char *cmd);
 int res_sample_browse(struct res_sample *res_samples, int num_res,
                      struct evsel *evsel, enum rstype rstype);
 void res_sample_init(void);
+
+int block_hists_tui_browse(struct block_hist *bh, struct evsel *evsel,
+                          float min_percent);
 #else
 static inline
 int perf_evlist__tui_browse_hists(struct evlist *evlist __maybe_unused,
@@ -518,6 +523,13 @@ static inline int res_sample_browse(struct res_sample *res_samples __maybe_unuse
 
 static inline void res_sample_init(void) {}
 
+static inline int block_hists_tui_browse(struct block_hist *bh __maybe_unused,
+                                        struct evsel *evsel __maybe_unused,
+                                        float min_percent __maybe_unused)
+{
+       return 0;
+}
+
 #define K_LEFT  -1000
 #define K_RIGHT -2000
 #define K_SWITCH_INPUT_DATA -3000