Linux Audio

Check our new training course

Loading...
v3.15
  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
 63void setup_browser(bool fallback_to_pager)
 64{
 65	if (use_browser < 2 && (!isatty(1) || dump_trace))
 66		use_browser = 0;
 67
 68	/* default to TUI */
 69	if (use_browser < 0)
 70		use_browser = 1;
 71
 72	switch (use_browser) {
 73	case 2:
 74		if (setup_gtk_browser() == 0)
 75			break;
 76		printf("GTK browser requested but could not find %s\n",
 77		       PERF_GTK_DSO);
 78		sleep(1);
 79		/* fall through */
 80	case 1:
 81		use_browser = 1;
 82		if (ui__init() == 0)
 83			break;
 84		/* fall through */
 85	default:
 86		use_browser = 0;
 87		if (fallback_to_pager)
 88			setup_pager();
 89
 90		perf_hpp__init();
 91		break;
 92	}
 93}
 94
 95void exit_browser(bool wait_for_ok)
 96{
 97	switch (use_browser) {
 98	case 2:
 99		exit_gtk_browser(wait_for_ok);
100		break;
101
102	case 1:
103		ui__exit(wait_for_ok);
104		break;
105
106	default:
107		break;
108	}
109}
v4.6
  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
 63void setup_browser(bool fallback_to_pager)
 64{
 65	if (use_browser < 2 && (!isatty(1) || dump_trace))
 66		use_browser = 0;
 67
 68	/* default to TUI */
 69	if (use_browser < 0)
 70		use_browser = 1;
 71
 72	switch (use_browser) {
 73	case 2:
 74		if (setup_gtk_browser() == 0)
 75			break;
 76		printf("GTK browser requested but could not find %s\n",
 77		       PERF_GTK_DSO);
 78		sleep(1);
 79		/* fall through */
 80	case 1:
 81		use_browser = 1;
 82		if (ui__init() == 0)
 83			break;
 84		/* fall through */
 85	default:
 86		use_browser = 0;
 87		if (fallback_to_pager)
 88			setup_pager();
 
 
 89		break;
 90	}
 91}
 92
 93void exit_browser(bool wait_for_ok)
 94{
 95	switch (use_browser) {
 96	case 2:
 97		exit_gtk_browser(wait_for_ok);
 98		break;
 99
100	case 1:
101		ui__exit(wait_for_ok);
102		break;
103
104	default:
105		break;
106	}
107}