Commit 5cb456af authored by Jin Yao's avatar Jin Yao Committed by Arnaldo Carvalho de Melo
Browse files

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: default avatarJin Yao <yao.jin@linux.intel.com>
Acked-by: default avatarJiri 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent bb1835a3
Loading
Loading
Loading
Loading
+55 −0
Original line number Diff line number Diff line
@@ -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;
}
+1 −64
Original line number Diff line number Diff line
@@ -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)
{
+12 −0
Original line number Diff line number Diff line
@@ -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