at v4.9-rc2 114 lines 2.2 kB view raw
1#include <pthread.h> 2#include <dlfcn.h> 3 4#include "../util/cache.h" 5#include "../util/debug.h" 6#include "../util/hist.h" 7 8pthread_mutex_t ui__lock = PTHREAD_MUTEX_INITIALIZER; 9void *perf_gtk_handle; 10 11#ifdef HAVE_GTK2_SUPPORT 12static int setup_gtk_browser(void) 13{ 14 int (*perf_ui_init)(void); 15 16 if (perf_gtk_handle) 17 return 0; 18 19 perf_gtk_handle = dlopen(PERF_GTK_DSO, RTLD_LAZY); 20 if (perf_gtk_handle == NULL) { 21 char buf[PATH_MAX]; 22 scnprintf(buf, sizeof(buf), "%s/%s", LIBDIR, PERF_GTK_DSO); 23 perf_gtk_handle = dlopen(buf, RTLD_LAZY); 24 } 25 if (perf_gtk_handle == NULL) 26 return -1; 27 28 perf_ui_init = dlsym(perf_gtk_handle, "perf_gtk__init"); 29 if (perf_ui_init == NULL) 30 goto out_close; 31 32 if (perf_ui_init() == 0) 33 return 0; 34 35out_close: 36 dlclose(perf_gtk_handle); 37 return -1; 38} 39 40static void exit_gtk_browser(bool wait_for_ok) 41{ 42 void (*perf_ui_exit)(bool); 43 44 if (perf_gtk_handle == NULL) 45 return; 46 47 perf_ui_exit = dlsym(perf_gtk_handle, "perf_gtk__exit"); 48 if (perf_ui_exit == NULL) 49 goto out_close; 50 51 perf_ui_exit(wait_for_ok); 52 53out_close: 54 dlclose(perf_gtk_handle); 55 56 perf_gtk_handle = NULL; 57} 58#else 59static inline int setup_gtk_browser(void) { return -1; } 60static inline void exit_gtk_browser(bool wait_for_ok __maybe_unused) {} 61#endif 62 63int stdio__config_color(const struct option *opt __maybe_unused, 64 const char *mode, int unset __maybe_unused) 65{ 66 perf_use_color_default = perf_config_colorbool("color.ui", mode, -1); 67 return 0; 68} 69 70void setup_browser(bool fallback_to_pager) 71{ 72 if (use_browser < 2 && (!isatty(1) || dump_trace)) 73 use_browser = 0; 74 75 /* default to TUI */ 76 if (use_browser < 0) 77 use_browser = 1; 78 79 switch (use_browser) { 80 case 2: 81 if (setup_gtk_browser() == 0) 82 break; 83 printf("GTK browser requested but could not find %s\n", 84 PERF_GTK_DSO); 85 sleep(1); 86 /* fall through */ 87 case 1: 88 use_browser = 1; 89 if (ui__init() == 0) 90 break; 91 /* fall through */ 92 default: 93 use_browser = 0; 94 if (fallback_to_pager) 95 setup_pager(); 96 break; 97 } 98} 99 100void exit_browser(bool wait_for_ok) 101{ 102 switch (use_browser) { 103 case 2: 104 exit_gtk_browser(wait_for_ok); 105 break; 106 107 case 1: 108 ui__exit(wait_for_ok); 109 break; 110 111 default: 112 break; 113 } 114}