glframebuffer: Don't do expensive checks with low gst debug levels

Framebuffer checks can be very expensive, taking up to 3-5% of the
total CPU consumed by the application.
This commit is contained in:
Nirbheek Chauhan 2019-02-28 15:01:40 +05:30 committed by Matthew Waters
parent c71dd72b21
commit 21bc1040d4
4 changed files with 30 additions and 6 deletions

View 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
}

View 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__ */

View 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 */

View 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;