WebKit Bugzilla
Attachment 347261 Details for
Bug 188645
: [GStreamer] reduce position queries frequency
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-188645-20180816145109.patch (text/plain), 5.46 KB, created by
Philippe Normand
on 2018-08-16 06:51:10 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Philippe Normand
Created:
2018-08-16 06:51:10 PDT
Size:
5.46 KB
patch
obsolete
>Subversion Revision: 234920 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index bed7d527e4e8841320390c0691d6a0422030411f..8b970e99e08acf35bb6c33f041e6db45edce6d17 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,20 @@ >+2018-08-16 Philippe Normand <philn@igalia.com> >+ >+ [GStreamer] reduce position queries frequency >+ https://bugs.webkit.org/show_bug.cgi?id=188645 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ There is no need to perform dozens of position queries per second. >+ One every 300ms is enough. >+ >+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: >+ (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): >+ (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const): >+ (WebCore::MediaPlayerPrivateGStreamer::asyncStateChangeDone): >+ (WebCore::MediaPlayerPrivateGStreamer::updateStates): >+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: >+ > 2018-08-16 Antti Koivisto <antti@apple.com> > > Use OptionSet for ActivityState::Flags >diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp >index c623501e908d542a28f504fe12a8bf75045c5799..348651c259e0d3f70570cbdad18b4f1e4c077dc1 100644 >--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp >+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp >@@ -47,6 +47,7 @@ > #include <wtf/MediaTime.h> > #include <wtf/NeverDestroyed.h> > #include <wtf/StringPrintStream.h> >+#include <wtf/WallTime.h> > #include <wtf/glib/GUniquePtr.h> > #include <wtf/glib/RunLoopSourcePriority.h> > #include <wtf/text/CString.h> >@@ -131,6 +132,7 @@ MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer(MediaPlayer* player) > : MediaPlayerPrivateGStreamerBase(player) > , m_buffering(false) > , m_bufferingPercentage(0) >+ , m_cachedPosition(MediaTime::invalidTime()) > , m_canFallBackToLastFinishedSeekPosition(false) > , m_changingRate(false) > , m_downloadFinished(false) >@@ -162,6 +164,7 @@ MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer(MediaPlayer* player) > , m_readyTimerHandler(RunLoop::main(), this, &MediaPlayerPrivateGStreamer::readyTimerFired) > , m_totalBytes(0) > , m_preservesPitch(false) >+ , m_lastQuery(-1) > { > #if USE(GLIB) > m_readyTimerHandler.setPriority(G_PRIORITY_DEFAULT_IDLE); >@@ -341,6 +344,12 @@ MediaTime MediaPlayerPrivateGStreamer::playbackPosition() const > if (m_isEndReached && m_seeking) > return m_seekTime; > >+ double now = WTF::WallTime::now().secondsSinceEpoch().milliseconds(); >+ if (m_lastQuery > -1 && ((now - m_lastQuery) < 300) && m_cachedPosition.isValid()) >+ return m_cachedPosition; >+ >+ m_lastQuery = now; >+ > // Position is only available if no async state change is going on and the state is either paused or playing. > gint64 position = GST_CLOCK_TIME_NONE; > GstQuery* query = gst_query_new_position(GST_FORMAT_TIME); >@@ -348,7 +357,7 @@ MediaTime MediaPlayerPrivateGStreamer::playbackPosition() const > gst_query_parse_position(query, 0, &position); > gst_query_unref(query); > >- GST_LOG("Position %" GST_TIME_FORMAT, GST_TIME_ARGS(position)); >+ GST_TRACE_OBJECT(pipeline(), "Position %" GST_TIME_FORMAT, GST_TIME_ARGS(position)); > > MediaTime playbackPosition = MediaTime::zeroTime(); > GstClockTime gstreamerPosition = static_cast<GstClockTime>(position); >@@ -357,6 +366,7 @@ MediaTime MediaPlayerPrivateGStreamer::playbackPosition() const > else if (m_canFallBackToLastFinishedSeekPosition) > playbackPosition = m_seekTime; > >+ m_cachedPosition = playbackPosition; > return playbackPosition; > } > >@@ -1828,6 +1838,7 @@ void MediaPlayerPrivateGStreamer::asyncStateChangeDone() > else { > GST_DEBUG("[Seek] seeked to %s", toString(m_seekTime).utf8().data()); > m_seeking = false; >+ m_cachedPosition = MediaTime::invalidTime(); > if (m_timeOfOverlappingSeek != m_seekTime && m_timeOfOverlappingSeek.isValid()) { > seek(m_timeOfOverlappingSeek); > m_timeOfOverlappingSeek = MediaTime::invalidTime(); >@@ -2007,8 +2018,10 @@ void MediaPlayerPrivateGStreamer::updateStates() > GST_DEBUG("[Seek] committing pending seek to %s", toString(m_seekTime).utf8().data()); > m_seekIsPending = false; > m_seeking = doSeek(m_seekTime, m_player->rate(), static_cast<GstSeekFlags>(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE)); >- if (!m_seeking) >+ if (!m_seeking) { >+ m_cachedPosition = MediaTime::invalidTime(); > GST_DEBUG("[Seek] seeking to %s failed", toString(m_seekTime).utf8().data()); >+ } > } > } > } >diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h >index f0ae0b9f672268dc5f14e1e91a0b437356086d1d..0db6181c4a8a09f7dc2940939c96439bf193422f 100644 >--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h >+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h >@@ -257,6 +257,7 @@ private: > mutable unsigned long long m_totalBytes; > URL m_url; > bool m_preservesPitch; >+ mutable double m_lastQuery; > bool m_isLegacyPlaybin; > #if GST_CHECK_VERSION(1, 10, 0) > GRefPtr<GstStreamCollection> m_streamCollection;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
calvaris
:
review+
ews-watchlist
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188645
: 347261 |
347341