GHOST: Only spam about X11 errors when using --debug-ghost
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 14 Oct 2019 10:44:41 +0000 (12:44 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Mon, 18 Nov 2019 08:28:17 +0000 (09:28 +0100)
This commit adds a new command line argument --debug-ghost and
makes it so X11 errors happening during context initialization
are only printed when this new flag is sued.

There is no need to flood users with errors when their GPU is
not supporting latest OpenGL version. Or, at a very minimum,
the error must be more meaning full.

Differential Revision: https://developer.blender.org/D6057

intern/ghost/GHOST_C-api.h
intern/ghost/GHOST_ISystem.h
intern/ghost/intern/GHOST_C-api.cpp
intern/ghost/intern/GHOST_System.cpp
intern/ghost/intern/GHOST_System.h
intern/ghost/intern/GHOST_SystemX11.cpp
source/blender/blenkernel/BKE_global.h
source/blender/windowmanager/intern/wm_window.c
source/creator/creator_args.c

index 720929ce9459a30c0c38c9ce8e944a0d7bd1c26a..ba46a868df6ef81c4dd70d3e924e7ce6aebc6109 100644 (file)
@@ -58,6 +58,11 @@ typedef int (*GHOST_EventCallbackProcPtr)(GHOST_EventHandle event, GHOST_TUserDa
  */
 extern GHOST_SystemHandle GHOST_CreateSystem(void);
 
+/**
+ * Specifies whether debug messages are to be enabled for the specific system handle.
+ */
+extern void GHOST_SystemInitDebug(GHOST_SystemHandle systemhandle, int is_debug_enabled);
+
 /**
  * Disposes the one and only system.
  * \param systemhandle The handle to the system
index b781de266bcf0bc4c92eaec4920ef4158ef019c0..4634eb1bc66413893e30b1f55ca6eac0dceb4f9d 100644 (file)
@@ -458,6 +458,20 @@ class GHOST_ISystem {
                                         const char * /*link*/,
                                         GHOST_DialogOptions /*dialog_options*/) const = 0;
 
+  /***************************************************************************************
+   * Debugging
+   ***************************************************************************************/
+
+  /**
+   * Specify whether debug messages are to be shown.
+   */
+  virtual void initDebug(bool is_debug_enabled) = 0;
+
+  /**
+   * Check whether debug messages are to be shown.
+   */
+  virtual bool isDebugEnabled() = 0;
+
  protected:
   /**
    * Initialize the system.
index eeb23ea7471e5545e5bc7f21020e83725164a1cf..1bed7afdfc43532ba9f1dbc83332b54c8d232846 100644 (file)
@@ -40,6 +40,13 @@ GHOST_SystemHandle GHOST_CreateSystem(void)
   return (GHOST_SystemHandle)system;
 }
 
+void GHOST_SystemInitDebug(GHOST_SystemHandle systemhandle, int is_debug_enabled)
+{
+  GHOST_ISystem *system = (GHOST_ISystem *)systemhandle;
+
+  system->initDebug(is_debug_enabled);
+}
+
 GHOST_TSuccess GHOST_DisposeSystem(GHOST_SystemHandle systemhandle)
 {
   GHOST_ISystem *system = (GHOST_ISystem *)systemhandle;
index 21935abed9c944f6f48cc213b4ab4448e38252f9..fc9ce1f66e18f32c5f7dcb273a495a1f23743e78 100644 (file)
@@ -46,7 +46,8 @@ GHOST_System::GHOST_System()
 #ifdef WITH_INPUT_NDOF
       m_ndofManager(0),
 #endif
-      m_tabletAPI(GHOST_kTabletAutomatic)
+      m_tabletAPI(GHOST_kTabletAutomatic),
+      m_is_debug_enabled(false)
 {
 }
 
@@ -388,3 +389,13 @@ void GHOST_System::useWindowFocus(const bool use_focus)
 {
   m_windowFocus = use_focus;
 }
+
+void GHOST_System::initDebug(bool is_debug_enabled)
+{
+  m_is_debug_enabled = is_debug_enabled;
+}
+
+bool GHOST_System::isDebugEnabled()
+{
+  return m_is_debug_enabled;
+}
index 893592e3cf5db5c931dfbc9b2666ee4f47783b35..26b566e6b7e16022cbc0c611f5395224a531260f 100644 (file)
@@ -328,6 +328,20 @@ class GHOST_System : public GHOST_ISystem {
     return GHOST_kFailure;
   };
 
+  /***************************************************************************************
+   * Debugging
+   ***************************************************************************************/
+
+  /**
+   * Specify whether debug messages are to be shown.
+   */
+  virtual void initDebug(bool is_debug_enabled);
+
+  /**
+   * Check whether debug messages are to be shown.
+   */
+  virtual bool isDebugEnabled();
+
  protected:
   /**
    * Initialize the system.
@@ -378,6 +392,8 @@ class GHOST_System : public GHOST_ISystem {
 
   /** Which tablet API to use. */
   GHOST_TTabletAPI m_tabletAPI;
+
+  bool m_is_debug_enabled;
 };
 
 inline GHOST_TimerManager *GHOST_System::getTimerManager() const
index cb2a04a8a87ec1293d5d6287b72534fd230d4133..72c0ad761a4a7443d0ec17b05e6b1592d0304328 100644 (file)
@@ -2383,6 +2383,11 @@ GHOST_TSuccess GHOST_SystemX11::pushDragDropEvent(GHOST_TEventType eventType,
  */
 int GHOST_X11_ApplicationErrorHandler(Display *display, XErrorEvent *event)
 {
+  GHOST_ISystem *system = GHOST_ISystem::getSystem();
+  if (!system->isDebugEnabled()) {
+    return 0;
+  }
+
   char error_code_str[512];
 
   XGetErrorText(display, event->error_code, error_code_str, sizeof(error_code_str));
@@ -2404,6 +2409,11 @@ int GHOST_X11_ApplicationErrorHandler(Display *display, XErrorEvent *event)
 
 int GHOST_X11_ApplicationIOErrorHandler(Display * /*display*/)
 {
+  GHOST_ISystem *system = GHOST_ISystem::getSystem();
+  if (!system->isDebugEnabled()) {
+    return 0;
+  }
+
   fprintf(stderr, "Ignoring Xlib error: error IO\n");
 
   /* No exit! - but keep lint happy */
index bee76c09cbc871ffe67955d3af14250dc62a9fc8..65c3725d994ae33baca767e8b44001c4174ab295 100644 (file)
@@ -151,11 +151,14 @@ enum {
   G_DEBUG_IO = (1 << 17),                    /* IO Debugging (for Collada, ...)*/
   G_DEBUG_GPU_SHADERS = (1 << 18),           /* GLSL shaders */
   G_DEBUG_GPU_FORCE_WORKAROUNDS = (1 << 19), /* force gpu workarounds bypassing detections. */
+
+  G_DEBUG_GHOST = (1 << 20), /* Debug GHOST module. */
 };
 
 #define G_DEBUG_ALL \
   (G_DEBUG | G_DEBUG_FFMPEG | G_DEBUG_PYTHON | G_DEBUG_EVENTS | G_DEBUG_WM | G_DEBUG_JOBS | \
-   G_DEBUG_FREESTYLE | G_DEBUG_DEPSGRAPH | G_DEBUG_GPU_MEM | G_DEBUG_IO | G_DEBUG_GPU_SHADERS)
+   G_DEBUG_FREESTYLE | G_DEBUG_DEPSGRAPH | G_DEBUG_GPU_MEM | G_DEBUG_IO | G_DEBUG_GPU_SHADERS | \
+   G_DEBUG_GHOST)
 
 /** #Global.fileflags */
 enum {
index 937cc8e74679418e9a0bb5b6d138293c46a4a09b..7a5f4bf8367de7f1fbe6855494b311104e57787e 100644 (file)
@@ -1638,6 +1638,7 @@ void wm_ghost_init(bContext *C)
     }
 
     g_system = GHOST_CreateSystem();
+    GHOST_SystemInitDebug(g_system, G.debug & G_DEBUG_GHOST);
 
     if (C != NULL) {
       GHOST_AddEventConsumer(g_system, consumer);
index 936bdf52c91b91f1de5323f19756c8e27ddd7a34..6e3988a5ea6fe89b31da5df4ff92cc8a55e8467b 100644 (file)
@@ -2079,6 +2079,12 @@ void main_args_setup(bContext *C, bArgs *ba)
               (void *)G_DEBUG_HANDLERS);
   BLI_argsAdd(
       ba, 1, NULL, "--debug-wm", CB_EX(arg_handle_debug_mode_generic_set, wm), (void *)G_DEBUG_WM);
+  BLI_argsAdd(ba,
+              1,
+              NULL,
+              "--debug-ghost",
+              CB_EX(arg_handle_debug_mode_generic_set, handlers),
+              (void *)G_DEBUG_GHOST);
   BLI_argsAdd(ba, 1, NULL, "--debug-all", CB(arg_handle_debug_mode_all), NULL);
 
   BLI_argsAdd(ba, 1, NULL, "--debug-io", CB(arg_handle_debug_mode_io), NULL);