perf util: Move block TUI function to ui browsers
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>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
bb1835a3b8
commit
5cb456af99
@@ -3444,3 +3444,58 @@ single_entry:
|
|||||||
warn_lost_event,
|
warn_lost_event,
|
||||||
annotation_opts);
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include "map.h"
|
#include "map.h"
|
||||||
#include "srcline.h"
|
#include "srcline.h"
|
||||||
#include "evlist.h"
|
#include "evlist.h"
|
||||||
|
#include "hist.h"
|
||||||
#include "ui/browsers/hists.h"
|
#include "ui/browsers/hists.h"
|
||||||
|
|
||||||
static struct block_header_column {
|
static struct block_header_column {
|
||||||
@@ -439,70 +440,6 @@ struct block_report *block_info__create_report(struct evlist *evlist,
|
|||||||
return block_reports;
|
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,
|
int report__browse_block_hists(struct block_hist *bh, float min_percent,
|
||||||
struct evsel *evsel)
|
struct evsel *evsel)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -449,6 +449,8 @@ enum rstype {
|
|||||||
A_SOURCE
|
A_SOURCE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct block_hist;
|
||||||
|
|
||||||
#ifdef HAVE_SLANG_SUPPORT
|
#ifdef HAVE_SLANG_SUPPORT
|
||||||
#include "../ui/keysyms.h"
|
#include "../ui/keysyms.h"
|
||||||
void attr_to_script(char *buf, struct perf_event_attr *attr);
|
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,
|
int res_sample_browse(struct res_sample *res_samples, int num_res,
|
||||||
struct evsel *evsel, enum rstype rstype);
|
struct evsel *evsel, enum rstype rstype);
|
||||||
void res_sample_init(void);
|
void res_sample_init(void);
|
||||||
|
|
||||||
|
int block_hists_tui_browse(struct block_hist *bh, struct evsel *evsel,
|
||||||
|
float min_percent);
|
||||||
#else
|
#else
|
||||||
static inline
|
static inline
|
||||||
int perf_evlist__tui_browse_hists(struct evlist *evlist __maybe_unused,
|
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 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_LEFT -1000
|
||||||
#define K_RIGHT -2000
|
#define K_RIGHT -2000
|
||||||
#define K_SWITCH_INPUT_DATA -3000
|
#define K_SWITCH_INPUT_DATA -3000
|
||||||
|
|||||||
Reference in New Issue
Block a user