From ca09b2e1b307724666577859eb460ac6d4c67330 Mon Sep 17 00:00:00 2001 From: Namhyung Kim Date: Mon, 30 Apr 2012 13:55:05 +0900 Subject: perf ui: Make setup_browser() generic The setup_browser contained newt-related codes in it. As gtk front-end added recently, it should be more generic to handle both cases properly. So move newt codes to the ui__init() for now. Signed-off-by: Namhyung Kim Acked-by: Pekka Enberg Cc: Ingo Molnar Cc: Namhyung Kim Cc: Paul Mackerras Cc: Pekka Enberg Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/1335761711-31403-2-git-send-email-namhyung.kim@lge.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/ui/setup.c | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) (limited to 'tools/perf/ui') diff --git a/tools/perf/ui/setup.c b/tools/perf/ui/setup.c index 85a69faa09aa..becdcd0d9ce7 100644 --- a/tools/perf/ui/setup.c +++ b/tools/perf/ui/setup.c @@ -93,14 +93,37 @@ static void newt_suspend(void *d __used) newtResume(); } +static void ui__exit(void); + +static void ui__signal(int sig) +{ + ui__exit(); + psignal(sig, "perf"); + exit(0); +} + static int ui__init(void) { - int err = SLkp_init(); + int err; - if (err < 0) + newtInit(); + err = SLkp_init(); + if (err < 0) { + pr_err("TUI initialization failed.\n"); goto out; + } SLkp_define_keysym((char *)"^(kB)", SL_KEY_UNTAB); + + newtSetSuspendCallback(newt_suspend, NULL); + ui_helpline__init(); + ui_browser__init(); + + signal(SIGSEGV, ui__signal); + signal(SIGFPE, ui__signal); + signal(SIGINT, ui__signal); + signal(SIGQUIT, ui__signal); + signal(SIGTERM, ui__signal); out: return err; } @@ -113,13 +136,6 @@ static void ui__exit(void) SLang_reset_tty(); } -static void ui__signal(int sig) -{ - ui__exit(); - psignal(sig, "perf"); - exit(0); -} - void setup_browser(bool fallback_to_pager) { if (!isatty(1) || !use_browser || dump_trace) { @@ -130,17 +146,7 @@ void setup_browser(bool fallback_to_pager) } use_browser = 1; - newtInit(); ui__init(); - newtSetSuspendCallback(newt_suspend, NULL); - ui_helpline__init(); - ui_browser__init(); - - signal(SIGSEGV, ui__signal); - signal(SIGFPE, ui__signal); - signal(SIGINT, ui__signal); - signal(SIGQUIT, ui__signal); - signal(SIGTERM, ui__signal); } void exit_browser(bool wait_for_ok) -- cgit v1.2.3 From 7706f966323f32f3ea13121b5918851432876ae5 Mon Sep 17 00:00:00 2001 From: Namhyung Kim Date: Mon, 30 Apr 2012 13:55:06 +0900 Subject: perf ui gtk: Drop arg[cv] arguments from perf_gtk_setup_browser() As perf doesn't allow to specify gtk command-line option, drop the arguments and pass NULL to gtk_init(). This makes the function easier to be called from setup_browser(). Signed-off-by: Namhyung Kim Acked-by: Pekka Enberg Cc: Ingo Molnar Cc: Namhyung Kim Cc: Paul Mackerras Cc: Pekka Enberg Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/1335761711-31403-3-git-send-email-namhyung.kim@lge.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-report.c | 2 +- tools/perf/ui/gtk/browser.c | 5 ++--- tools/perf/util/cache.h | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) (limited to 'tools/perf/ui') diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index cec2b8cee80c..2b20001848f5 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -678,7 +678,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __used) if (strcmp(report.input_name, "-") != 0) { if (report.use_gtk) - perf_gtk_setup_browser(argc, argv, true); + perf_gtk_setup_browser(true); else setup_browser(true); } else { diff --git a/tools/perf/ui/gtk/browser.c b/tools/perf/ui/gtk/browser.c index 258352a2356c..a1a83de3f459 100644 --- a/tools/perf/ui/gtk/browser.c +++ b/tools/perf/ui/gtk/browser.c @@ -9,10 +9,9 @@ #define MAX_COLUMNS 32 -void perf_gtk_setup_browser(int argc, const char *argv[], - bool fallback_to_pager __used) +void perf_gtk_setup_browser(bool fallback_to_pager __used) { - gtk_init(&argc, (char ***)&argv); + gtk_init(NULL, NULL); } void perf_gtk_exit_browser(bool wait_for_ok __used) diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h index 8dd224df3e54..d22ca689fb15 100644 --- a/tools/perf/util/cache.h +++ b/tools/perf/util/cache.h @@ -46,14 +46,14 @@ void exit_browser(bool wait_for_ok); #endif #ifdef NO_GTK2_SUPPORT -static inline void perf_gtk_setup_browser(int argc __used, const char *argv[] __used, bool fallback_to_pager) +static inline void perf_gtk_setup_browser(bool fallback_to_pager) { if (fallback_to_pager) setup_pager(); } static inline void perf_gtk_exit_browser(bool wait_for_ok __used) {} #else -void perf_gtk_setup_browser(int argc, const char *argv[], bool fallback_to_pager); +void perf_gtk_setup_browser(bool fallback_to_pager); void perf_gtk_exit_browser(bool wait_for_ok); #endif -- cgit v1.2.3 From 28e62b90d95a4ed8ae2ba93879003665051581a6 Mon Sep 17 00:00:00 2001 From: Namhyung Kim Date: Mon, 30 Apr 2012 13:55:07 +0900 Subject: perf ui gtk: Rename functions for consistency We use double underscore characters to distinguish its subsystem and actual function name. Signed-off-by: Namhyung Kim Acked-by: Pekka Enberg Cc: Ingo Molnar Cc: Namhyung Kim Cc: Paul Mackerras Cc: Pekka Enberg Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/1335761711-31403-4-git-send-email-namhyung.kim@lge.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-report.c | 2 +- tools/perf/ui/gtk/browser.c | 24 ++++++++++++------------ tools/perf/util/cache.h | 8 ++++---- 3 files changed, 17 insertions(+), 17 deletions(-) (limited to 'tools/perf/ui') diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 2b20001848f5..06115ffaa0b4 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -678,7 +678,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __used) if (strcmp(report.input_name, "-") != 0) { if (report.use_gtk) - perf_gtk_setup_browser(true); + perf_gtk__setup_browser(true); else setup_browser(true); } else { diff --git a/tools/perf/ui/gtk/browser.c b/tools/perf/ui/gtk/browser.c index a1a83de3f459..5eafd9b3b783 100644 --- a/tools/perf/ui/gtk/browser.c +++ b/tools/perf/ui/gtk/browser.c @@ -9,23 +9,23 @@ #define MAX_COLUMNS 32 -void perf_gtk_setup_browser(bool fallback_to_pager __used) +void perf_gtk__setup_browser(bool fallback_to_pager __used) { gtk_init(NULL, NULL); } -void perf_gtk_exit_browser(bool wait_for_ok __used) +void perf_gtk__exit_browser(bool wait_for_ok __used) { gtk_main_quit(); } -static void perf_gtk_signal(int sig) +static void perf_gtk__signal(int sig) { psignal(sig, "perf"); gtk_main_quit(); } -static void perf_gtk_resize_window(GtkWidget *window) +static void perf_gtk__resize_window(GtkWidget *window) { GdkRectangle rect; GdkScreen *screen; @@ -45,7 +45,7 @@ static void perf_gtk_resize_window(GtkWidget *window) gtk_window_resize(GTK_WINDOW(window), width, height); } -static void perf_gtk_show_hists(GtkWidget *window, struct hists *hists) +static void perf_gtk__show_hists(GtkWidget *window, struct hists *hists) { GType col_types[MAX_COLUMNS]; GtkCellRenderer *renderer; @@ -141,11 +141,11 @@ int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist, GtkWidget *notebook; GtkWidget *window; - signal(SIGSEGV, perf_gtk_signal); - signal(SIGFPE, perf_gtk_signal); - signal(SIGINT, perf_gtk_signal); - signal(SIGQUIT, perf_gtk_signal); - signal(SIGTERM, perf_gtk_signal); + signal(SIGSEGV, perf_gtk__signal); + signal(SIGFPE, perf_gtk__signal); + signal(SIGINT, perf_gtk__signal); + signal(SIGQUIT, perf_gtk__signal); + signal(SIGTERM, perf_gtk__signal); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); @@ -167,7 +167,7 @@ int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - perf_gtk_show_hists(scrolled_window, hists); + perf_gtk__show_hists(scrolled_window, hists); tab_label = gtk_label_new(evname); @@ -178,7 +178,7 @@ int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist, gtk_widget_show_all(window); - perf_gtk_resize_window(window); + perf_gtk__resize_window(window); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h index d22ca689fb15..3428b777396d 100644 --- a/tools/perf/util/cache.h +++ b/tools/perf/util/cache.h @@ -46,15 +46,15 @@ void exit_browser(bool wait_for_ok); #endif #ifdef NO_GTK2_SUPPORT -static inline void perf_gtk_setup_browser(bool fallback_to_pager) +static inline void perf_gtk__setup_browser(bool fallback_to_pager) { if (fallback_to_pager) setup_pager(); } -static inline void perf_gtk_exit_browser(bool wait_for_ok __used) {} +static inline void perf_gtk__exit_browser(bool wait_for_ok __used) {} #else -void perf_gtk_setup_browser(bool fallback_to_pager); -void perf_gtk_exit_browser(bool wait_for_ok); +void perf_gtk__setup_browser(bool fallback_to_pager); +void perf_gtk__exit_browser(bool wait_for_ok); #endif char *alias_lookup(const char *alias); -- cgit v1.2.3 From 281ef544a8476f750b9f378593c42b3e8a0b8788 Mon Sep 17 00:00:00 2001 From: Namhyung Kim Date: Mon, 30 Apr 2012 13:55:08 +0900 Subject: perf ui: Add gtk2 support into setup_browser() Now setup_browser can handle gtk2 front-end so split the TUI code to ui/tui/setup.c in order to remove dependency. To this end, make ui__init/exit global symbols and take an argument. Also split gtk code to ui/gtk/setup.c. Signed-off-by: Namhyung Kim Acked-by: Pekka Enberg Cc: Ingo Molnar Cc: Namhyung Kim Cc: Paul Mackerras Cc: Pekka Enberg Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/1335761711-31403-5-git-send-email-namhyung.kim@lge.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/Makefile | 6 ++ tools/perf/builtin-report.c | 10 +-- tools/perf/ui/gtk/browser.c | 10 --- tools/perf/ui/gtk/setup.c | 12 ++++ tools/perf/ui/setup.c | 169 +++++++------------------------------------- tools/perf/ui/tui/setup.c | 140 ++++++++++++++++++++++++++++++++++++ tools/perf/util/cache.h | 23 ++++-- 7 files changed, 205 insertions(+), 165 deletions(-) create mode 100644 tools/perf/ui/gtk/setup.c create mode 100644 tools/perf/ui/tui/setup.c (limited to 'tools/perf/ui') diff --git a/tools/perf/Makefile b/tools/perf/Makefile index 4122a668952e..4734f41f801d 100644 --- a/tools/perf/Makefile +++ b/tools/perf/Makefile @@ -483,6 +483,7 @@ else LIB_OBJS += $(OUTPUT)ui/helpline.o LIB_OBJS += $(OUTPUT)ui/progress.o LIB_OBJS += $(OUTPUT)ui/util.o + LIB_OBJS += $(OUTPUT)ui/tui/setup.o LIB_H += ui/browser.h LIB_H += ui/browsers/map.h LIB_H += ui/helpline.h @@ -505,6 +506,11 @@ else BASIC_CFLAGS += $(shell pkg-config --cflags gtk+-2.0) EXTLIBS += $(shell pkg-config --libs gtk+-2.0) LIB_OBJS += $(OUTPUT)ui/gtk/browser.o + LIB_OBJS += $(OUTPUT)ui/gtk/setup.o + # Make sure that it'd be included only once. + ifneq ($(findstring -DNO_NEWT_SUPPORT,$(BASIC_CFLAGS)),) + LIB_OBJS += $(OUTPUT)ui/setup.o + endif endif endif diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 06115ffaa0b4..5df829f5bbf4 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -676,14 +676,10 @@ int cmd_report(int argc, const char **argv, const char *prefix __used) } - if (strcmp(report.input_name, "-") != 0) { - if (report.use_gtk) - perf_gtk__setup_browser(true); - else - setup_browser(true); - } else { + if (strcmp(report.input_name, "-") != 0) + setup_browser(true); + else use_browser = 0; - } /* * Only in the newt browser we are doing integrated annotation, diff --git a/tools/perf/ui/gtk/browser.c b/tools/perf/ui/gtk/browser.c index 5eafd9b3b783..0656c381a89c 100644 --- a/tools/perf/ui/gtk/browser.c +++ b/tools/perf/ui/gtk/browser.c @@ -9,16 +9,6 @@ #define MAX_COLUMNS 32 -void perf_gtk__setup_browser(bool fallback_to_pager __used) -{ - gtk_init(NULL, NULL); -} - -void perf_gtk__exit_browser(bool wait_for_ok __used) -{ - gtk_main_quit(); -} - static void perf_gtk__signal(int sig) { psignal(sig, "perf"); diff --git a/tools/perf/ui/gtk/setup.c b/tools/perf/ui/gtk/setup.c new file mode 100644 index 000000000000..8c3b573e863d --- /dev/null +++ b/tools/perf/ui/gtk/setup.c @@ -0,0 +1,12 @@ +#include "gtk.h" +#include "../../util/cache.h" + +void perf_gtk__init(bool fallback_to_pager __used) +{ + gtk_init(NULL, NULL); +} + +void perf_gtk__exit(bool wait_for_ok __used) +{ + gtk_main_quit(); +} diff --git a/tools/perf/ui/setup.c b/tools/perf/ui/setup.c index becdcd0d9ce7..98130e099a0d 100644 --- a/tools/perf/ui/setup.c +++ b/tools/perf/ui/setup.c @@ -1,161 +1,44 @@ -#include -#include -#include - #include "../cache.h" #include "../debug.h" -#include "browser.h" -#include "helpline.h" -#include "ui.h" -#include "util.h" -#include "libslang.h" -#include "keysyms.h" - -pthread_mutex_t ui__lock = PTHREAD_MUTEX_INITIALIZER; - -static volatile int ui__need_resize; - -void ui__refresh_dimensions(bool force) -{ - if (force || ui__need_resize) { - ui__need_resize = 0; - pthread_mutex_lock(&ui__lock); - SLtt_get_screen_size(); - SLsmg_reinit_smg(); - pthread_mutex_unlock(&ui__lock); - } -} - -static void ui__sigwinch(int sig __used) -{ - ui__need_resize = 1; -} - -static void ui__setup_sigwinch(void) -{ - static bool done; - - if (done) - return; - - done = true; - pthread__unblock_sigwinch(); - signal(SIGWINCH, ui__sigwinch); -} - -int ui__getch(int delay_secs) -{ - struct timeval timeout, *ptimeout = delay_secs ? &timeout : NULL; - fd_set read_set; - int err, key; - - ui__setup_sigwinch(); - - FD_ZERO(&read_set); - FD_SET(0, &read_set); - - if (delay_secs) { - timeout.tv_sec = delay_secs; - timeout.tv_usec = 0; - } - - err = select(1, &read_set, NULL, NULL, ptimeout); - - if (err == 0) - return K_TIMER; - - if (err == -1) { - if (errno == EINTR) - return K_RESIZE; - return K_ERROR; - } - key = SLang_getkey(); - if (key != K_ESC) - return key; - FD_ZERO(&read_set); - FD_SET(0, &read_set); - timeout.tv_sec = 0; - timeout.tv_usec = 20; - err = select(1, &read_set, NULL, NULL, &timeout); - if (err == 0) - return K_ESC; - - SLang_ungetkey(key); - return SLkp_getkey(); -} - -static void newt_suspend(void *d __used) -{ - newtSuspend(); - raise(SIGTSTP); - newtResume(); -} - -static void ui__exit(void); - -static void ui__signal(int sig) -{ - ui__exit(); - psignal(sig, "perf"); - exit(0); -} - -static int ui__init(void) +void setup_browser(bool fallback_to_pager) { - int err; - - newtInit(); - err = SLkp_init(); - if (err < 0) { - pr_err("TUI initialization failed.\n"); - goto out; - } - - SLkp_define_keysym((char *)"^(kB)", SL_KEY_UNTAB); + if (!isatty(1) || dump_trace) + use_browser = 0; - newtSetSuspendCallback(newt_suspend, NULL); - ui_helpline__init(); - ui_browser__init(); + /* default to TUI */ + if (use_browser < 0) + use_browser = 1; - signal(SIGSEGV, ui__signal); - signal(SIGFPE, ui__signal); - signal(SIGINT, ui__signal); - signal(SIGQUIT, ui__signal); - signal(SIGTERM, ui__signal); -out: - return err; -} + switch (use_browser) { + case 2: + perf_gtk__init(fallback_to_pager); + break; -static void ui__exit(void) -{ - SLtt_set_cursor_visibility(1); - SLsmg_refresh(); - SLsmg_reset_smg(); - SLang_reset_tty(); -} + case 1: + ui__init(fallback_to_pager); + break; -void setup_browser(bool fallback_to_pager) -{ - if (!isatty(1) || !use_browser || dump_trace) { - use_browser = 0; + default: if (fallback_to_pager) setup_pager(); - return; + break; } - - use_browser = 1; - ui__init(); } void exit_browser(bool wait_for_ok) { - if (use_browser > 0) { - if (wait_for_ok) - ui__question_window("Fatal Error", - ui_helpline__last_msg, - "Press any key...", 0); - ui__exit(); + switch (use_browser) { + case 2: + perf_gtk__exit(wait_for_ok); + break; + + case 1: + ui__exit(wait_for_ok); + break; + + default: + break; } } diff --git a/tools/perf/ui/tui/setup.c b/tools/perf/ui/tui/setup.c new file mode 100644 index 000000000000..0194cea2ea0e --- /dev/null +++ b/tools/perf/ui/tui/setup.c @@ -0,0 +1,140 @@ +#include +#include +#include + +#include "../../util/cache.h" +#include "../../util/debug.h" +#include "../browser.h" +#include "../helpline.h" +#include "../ui.h" +#include "../util.h" +#include "../libslang.h" +#include "../keysyms.h" + +pthread_mutex_t ui__lock = PTHREAD_MUTEX_INITIALIZER; + +static volatile int ui__need_resize; + +void ui__refresh_dimensions(bool force) +{ + if (force || ui__need_resize) { + ui__need_resize = 0; + pthread_mutex_lock(&ui__lock); + SLtt_get_screen_size(); + SLsmg_reinit_smg(); + pthread_mutex_unlock(&ui__lock); + } +} + +static void ui__sigwinch(int sig __used) +{ + ui__need_resize = 1; +} + +static void ui__setup_sigwinch(void) +{ + static bool done; + + if (done) + return; + + done = true; + pthread__unblock_sigwinch(); + signal(SIGWINCH, ui__sigwinch); +} + +int ui__getch(int delay_secs) +{ + struct timeval timeout, *ptimeout = delay_secs ? &timeout : NULL; + fd_set read_set; + int err, key; + + ui__setup_sigwinch(); + + FD_ZERO(&read_set); + FD_SET(0, &read_set); + + if (delay_secs) { + timeout.tv_sec = delay_secs; + timeout.tv_usec = 0; + } + + err = select(1, &read_set, NULL, NULL, ptimeout); + + if (err == 0) + return K_TIMER; + + if (err == -1) { + if (errno == EINTR) + return K_RESIZE; + return K_ERROR; + } + + key = SLang_getkey(); + if (key != K_ESC) + return key; + + FD_ZERO(&read_set); + FD_SET(0, &read_set); + timeout.tv_sec = 0; + timeout.tv_usec = 20; + err = select(1, &read_set, NULL, NULL, &timeout); + if (err == 0) + return K_ESC; + + SLang_ungetkey(key); + return SLkp_getkey(); +} + +static void newt_suspend(void *d __used) +{ + newtSuspend(); + raise(SIGTSTP); + newtResume(); +} + +static void ui__signal(int sig) +{ + ui__exit(false); + psignal(sig, "perf"); + exit(0); +} + +int ui__init(bool fallback_to_pager __used) +{ + int err; + + newtInit(); + err = SLkp_init(); + if (err < 0) { + pr_err("TUI initialization failed.\n"); + goto out; + } + + SLkp_define_keysym((char *)"^(kB)", SL_KEY_UNTAB); + + newtSetSuspendCallback(newt_suspend, NULL); + ui_helpline__init(); + ui_browser__init(); + + signal(SIGSEGV, ui__signal); + signal(SIGFPE, ui__signal); + signal(SIGINT, ui__signal); + signal(SIGQUIT, ui__signal); + signal(SIGTERM, ui__signal); +out: + return err; +} + +void ui__exit(bool wait_for_ok) +{ + if (wait_for_ok) + ui__question_window("Fatal Error", + ui_helpline__last_msg, + "Press any key...", 0); + + SLtt_set_cursor_visibility(1); + SLsmg_refresh(); + SLsmg_reset_smg(); + SLang_reset_tty(); +} diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h index 3428b777396d..761d4e998101 100644 --- a/tools/perf/util/cache.h +++ b/tools/perf/util/cache.h @@ -33,7 +33,7 @@ extern int pager_use_color; extern int use_browser; -#ifdef NO_NEWT_SUPPORT +#if defined(NO_NEWT_SUPPORT) && defined(NO_GTK2_SUPPORT) static inline void setup_browser(bool fallback_to_pager) { if (fallback_to_pager) @@ -43,19 +43,32 @@ static inline void exit_browser(bool wait_for_ok __used) {} #else void setup_browser(bool fallback_to_pager); void exit_browser(bool wait_for_ok); + +#ifdef NO_NEWT_SUPPORT +static inline int ui__init(bool fallback_to_pager) +{ + if (fallback_to_pager) + setup_pager(); + return 0; +} +static inline void ui__exit(bool wait_for_ok __used) {} +#else +int ui__init(bool fallback_to_pager); +void ui__exit(bool wait_for_ok); #endif #ifdef NO_GTK2_SUPPORT -static inline void perf_gtk__setup_browser(bool fallback_to_pager) +static inline void perf_gtk__init(bool fallback_to_pager) { if (fallback_to_pager) setup_pager(); } -static inline void perf_gtk__exit_browser(bool wait_for_ok __used) {} +static inline void perf_gtk__exit(bool wait_for_ok __used) {} #else -void perf_gtk__setup_browser(bool fallback_to_pager); -void perf_gtk__exit_browser(bool wait_for_ok); +void perf_gtk__init(bool fallback_to_pager); +void perf_gtk__exit(bool wait_for_ok); #endif +#endif /* NO_NEWT_SUPPORT && NO_GTK2_SUPPORT */ char *alias_lookup(const char *alias); int split_cmdline(char *cmdline, const char ***argv); -- cgit v1.2.3 From dc41b9b8f02dbe2228ae787d525dac43beebb7fa Mon Sep 17 00:00:00 2001 From: Namhyung Kim Date: Mon, 30 Apr 2012 13:55:09 +0900 Subject: perf ui: Change fallback policy of setup_browser() If gtk2 support is not enabled (or failed for some reason) try TUI again instead of falling directly back to the stdio interface. Signed-off-by: Namhyung Kim Acked-by: Pekka Enberg Cc: Ingo Molnar Cc: Namhyung Kim Cc: Paul Mackerras Cc: Pekka Enberg Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/1335761711-31403-6-git-send-email-namhyung.kim@lge.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/ui/gtk/setup.c | 4 ++-- tools/perf/ui/setup.c | 13 +++++++------ tools/perf/ui/tui/setup.c | 2 +- tools/perf/util/cache.h | 15 ++++++--------- 4 files changed, 16 insertions(+), 18 deletions(-) (limited to 'tools/perf/ui') diff --git a/tools/perf/ui/gtk/setup.c b/tools/perf/ui/gtk/setup.c index 8c3b573e863d..829529957766 100644 --- a/tools/perf/ui/gtk/setup.c +++ b/tools/perf/ui/gtk/setup.c @@ -1,9 +1,9 @@ #include "gtk.h" #include "../../util/cache.h" -void perf_gtk__init(bool fallback_to_pager __used) +int perf_gtk__init(void) { - gtk_init(NULL, NULL); + return gtk_init_check(NULL, NULL) ? 0 : -1; } void perf_gtk__exit(bool wait_for_ok __used) diff --git a/tools/perf/ui/setup.c b/tools/perf/ui/setup.c index 98130e099a0d..9f5f888f73e3 100644 --- a/tools/perf/ui/setup.c +++ b/tools/perf/ui/setup.c @@ -13,13 +13,14 @@ void setup_browser(bool fallback_to_pager) switch (use_browser) { case 2: - perf_gtk__init(fallback_to_pager); - break; - + if (perf_gtk__init() == 0) + break; + /* fall through */ case 1: - ui__init(fallback_to_pager); - break; - + use_browser = 1; + if (ui__init() == 0) + break; + /* fall through */ default: if (fallback_to_pager) setup_pager(); diff --git a/tools/perf/ui/tui/setup.c b/tools/perf/ui/tui/setup.c index 0194cea2ea0e..d33e943ac434 100644 --- a/tools/perf/ui/tui/setup.c +++ b/tools/perf/ui/tui/setup.c @@ -100,7 +100,7 @@ static void ui__signal(int sig) exit(0); } -int ui__init(bool fallback_to_pager __used) +int ui__init(void) { int err; diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h index 761d4e998101..cff18c617d13 100644 --- a/tools/perf/util/cache.h +++ b/tools/perf/util/cache.h @@ -45,27 +45,24 @@ void setup_browser(bool fallback_to_pager); void exit_browser(bool wait_for_ok); #ifdef NO_NEWT_SUPPORT -static inline int ui__init(bool fallback_to_pager) +static inline int ui__init(void) { - if (fallback_to_pager) - setup_pager(); - return 0; + return -1; } static inline void ui__exit(bool wait_for_ok __used) {} #else -int ui__init(bool fallback_to_pager); +int ui__init(void); void ui__exit(bool wait_for_ok); #endif #ifdef NO_GTK2_SUPPORT -static inline void perf_gtk__init(bool fallback_to_pager) +static inline int perf_gtk__init(void) { - if (fallback_to_pager) - setup_pager(); + return -1; } static inline void perf_gtk__exit(bool wait_for_ok __used) {} #else -void perf_gtk__init(bool fallback_to_pager); +int perf_gtk__init(void); void perf_gtk__exit(bool wait_for_ok); #endif #endif /* NO_NEWT_SUPPORT && NO_GTK2_SUPPORT */ -- cgit v1.2.3 From f6c1be2711333b40d7940ff87e3509b4cd278195 Mon Sep 17 00:00:00 2001 From: David Ahern Date: Tue, 8 May 2012 15:01:19 -0600 Subject: perf annotate: shorten helpline so it fits in visible space Additional toggles have pushed the help line out of view on a modestly sized terminal (120 columns wide). Shorten it to just reminders. Signed-off-by: David Ahern Link: http://lkml.kernel.org/r/1336510879-64610-1-git-send-email-dsahern@gmail.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/ui/browsers/annotate.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tools/perf/ui') diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/annotate.c index 4db5186472b5..a299290d0460 100644 --- a/tools/perf/ui/browsers/annotate.c +++ b/tools/perf/ui/browsers/annotate.c @@ -491,9 +491,9 @@ static int annotate_browser__run(struct annotate_browser *self, int evidx, struct map_symbol *ms = self->b.priv; struct symbol *sym = ms->sym; const char *help = "<-/ESC: Exit, TAB/shift+TAB: Cycle hot lines, " - "H: Go to hottest line, ->/ENTER: Line action, " - "O: Toggle offset view, " - "S: Toggle source code view"; + "H: Hottest line, ->/ENTER: Line action, " + "O: Offset view, " + "S: Source view"; int key; if (ui_browser__show(&self->b, sym->name, help) < 0) -- cgit v1.2.3 From 5a5626b1b4bf8467891c9297ffda979db97ed5ec Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Wed, 9 May 2012 12:21:22 -0300 Subject: perf hists browser: Use '/' for search/filter instead of 's' That is what is used in vi and mutt, and as well on the 'annotate' browser. Eventually we can have keymappings to make people used to other key associations more confortable. Suggested-by: Ingo Molnar Cc: David Ahern Cc: Frederic Weisbecker Cc: Mike Galbraith Cc: Namhyung Kim Cc: Paul Mackerras Cc: Peter Zijlstra Cc: Stephane Eranian Link: http://lkml.kernel.org/n/tip-fyln9286b8gx5q4n277l0djs@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/ui/browsers/hists.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tools/perf/ui') diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index 466827e91b87..a372a4b02635 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c @@ -941,7 +941,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events, goto zoom_dso; case 't': goto zoom_thread; - case 's': + case '/': if (ui_browser__input_window("Symbol to show", "Please enter the name of symbol you want to see", buf, "ENTER: OK, ESC: Cancel", @@ -969,7 +969,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events, "E Expand all callchains\n" "d Zoom into current DSO\n" "t Zoom into current Thread\n" - "s Filter symbol by name"); + "/ Filter symbol by name"); continue; case K_ENTER: case K_RIGHT: -- cgit v1.2.3