Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4610e413 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

perf ui browser: Handle K_RESIZE in dialog windows

Just provide wrappers for things like ui__warning, ui__dialog_yesno and
if they return K_RESIZE, refresh dimensions, redraw the entries, etc.

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-3ih7hyk9weryxaxb501sfq4u@git.kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 0458122d
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -47,19 +47,20 @@ int dump_printf(const char *fmt, ...)
}

#ifdef NO_NEWT_SUPPORT
void ui__warning(const char *format, ...)
int ui__warning(const char *format, ...)
{
	va_list args;

	va_start(args, format);
	vfprintf(stderr, format, args);
	va_end(args);
	return 0;
}
#endif

void ui__error_paranoid(void)
int ui__error_paranoid(void)
{
	ui__error("Permission error - are you root?\n"
	return ui__error("Permission error - are you root?\n"
		    "Consider tweaking /proc/sys/kernel/perf_event_paranoid:\n"
		    " -1 - Not paranoid at all\n"
		    "  0 - Disallow raw tracepoint access for unpriv\n"
+3 −3
Original line number Diff line number Diff line
@@ -27,10 +27,10 @@ static inline void ui_progress__update(u64 curr __used, u64 total __used,
extern char ui_helpline__last_msg[];
int ui_helpline__show_help(const char *format, va_list ap);
#include "ui/progress.h"
void ui__error(const char *format, ...) __attribute__((format(printf, 1, 2)));
int ui__error(const char *format, ...) __attribute__((format(printf, 1, 2)));
#endif

void ui__warning(const char *format, ...) __attribute__((format(printf, 1, 2)));
void ui__error_paranoid(void);
int ui__warning(const char *format, ...) __attribute__((format(printf, 1, 2)));
int ui__error_paranoid(void);

#endif	/* __PERF_DEBUG_H */
+40 −0
Original line number Diff line number Diff line
@@ -169,6 +169,46 @@ void ui_browser__refresh_dimensions(struct ui_browser *self)
	self->x = 0;
}

void ui_browser__handle_resize(struct ui_browser *browser)
{
	ui__refresh_dimensions(false);
	ui_browser__show(browser, browser->title, ui_helpline__current);
	ui_browser__refresh(browser);
}

int ui_browser__warning(struct ui_browser *browser, const char *format, ...)
{
	va_list args;
	int key;

	va_start(args, format);
	while ((key = __ui__warning("Warning!", format, args)) == K_RESIZE)
		ui_browser__handle_resize(browser);
	va_end(args);

	return key;
}

int ui_browser__help_window(struct ui_browser *browser, const char *text)
{
	int key;

	while ((key = ui__help_window(text)) == K_RESIZE)
		ui_browser__handle_resize(browser);

	return key;
}

bool ui_browser__dialog_yesno(struct ui_browser *browser, const char *text)
{
	int key;

	while ((key = ui__dialog_yesno(text)) == K_RESIZE)
		ui_browser__handle_resize(browser);

	return key == K_ENTER || toupper(key) == 'Y';
}

void ui_browser__reset_index(struct ui_browser *self)
{
	self->index = self->top_idx = 0;
+5 −0
Original line number Diff line number Diff line
@@ -43,6 +43,11 @@ void ui_browser__hide(struct ui_browser *self);
int ui_browser__refresh(struct ui_browser *self);
int ui_browser__run(struct ui_browser *browser, int delay_secs);
void ui_browser__update_nr_entries(struct ui_browser *browser, u32 nr_entries);
void ui_browser__handle_resize(struct ui_browser *browser);

int ui_browser__warning(struct ui_browser *browser, const char *format, ...);
int ui_browser__help_window(struct ui_browser *browser, const char *text);
bool ui_browser__dialog_yesno(struct ui_browser *browser, const char *text);

void ui_browser__argv_seek(struct ui_browser *browser, off_t offset, int whence);
unsigned int ui_browser__argv_refresh(struct ui_browser *browser);
+15 −7
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include "../browser.h"
#include "../helpline.h"
#include "../util.h"
#include "../ui.h"
#include "map.h"

struct hist_browser {
@@ -882,7 +883,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
			goto out_free_stack;
		case 'a':
			if (!browser->has_symbols) {
				ui__warning(
				ui_browser__warning(&browser->b,
			"Annotation is only available for symbolic views, "
			"include \"sym\" in --sort to use it.");
				continue;
@@ -900,7 +901,8 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
		case K_F1:
		case 'h':
		case '?':
			ui__help_window("h/?/F1        Show this window\n"
			ui_browser__help_window(&browser->b,
					"h/?/F1        Show this window\n"
					"UP/DOWN/PGUP\n"
					"PGDN/SPACE    Navigate\n"
					"q/ESC/CTRL+C  Exit browser\n\n"
@@ -939,7 +941,8 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
		}
		case K_ESC:
			if (!left_exits &&
			    !ui__dialog_yesno("Do you really want to exit?"))
			    !ui_browser__dialog_yesno(&browser->b,
					       "Do you really want to exit?"))
				continue;
			/* Fall thru */
		case 'q':
@@ -992,6 +995,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,

		if (choice == annotate) {
			struct hist_entry *he;
			int err;
do_annotate:
			he = hist_browser__selected_entry(browser);
			if (he == NULL)
@@ -1000,10 +1004,12 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
			 * Don't let this be freed, say, by hists__decay_entry.
			 */
			he->used = true;
			hist_entry__tui_annotate(he, evsel->idx, nr_events,
			err = hist_entry__tui_annotate(he, evsel->idx, nr_events,
						       timer, arg, delay_secs);
			he->used = false;
			ui_browser__update_nr_entries(&browser->b, browser->hists->nr_entries);
			if (err)
				ui_browser__handle_resize(&browser->b);
		} else if (choice == browse_map)
			map__browse(browser->selection->map);
		else if (choice == zoom_dso) {
@@ -1132,7 +1138,8 @@ static int perf_evsel_menu__run(struct perf_evsel_menu *menu,
					pos = list_entry(pos->node.prev, struct perf_evsel, node);
				goto browse_hists;
			case K_ESC:
				if (!ui__dialog_yesno("Do you really want to exit?"))
				if (!ui_browser__dialog_yesno(&menu->b,
						"Do you really want to exit?"))
					continue;
				/* Fall thru */
			case 'q':
@@ -1144,7 +1151,8 @@ static int perf_evsel_menu__run(struct perf_evsel_menu *menu,
		case K_LEFT:
			continue;
		case K_ESC:
			if (!ui__dialog_yesno("Do you really want to exit?"))
			if (!ui_browser__dialog_yesno(&menu->b,
					       "Do you really want to exit?"))
				continue;
			/* Fall thru */
		case 'q':
Loading