From 7d463576271e5a4cc1070780ba1a69c971e8be1d Mon Sep 17 00:00:00 2001 From: Alessandro Decina Date: Tue, 3 Feb 2015 11:07:58 +1100 Subject: [PATCH] gstglwindow_cocoa: fix slow render rate In gst_gl_window_cocoa_draw we used to just call setNeedsDisplay:YES. That was creating an implicit CA transaction which was getting committed at the next runloop iteration. Since we don't know how often the main runloop is running, and when we run it implicitly (from gst_gl_window_cocoa_nsapp_iteration) we only do so every 200ms, use an explicit CA transaction instead and commit it immediately. CA transactions nest and debounce automatically so this will never result in extra work. --- common | 2 +- gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/common b/common index bc76a8b6a2..f2c6b95d0d 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit bc76a8b6a2db1cc0605158e672b2d420b4e130d0 +Subproject commit f2c6b95d0d98e97c37ffe27509709fdd41cd503c diff --git a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m index 678fd63d84..a0f09eadc4 100644 --- a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m +++ b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m @@ -24,6 +24,7 @@ #endif #include +#include #include "gstgl_cocoa_private.h" @@ -280,11 +281,12 @@ gst_gl_window_cocoa_draw (GstGLWindow * window) GstGLNSView *view = (GstGLNSView *)[window_cocoa->priv->internal_win_id contentView]; /* this redraws the GstGLCAOpenGLLayer which calls - * gst_gl_window_cocoa_draw_thread() + * gst_gl_window_cocoa_draw_thread(). Use an explicit CATransaction since we + * don't know how often the main runloop is running. */ - dispatch_sync (dispatch_get_main_queue(), ^{ - [view setNeedsDisplay:YES]; - }); + [CATransaction begin]; + [view setNeedsDisplay:YES]; + [CATransaction commit]; } static void