root/tools/perf/ui/setup.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. setup_gtk_browser
  2. exit_gtk_browser
  3. setup_gtk_browser
  4. exit_gtk_browser
  5. stdio__config_color
  6. setup_browser
  7. exit_browser

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <pthread.h>
   3 #include <dlfcn.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 
  11 pthread_mutex_t ui__lock = PTHREAD_MUTEX_INITIALIZER;
  12 void *perf_gtk_handle;
  13 int use_browser = -1;
  14 
  15 #define PERF_GTK_DSO "libperf-gtk.so"
  16 
  17 #ifdef HAVE_GTK2_SUPPORT
  18 
  19 static 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 
  42 out_close:
  43         dlclose(perf_gtk_handle);
  44         return -1;
  45 }
  46 
  47 static 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 
  60 out_close:
  61         dlclose(perf_gtk_handle);
  62 
  63         perf_gtk_handle = NULL;
  64 }
  65 #else
  66 static inline int setup_gtk_browser(void) { return -1; }
  67 static inline void exit_gtk_browser(bool wait_for_ok __maybe_unused) {}
  68 #endif
  69 
  70 int 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 
  77 void setup_browser(bool fallback_to_pager)
  78 {
  79         if (use_browser < 2 && (!isatty(1) || dump_trace))
  80                 use_browser = 0;
  81 
  82         /* default to TUI */
  83         if (use_browser < 0)
  84                 use_browser = 1;
  85 
  86         switch (use_browser) {
  87         case 2:
  88                 if (setup_gtk_browser() == 0)
  89                         break;
  90                 printf("GTK browser requested but could not find %s\n",
  91                        PERF_GTK_DSO);
  92                 sleep(1);
  93                 use_browser = 1;
  94                 /* fall through */
  95         case 1:
  96                 if (ui__init() == 0)
  97                         break;
  98                 /* fall through */
  99         default:
 100                 use_browser = 0;
 101                 if (fallback_to_pager)
 102                         setup_pager();
 103                 break;
 104         }
 105 }
 106 
 107 void exit_browser(bool wait_for_ok)
 108 {
 109         switch (use_browser) {
 110         case 2:
 111                 exit_gtk_browser(wait_for_ok);
 112                 break;
 113 
 114         case 1:
 115                 ui__exit(wait_for_ok);
 116                 break;
 117 
 118         default:
 119                 break;
 120         }
 121 }

/* [<][>][^][v][top][bottom][index][help] */