Linux Audio

Check our new training course

Loading...
v3.5.6
 1#include "../cache.h"
 2#include "../debug.h"
 
 
 3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 4
 5void setup_browser(bool fallback_to_pager)
 6{
 7	if (!isatty(1) || dump_trace)
 
 8		use_browser = 0;
 9
10	/* default to TUI */
11	if (use_browser < 0)
12		use_browser = 1;
13
14	switch (use_browser) {
15	case 2:
16		if (perf_gtk__init() == 0)
17			break;
 
 
 
 
18		/* fall through */
19	case 1:
20		use_browser = 1;
21		if (ui__init() == 0)
22			break;
23		/* fall through */
24	default:
25		use_browser = 0;
26		if (fallback_to_pager)
27			setup_pager();
28		break;
29	}
30}
31
32void exit_browser(bool wait_for_ok)
33{
34	switch (use_browser) {
35	case 2:
36		perf_gtk__exit(wait_for_ok);
37		break;
38
39	case 1:
40		ui__exit(wait_for_ok);
41		break;
42
43	default:
44		break;
45	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46}
v6.13.7
  1// SPDX-License-Identifier: GPL-2.0
  2#include <dlfcn.h>
  3#include <signal.h>
  4#include <unistd.h>
  5
  6#include <subcmd/pager.h>
  7#include "../util/debug.h"
  8#include "../util/hist.h"
  9#include "ui.h"
 10
 11struct mutex ui__lock;
 12void *perf_gtk_handle;
 13int use_browser = -1;
 14
 15#define PERF_GTK_DSO "libperf-gtk.so"
 16
 17#ifdef HAVE_GTK2_SUPPORT
 18
 19static int setup_gtk_browser(void)
 20{
 21	int (*perf_ui_init)(void);
 22
 23	if (perf_gtk_handle)
 24		return 0;
 25
 26	perf_gtk_handle = dlopen(PERF_GTK_DSO, RTLD_LAZY);
 27	if (perf_gtk_handle == NULL) {
 28		char buf[PATH_MAX];
 29		scnprintf(buf, sizeof(buf), "%s/%s", LIBDIR, PERF_GTK_DSO);
 30		perf_gtk_handle = dlopen(buf, RTLD_LAZY);
 31	}
 32	if (perf_gtk_handle == NULL)
 33		return -1;
 34
 35	perf_ui_init = dlsym(perf_gtk_handle, "perf_gtk__init");
 36	if (perf_ui_init == NULL)
 37		goto out_close;
 38
 39	if (perf_ui_init() == 0)
 40		return 0;
 41
 42out_close:
 43	dlclose(perf_gtk_handle);
 44	return -1;
 45}
 46
 47static void exit_gtk_browser(bool wait_for_ok)
 48{
 49	void (*perf_ui_exit)(bool);
 50
 51	if (perf_gtk_handle == NULL)
 52		return;
 53
 54	perf_ui_exit = dlsym(perf_gtk_handle, "perf_gtk__exit");
 55	if (perf_ui_exit == NULL)
 56		goto out_close;
 57
 58	perf_ui_exit(wait_for_ok);
 59
 60out_close:
 61	dlclose(perf_gtk_handle);
 62
 63	perf_gtk_handle = NULL;
 64}
 65#else
 66static inline int setup_gtk_browser(void) { return -1; }
 67static inline void exit_gtk_browser(bool wait_for_ok __maybe_unused) {}
 68#endif
 69
 70int stdio__config_color(const struct option *opt __maybe_unused,
 71			const char *mode, int unset __maybe_unused)
 72{
 73	perf_use_color_default = perf_config_colorbool("color.ui", mode, -1);
 74	return 0;
 75}
 76
 77void setup_browser(bool fallback_to_pager)
 78{
 79	mutex_init(&ui__lock);
 80	if (use_browser < 2 && (!isatty(1) || dump_trace))
 81		use_browser = 0;
 82
 83	/* default to TUI */
 84	if (use_browser < 0)
 85		use_browser = 1;
 86
 87	switch (use_browser) {
 88	case 2:
 89		if (setup_gtk_browser() == 0)
 90			break;
 91		printf("GTK browser requested but could not find %s\n",
 92		       PERF_GTK_DSO);
 93		sleep(1);
 94		use_browser = 1;
 95		/* fall through */
 96	case 1:
 
 97		if (ui__init() == 0)
 98			break;
 99		/* fall through */
100	default:
101		use_browser = 0;
102		if (fallback_to_pager)
103			setup_pager();
104		break;
105	}
106}
107
108void exit_browser(bool wait_for_ok)
109{
110	switch (use_browser) {
111	case 2:
112		exit_gtk_browser(wait_for_ok);
113		break;
114
115	case 1:
116		ui__exit(wait_for_ok);
117		break;
118
119	default:
120		break;
121	}
122	mutex_destroy(&ui__lock);
123}
124
125void pthread__block_sigwinch(void)
126{
127	sigset_t set;
128
129	sigemptyset(&set);
130	sigaddset(&set, SIGWINCH);
131	pthread_sigmask(SIG_BLOCK, &set, NULL);
132}
133
134void pthread__unblock_sigwinch(void)
135{
136	sigset_t set;
137
138	sigemptyset(&set);
139	sigaddset(&set, SIGWINCH);
140	pthread_sigmask(SIG_UNBLOCK, &set, NULL);
141}