Modified: trunk/Source/WebCore/ChangeLog (192018 => 192019)
--- trunk/Source/WebCore/ChangeLog 2015-11-04 09:34:37 UTC (rev 192018)
+++ trunk/Source/WebCore/ChangeLog 2015-11-04 10:13:27 UTC (rev 192019)
@@ -1,3 +1,20 @@
+2015-11-04 Carlos Garcia Campos <cgar...@igalia.com>
+
+ [GStreamer] Use RunLoop::Timer for ready state timer in MediaPlayerPrivateGStreamer
+ https://bugs.webkit.org/show_bug.cgi?id=150836
+
+ Reviewed by Philippe Normand.
+
+ We don't really need a GThreadSafeMainLoopSource for this simple timer.
+
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+ (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
+ (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
+ (WebCore::MediaPlayerPrivateGStreamer::readyTimerFired):
+ (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
+ (WebCore::MediaPlayerPrivateGStreamer::loadingFailed):
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
+
2015-11-04 Frederic Wang <fred.w...@free.fr>
Add support for the USE_TYPO_METRICS flag on iOS
Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp (192018 => 192019)
--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 2015-11-04 09:34:37 UTC (rev 192018)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 2015-11-04 10:13:27 UTC (rev 192019)
@@ -41,7 +41,6 @@
#include <limits>
#include <wtf/HexNumber.h>
#include <wtf/MediaTime.h>
-#include <wtf/RunLoop.h>
#include <wtf/glib/GUniquePtr.h>
#include <wtf/text/CString.h>
@@ -70,10 +69,6 @@
#include "AudioSourceProviderGStreamer.h"
#endif
-// Max interval in seconds to stay in the READY state on manual
-// state change requests.
-static const unsigned gReadyStateTimerInterval = 60;
-
GST_DEBUG_CATEGORY_EXTERN(webkit_media_player_debug);
#define GST_CAT_DEFAULT webkit_media_player_debug
@@ -202,6 +197,7 @@
, m_volumeAndMuteInitialized(false)
, m_hasVideo(false)
, m_hasAudio(false)
+ , m_readyTimerHandler(RunLoop::main(), this, &MediaPlayerPrivateGStreamer::readyTimerFired)
, m_totalBytes(0)
, m_preservesPitch(false)
#if ENABLE(WEB_AUDIO)
@@ -209,6 +205,9 @@
#endif
, m_requestedState(GST_STATE_VOID_PENDING)
{
+#if USE(GLIB) && !PLATFORM(EFL)
+ m_readyTimerHandler.setPriority(G_PRIORITY_DEFAULT_IDLE);
+#endif
}
MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer()
@@ -235,7 +234,7 @@
g_signal_handlers_disconnect_by_func(G_OBJECT(m_autoAudioSink.get()),
reinterpret_cast<gpointer>(setAudioStreamPropertiesCallback), this);
- m_readyTimerHandler.cancel();
+ m_readyTimerHandler.stop();
if (m_missingPluginsCallback) {
m_missingPluginsCallback->invalidate();
m_missingPluginsCallback = nullptr;
@@ -366,6 +365,11 @@
return result;
}
+void MediaPlayerPrivateGStreamer::readyTimerFired()
+{
+ changePipelineState(GST_STATE_NULL);
+}
+
bool MediaPlayerPrivateGStreamer::changePipelineState(GstState newState)
{
ASSERT(m_pipeline);
@@ -393,12 +397,13 @@
// if we stay for too long on READY.
// Also lets remove the timer if we request a state change for any state other than READY.
// See also https://bugs.webkit.org/show_bug.cgi?id=117354
- if (newState == GST_STATE_READY && !m_readyTimerHandler.isScheduled()) {
- m_readyTimerHandler.scheduleAfterDelay("[WebKit] mediaPlayerPrivateReadyStateTimeoutCallback", std::function<void()>([this] { changePipelineState(GST_STATE_NULL); }),
- std::chrono::seconds(gReadyStateTimerInterval));
- } else if (newState != GST_STATE_READY && m_readyTimerHandler.isScheduled()) {
- m_readyTimerHandler.cancel();
- }
+ if (newState == GST_STATE_READY && !m_readyTimerHandler.isActive()) {
+ // Max interval in seconds to stay in the READY state on manual
+ // state change requests.
+ static const double readyStateTimerDelay = 60;
+ m_readyTimerHandler.startOneShot(readyStateTimerDelay);
+ } else if (newState != GST_STATE_READY)
+ m_readyTimerHandler.stop();
return true;
}
@@ -1687,7 +1692,7 @@
}
// Loading failed, remove ready timer.
- m_readyTimerHandler.cancel();
+ m_readyTimerHandler.stop();
}
static HashSet<String> mimeTypeCache()
Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h (192018 => 192019)
--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h 2015-11-04 09:34:37 UTC (rev 192018)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h 2015-11-04 10:13:27 UTC (rev 192019)
@@ -33,6 +33,7 @@
#include <gst/gst.h>
#include <gst/pbutils/install-plugins.h>
#include <wtf/Forward.h>
+#include <wtf/RunLoop.h>
#include <wtf/WeakPtr.h>
#include <wtf/glib/GThreadSafeMainLoopSource.h>
@@ -188,6 +189,8 @@
MediaTime totalFrameDelay() override { return MediaTime::zeroTime(); }
#endif
+ void readyTimerFired();
+
WeakPtrFactory<MediaPlayerPrivateGStreamer> m_weakPtrFactory;
GRefPtr<GstElement> m_source;
@@ -229,7 +232,7 @@
GThreadSafeMainLoopSource m_textTimerHandler;
GThreadSafeMainLoopSource m_videoTimerHandler;
GThreadSafeMainLoopSource m_videoCapsTimerHandler;
- GThreadSafeMainLoopSource m_readyTimerHandler;
+ RunLoop::Timer<MediaPlayerPrivateGStreamer> m_readyTimerHandler;
mutable unsigned long long m_totalBytes;
URL m_url;
bool m_preservesPitch;