Title: [192359] trunk/Source/WebCore
Revision
192359
Author
carlo...@webkit.org
Date
2015-11-12 03:19:55 -0800 (Thu, 12 Nov 2015)

Log Message

[GStreamer] Use RunLoop::timer in MediaPlayerPrivateGStreamerBase for GL drawing
https://bugs.webkit.org/show_bug.cgi?id=151099

Reviewed by Philippe Normand.

Instead of the GThreadSafeMainLoopSource.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
(WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
(WebCore::MediaPlayerPrivateGStreamerBase::repaint):
(WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
(WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase): Deleted.
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (192358 => 192359)


--- trunk/Source/WebCore/ChangeLog	2015-11-12 10:50:02 UTC (rev 192358)
+++ trunk/Source/WebCore/ChangeLog	2015-11-12 11:19:55 UTC (rev 192359)
@@ -1,3 +1,19 @@
+2015-11-12  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GStreamer] Use RunLoop::timer in MediaPlayerPrivateGStreamerBase for GL drawing
+        https://bugs.webkit.org/show_bug.cgi?id=151099
+
+        Reviewed by Philippe Normand.
+
+        Instead of the GThreadSafeMainLoopSource.
+
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
+        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
+        (WebCore::MediaPlayerPrivateGStreamerBase::repaint):
+        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
+        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase): Deleted.
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
+
 2015-11-12  Csaba Osztrogonác  <o...@webkit.org>
 
         Remove ENABLE(SATURATED_LAYOUT_ARITHMETIC) guards

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp (192358 => 192359)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp	2015-11-12 10:50:02 UTC (rev 192358)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp	2015-11-12 11:19:55 UTC (rev 192359)
@@ -107,13 +107,12 @@
     , m_fpsSink(0)
     , m_readyState(MediaPlayer::HaveNothing)
     , m_networkState(MediaPlayer::Empty)
+#if USE(GSTREAMER_GL)
+    , m_drawTimer(RunLoop::main(), this, &MediaPlayerPrivateGStreamerBase::repaint())
+#endif
     , m_usingFallbackVideoSink(false)
 {
     g_mutex_init(&m_sampleMutex);
-#if USE(GSTREAMER_GL)
-    g_cond_init(&m_drawCondition);
-    g_mutex_init(&m_drawMutex);
-#endif
 }
 
 MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase()
@@ -128,11 +127,6 @@
 
     g_signal_handlers_disconnect_matched(m_volumeElement.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
 
-#if USE(GSTREAMER_GL)
-    g_cond_clear(&m_drawCondition);
-    g_mutex_clear(&m_drawMutex);
-#endif
-
     if (m_pipeline) {
         GRefPtr<GstBus> bus = adoptGRef(gst_pipeline_get_bus(GST_PIPELINE(m_pipeline.get())));
         ASSERT(bus);
@@ -421,6 +415,28 @@
 }
 #endif
 
+void MediaPlayerPrivateGStreamerBase::repaint()
+{
+    ASSERT(m_sample);
+    ASSERT(isMainThread());
+
+#if USE(TEXTURE_MAPPER_GL) && !USE(COORDINATED_GRAPHICS)
+    if (supportsAcceleratedRendering() && m_player->client().mediaPlayerRenderingCanBeAccelerated(m_player) && client()) {
+        client()->setPlatformLayerNeedsDisplay();
+#if USE(GSTREAMER_GL)
+        m_drawCondition.notifyOne();
+#endif
+        return;
+    }
+#endif
+
+    m_player->repaint();
+
+#if USE(GSTREAMER_GL)
+    m_drawCondition.notifyOne();
+#endif
+}
+
 void MediaPlayerPrivateGStreamerBase::triggerRepaint(GstSample* sample)
 {
     {
@@ -432,29 +448,13 @@
     {
         ASSERT(!isMainThread());
 
-        WTF::GMutexLocker<GMutex> lock(m_drawMutex);
-
-        m_drawTimerHandler.schedule("[WebKit] video render", [this] {
-            // Rendering should be done from the main thread
-            // because this is where the GL APIs were initialized.
-            WTF::GMutexLocker<GMutex> lock(m_drawMutex);
-#if USE(TEXTURE_MAPPER_GL) && !USE(COORDINATED_GRAPHICS)
-            if (supportsAcceleratedRendering() && m_player->client().mediaPlayerRenderingCanBeAccelerated(m_player) && client())
-                client()->setPlatformLayerNeedsDisplay();
-            g_cond_signal(&m_drawCondition);
-#endif
-        });
-        g_cond_wait(&m_drawCondition, &m_drawMutex);
+        LockHolder locker(m_drawMutex);
+        m_drawTimer.startOneShot(0);
+        m_drawCondition.wait();
     }
-
-#elif USE(TEXTURE_MAPPER_GL) && !USE(COORDINATED_GRAPHICS)
-    if (supportsAcceleratedRendering() && m_player->client().mediaPlayerRenderingCanBeAccelerated(m_player) && client()) {
-        client()->setPlatformLayerNeedsDisplay();
-        return;
-    }
+#else
+    repaint();
 #endif
-
-    m_player->repaint();
 }
 
 void MediaPlayerPrivateGStreamerBase::repaintCallback(MediaPlayerPrivateGStreamerBase* player, GstSample* sample)

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h (192358 => 192359)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h	2015-11-12 10:50:02 UTC (rev 192358)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h	2015-11-12 11:19:55 UTC (rev 192359)
@@ -28,8 +28,9 @@
 #include "MainThreadNotifier.h"
 #include "MediaPlayerPrivate.h"
 #include <glib.h>
+#include <wtf/Condition.h>
 #include <wtf/Forward.h>
-#include <wtf/glib/GThreadSafeMainLoopSource.h>
+#include <wtf/RunLoop.h>
 
 #if USE(TEXTURE_MAPPER_GL) && !USE(COORDINATED_GRAPHICS)
 #include "TextureMapperPlatformLayer.h"
@@ -117,6 +118,7 @@
     virtual bool handleSyncMessage(GstMessage*);
 
     void triggerRepaint(GstSample*);
+    void repaint();
 
     static void repaintCallback(MediaPlayerPrivateGStreamerBase*, GstSample*);
 #if USE(GSTREAMER_GL)
@@ -152,9 +154,9 @@
     mutable GMutex m_sampleMutex;
     GRefPtr<GstSample> m_sample;
 #if USE(GSTREAMER_GL)
-    GThreadSafeMainLoopSource m_drawTimerHandler;
-    GCond m_drawCondition;
-    GMutex m_drawMutex;
+    RunLoop::Timer<MediaPlayerPrivateGStreamerBase> m_drawTimer;
+    Condition m_drawCondition;
+    Lock m_drawMutex;
 #endif
     mutable FloatSize m_videoSize;
     bool m_usingFallbackVideoSink;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to