Commit | Line | Data |
---|---|---|
0985a948 | 1 | #include <pthread.h> |
fc67297b | 2 | #include <dlfcn.h> |
0985a948 | 3 | |
ea251d51 NK |
4 | #include "../util/cache.h" |
5 | #include "../util/debug.h" | |
6 | #include "../util/hist.h" | |
71172ed9 | 7 | |
0985a948 | 8 | pthread_mutex_t ui__lock = PTHREAD_MUTEX_INITIALIZER; |
fc67297b NK |
9 | void *perf_gtk_handle; |
10 | ||
11 | #ifdef HAVE_GTK2_SUPPORT | |
12 | static 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 | ||
35 | out_close: | |
36 | dlclose(perf_gtk_handle); | |
37 | return -1; | |
38 | } | |
39 | ||
40 | static 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 | ||
53 | out_close: | |
54 | dlclose(perf_gtk_handle); | |
55 | ||
56 | perf_gtk_handle = NULL; | |
57 | } | |
58 | #else | |
59 | static inline int setup_gtk_browser(void) { return -1; } | |
60 | static inline void exit_gtk_browser(bool wait_for_ok __maybe_unused) {} | |
61 | #endif | |
0985a948 | 62 | |
c09615f2 ACM |
63 | int 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 | ||
281ef544 | 70 | void setup_browser(bool fallback_to_pager) |
cf958003 | 71 | { |
2b676bf0 | 72 | if (use_browser < 2 && (!isatty(1) || dump_trace)) |
281ef544 | 73 | use_browser = 0; |
ca09b2e1 | 74 | |
281ef544 NK |
75 | /* default to TUI */ |
76 | if (use_browser < 0) | |
77 | use_browser = 1; | |
ca09b2e1 | 78 | |
281ef544 NK |
79 | switch (use_browser) { |
80 | case 2: | |
fc67297b | 81 | if (setup_gtk_browser() == 0) |
dc41b9b8 | 82 | break; |
fc67297b NK |
83 | printf("GTK browser requested but could not find %s\n", |
84 | PERF_GTK_DSO); | |
85 | sleep(1); | |
dc41b9b8 | 86 | /* fall through */ |
281ef544 | 87 | case 1: |
dc41b9b8 NK |
88 | use_browser = 1; |
89 | if (ui__init() == 0) | |
90 | break; | |
91 | /* fall through */ | |
281ef544 | 92 | default: |
21f0d423 | 93 | use_browser = 0; |
229ade9b ACM |
94 | if (fallback_to_pager) |
95 | setup_pager(); | |
281ef544 | 96 | break; |
1e6dd077 | 97 | } |
1e6dd077 ACM |
98 | } |
99 | ||
100 | void exit_browser(bool wait_for_ok) | |
101 | { | |
281ef544 NK |
102 | switch (use_browser) { |
103 | case 2: | |
fc67297b | 104 | exit_gtk_browser(wait_for_ok); |
281ef544 NK |
105 | break; |
106 | ||
107 | case 1: | |
108 | ui__exit(wait_for_ok); | |
109 | break; | |
110 | ||
111 | default: | |
112 | break; | |
1e6dd077 ACM |
113 | } |
114 | } |