glframebuffer: Don't do expensive checks with low gst debug levels
authorNirbheek Chauhan <nirbheek@centricular.com>
Thu, 28 Feb 2019 09:31:40 +0000 (15:01 +0530)
committerMatthew Waters <matthew@centricular.com>
Tue, 12 Mar 2019 03:21:57 +0000 (03:21 +0000)
Framebuffer checks can be very expensive, taking up to 3-5% of the
total CPU consumed by the application.

gst-libs/gst/gl/gstglcontext.c
gst-libs/gst/gl/gstglcontext_private.h
gst-libs/gst/gl/gstgldebug.c
gst-libs/gst/gl/gstglframebuffer.c

index a764594..aa8025d 100644 (file)
@@ -1851,3 +1851,22 @@ static void
 gst_gl_wrapped_context_init (GstGLWrappedContext * context)
 {
 }
+
+G_GNUC_INTERNAL gboolean
+_gst_gl_context_debug_is_enabled (GstGLContext * context)
+{
+#if !defined(GST_DISABLE_GST_DEBUG)
+  GstDebugLevel level;
+
+  level = gst_debug_category_get_threshold (gst_gl_debug);
+
+  if (level < GST_LEVEL_WARNING) {
+    GST_CAT_INFO_OBJECT (gst_gl_context_debug, context, "Disabling GL context "
+        "debugging (gldebug category debug level < warning)");
+    return FALSE;
+  }
+  return TRUE;
+#else
+  return FALSE;
+#endif
+}
index 4d190bf..6926375 100644 (file)
@@ -26,6 +26,9 @@ G_BEGIN_DECLS
 
 G_GNUC_INTERNAL extern GstDebugCategory *gst_gl_context_debug;
 
+G_GNUC_INTERNAL
+gboolean            _gst_gl_context_debug_is_enabled            (GstGLContext * context);
+
 G_END_DECLS
 
 #endif /* __GST_GL_CONTEXT_PRIVATE_H__ */
index 6f8eb4a..cedf7bb 100644 (file)
@@ -340,17 +340,14 @@ _gst_gl_debug_enable (GstGLContext * context)
     return;
   }
 
-  level = gst_debug_category_get_threshold (gst_gl_debug);
-
-  if (level < GST_LEVEL_ERROR) {
-    GST_CAT_INFO_OBJECT (gst_gl_context_debug, context,
-        "Disabling GL context debugging (gldebug category debug level < error)");
+  if (!_gst_gl_context_debug_is_enabled (context))
     return;
-  }
 
   GST_CAT_INFO_OBJECT (gst_gl_context_debug, context,
       "Enabling GL context debugging");
 
+  level = gst_debug_category_get_threshold (gst_gl_debug);
+
   gl->DebugMessageCallback (_gst_gl_debug_callback, context);
   if (level >= GST_LEVEL_DEBUG) {
     /* enable them all */
index 19307ca..3aeaf2b 100644 (file)
@@ -45,6 +45,7 @@
 #include "gstglframebuffer.h"
 
 #include "gstglcontext.h"
+#include "gstglcontext_private.h"
 #include "gstglfuncs.h"
 #include "gstglmemory.h"
 #include "gstglrenderbuffer.h"
@@ -523,6 +524,10 @@ gst_gl_context_check_framebuffer_status (GstGLContext * context,
     return FALSE;
   }
 
+  /* Don't do expensive framebuffer checks when debugging is disabled */
+  if (!_gst_gl_context_debug_is_enabled (context))
+    return TRUE;
+
   switch (context->gl_vtable->CheckFramebufferStatus (fbo_target)) {
     case GL_FRAMEBUFFER_COMPLETE:
       return TRUE;