Title: [225822] trunk/Source/WebCore
Revision
225822
Author
commit-qu...@webkit.org
Date
2017-12-12 16:40:08 -0800 (Tue, 12 Dec 2017)

Log Message

Playing webrtc video tracks should prevent from display to got to sleep
https://bugs.webkit.org/show_bug.cgi?id=180666

Patch by Youenn Fablet <you...@apple.com> on 2017-12-12
Reviewed by Darin Adler.

Done through manual testing by checking screen assertions taken on webrtc sites.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::shouldDisableSleep const):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (225821 => 225822)


--- trunk/Source/WebCore/ChangeLog	2017-12-13 00:32:57 UTC (rev 225821)
+++ trunk/Source/WebCore/ChangeLog	2017-12-13 00:40:08 UTC (rev 225822)
@@ -1,3 +1,15 @@
+2017-12-12  Youenn Fablet  <you...@apple.com>
+
+        Playing webrtc video tracks should prevent from display to got to sleep
+        https://bugs.webkit.org/show_bug.cgi?id=180666
+
+        Reviewed by Darin Adler.
+
+        Done through manual testing by checking screen assertions taken on webrtc sites.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::shouldDisableSleep const):
+
 2017-12-12  Dean Jackson  <d...@apple.com>
 
         Add CanvasRenderingContext2DBase class and OffscreenCanvasRenderingContext2D

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (225821 => 225822)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2017-12-13 00:32:57 UTC (rev 225821)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2017-12-13 00:40:08 UTC (rev 225822)
@@ -6613,6 +6613,12 @@
         m_player->setShouldDisableSleep(shouldDisableSleep == SleepType::Display);
 }
 
+static inline bool isRemoteMediaStreamVideoTrack(RefPtr<MediaStreamTrack>& item)
+{
+    auto* track = item.get();
+    return track->privateTrack().type() == RealtimeMediaSource::Type::Video && !track->isCaptureTrack() && !track->isCanvas();
+}
+
 HTMLMediaElement::SleepType HTMLMediaElement::shouldDisableSleep() const
 {
     // See https://bugs.webkit.org/show_bug.cgi?id=180197 before removing this guard.
@@ -6628,15 +6634,14 @@
         return SleepType::System;
 #endif
 
+    bool shouldBeAbleToSleep = !hasVideo() || !hasAudio();
 #if ENABLE(MEDIA_STREAM)
-    if (m_mediaStreamSrcObject) {
-        // Do not block system from sleeping if element is only rendering local (capture) sources.
-        if (WTF::allOf(m_mediaStreamSrcObject->getTracks(), [] (RefPtr<MediaStreamTrack>& track) { return track && track->isCaptureTrack(); }))
-            return SleepType::None;
-    }
+    // Remote media stream video tracks may have their corresponding audio tracks being played outside of the media element. Let's ensure to not IDLE the screen in that case.
+    // FIXME: We should check that audio is being/to be played. Ideally, we would come up with a media stream agnostic heuristisc.
+    shouldBeAbleToSleep = shouldBeAbleToSleep && !(m_mediaStreamSrcObject && WTF::anyOf(m_mediaStreamSrcObject->getTracks(), isRemoteMediaStreamVideoTrack));
 #endif
 
-    if (!hasVideo() || !hasAudio())
+    if (shouldBeAbleToSleep)
         return SleepType::None;
 
     if (m_elementIsHidden)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to