[GStreamer] Several media related tests timing out around the same revision
authorphiln@webkit.org <philn@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Sep 2018 09:10:27 +0000 (09:10 +0000)
committerphiln@webkit.org <philn@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Sep 2018 09:10:27 +0000 (09:10 +0000)
https://bugs.webkit.org/show_bug.cgi?id=189349

Reviewed by Carlos Garcia Campos.

Source/WebCore:

The timeouts were happening because the `ended` event was no
longer properly emitted. The change in playbackPosition also
ensures `timeupdate` event remains emitted in a... timely manner.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
Reduce the position cache threshold to 200ms, which is a value
slightly lower than the 250ms defined in HTMLMediaElement.
(WebCore::MediaPlayerPrivateGStreamer::didEnd): Reset the cached
position value to ensure the following query will most likely
return the same value as reported by the duration query.

LayoutTests:

* platform/gtk/TestExpectations: Unflag Timeout from now-unaffected tests.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235846 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/gtk/TestExpectations
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

index c731fe4..737d31e 100644 (file)
@@ -1,3 +1,12 @@
+2018-09-10  Philippe Normand  <pnormand@igalia.com>
+
+        [GStreamer] Several media related tests timing out around the same revision
+        https://bugs.webkit.org/show_bug.cgi?id=189349
+
+        Reviewed by Carlos Garcia Campos.
+
+        * platform/gtk/TestExpectations: Unflag Timeout from now-unaffected tests.
+
 2018-09-10  Rob Buis  <rbuis@igalia.com>
 
         XMLHttpRequest: overrideMimeType should not update the response's "Content-Type" header
index 4028798..4b52014 100644 (file)
@@ -1527,14 +1527,13 @@ webkit.org/b/132185 editing/pasteboard/gtk/middle-button-paste.html [ Failure Pa
 # Some media fragment tests are flaky
 webkit.org/b/132248 media/media-fragments/TC0001.html [ Timeout Pass ]
 webkit.org/b/132248 media/media-fragments/TC0002.html [ Crash Pass ]
-webkit.org/b/132248 media/media-fragments/TC0004.html [ Timeout Crash Pass ]
+webkit.org/b/132248 media/media-fragments/TC0004.html [ Crash Pass ]
 webkit.org/b/132248 media/media-fragments/TC0005.html [ Failure Crash Pass ]
 webkit.org/b/132248 media/media-fragments/TC0006.html [ Failure Pass ]
 webkit.org/b/132248 media/media-fragments/TC0009.html [ Failure Pass ]
 webkit.org/b/132248 media/media-fragments/TC0011.html [ Failure Pass ]
 webkit.org/b/132248 media/media-fragments/TC0014.html [ Failure Pass ]
 webkit.org/b/132248 media/media-fragments/TC0015.html [ Failure Crash Pass ]
-webkit.org/b/132248 media/media-fragments/TC0017.html [ Timeout Pass ]
 webkit.org/b/134574 media/media-fragments/TC0024.html [ Failure Timeout Pass ]
 webkit.org/b/132248 media/media-fragments/TC0035.html [ Failure Pass ]
 webkit.org/b/132248 media/media-fragments/TC0036.html [ Failure Pass ]
@@ -1984,7 +1983,7 @@ webkit.org/b/186673 editing/spelling/spellcheck-async-mutation.html [ Failure Pa
 
 webkit.org/b/186678 fast/mediastream/change-tracks-media-stream-being-played.html [ Crash Pass ]
 
-webkit.org/b/186679 media/video-currentTime-delay.html [ Timeout Crash Pass ]
+webkit.org/b/186679 media/video-currentTime-delay.html [ Crash Pass ]
 
 webkit.org/b/186750 imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_hkdf.https.html [ Pass Failure ]
 webkit.org/b/186750 imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html [ Pass Failure ]
@@ -2044,16 +2043,6 @@ webkit.org/b/189338 imported/w3c/web-platform-tests/visual-viewport/viewport-res
 
 webkit.org/b/189339 compositing/filters/opacity-change-on-filtered-paints-into-ancestor.html [ ImageOnlyFailure Pass ]
 
-webkit.org/b/189340 webaudio/silence-after-playback.html [ Failure Timeout Pass ]
-
-webkit.org/b/189341 http/tests/security/webaudio-render-remote-audio-allowed-crossorigin.html [ Timeout Pass ]
-
-webkit.org/b/189342 media/media-fullscreen-return-to-inline.html [ Timeout Pass ]
-
-webkit.org/b/189346 media/media-ended.html [ Timeout Pass ]
-
-webkit.org/b/189348 media/video-currentTime-set.html [ Timeout Pass ]
-
 #////////////////////////////////////////////////////////////////////////////////////////
 # End of Flaky tests
 #////////////////////////////////////////////////////////////////////////////////////////
index 43d342d..16bc113 100644 (file)
@@ -1,3 +1,22 @@
+2018-09-10  Philippe Normand  <pnormand@igalia.com>
+
+        [GStreamer] Several media related tests timing out around the same revision
+        https://bugs.webkit.org/show_bug.cgi?id=189349
+
+        Reviewed by Carlos Garcia Campos.
+
+        The timeouts were happening because the `ended` event was no
+        longer properly emitted. The change in playbackPosition also
+        ensures `timeupdate` event remains emitted in a... timely manner.
+
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
+        Reduce the position cache threshold to 200ms, which is a value
+        slightly lower than the 250ms defined in HTMLMediaElement.
+        (WebCore::MediaPlayerPrivateGStreamer::didEnd): Reset the cached
+        position value to ensure the following query will most likely
+        return the same value as reported by the duration query.
+
 2018-09-10  Rob Buis  <rbuis@igalia.com>
 
         XMLHttpRequest: overrideMimeType should not update the response's "Content-Type" header
index a36d1a4..b6829f2 100644 (file)
@@ -164,7 +164,6 @@ 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);
@@ -344,11 +343,13 @@ 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())
+    // This constant should remain lower than HTMLMediaElement's maxTimeupdateEventFrequency.
+    static const Seconds positionCacheThreshold = 200_ms;
+    Seconds now = WTF::WallTime::now().secondsSinceEpoch();
+    if (m_lastQueryTime && (now - m_lastQueryTime.value()) < positionCacheThreshold && m_cachedPosition.isValid())
         return m_cachedPosition;
 
-    m_lastQuery = now;
+    m_lastQueryTime = 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;
@@ -2149,6 +2150,7 @@ void MediaPlayerPrivateGStreamer::didEnd()
     // Synchronize position and duration values to not confuse the
     // HTMLMediaElement. In some cases like reverse playback the
     // position is not always reported as 0 for instance.
+    m_cachedPosition = MediaTime::invalidTime();
     MediaTime now = currentMediaTime();
     if (now > MediaTime { } && now <= durationMediaTime())
         m_player->durationChanged();
index d55fa22..814a3b1 100644 (file)
@@ -258,7 +258,7 @@ private:
     mutable unsigned long long m_totalBytes;
     URL m_url;
     bool m_preservesPitch;
-    mutable double m_lastQuery;
+    mutable std::optional<Seconds> m_lastQueryTime;
     bool m_isLegacyPlaybin;
 #if GST_CHECK_VERSION(1, 10, 0)
     GRefPtr<GstStreamCollection> m_streamCollection;