Title: [290874] trunk/Source
Revision
290874
Author
[email protected]
Date
2022-03-06 09:28:26 -0800 (Sun, 06 Mar 2022)

Log Message

Push HTMLMediaElement renderer's contentBox rect to GPU process
https://bugs.webkit.org/show_bug.cgi?id=237444
rdar://84869202

Reviewed by Jer Noble.

Source/WebCore:

No new tests. This is a speculative fix, with new logging, for an issue I haven't
been able to reproduce.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::updateRenderer): Push mediaPlayerContentBoxRect to the
media player.
* platform/graphics/MediaPlayer.cpp:
(WebCore::MediaPlayer::playerContentBoxRectChanged): Pass rect to platform player.
* platform/graphics/MediaPlayer.h:
* platform/graphics/MediaPlayerPrivate.h:
(WebCore::MediaPlayerPrivateInterface::playerContentBoxRectChanged):

Source/WebKit:

* GPUProcess/media/RemoteMediaPlayerProxy.cpp:
(WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy): Configuration now has
playerContentBoxRect.
(WebKit::RemoteMediaPlayerProxy::mediaPlayerContentBoxRect const):
(WebKit::RemoteMediaPlayerProxy::playerContentBoxRectChanged): Update playerContentBoxRect.
* GPUProcess/media/RemoteMediaPlayerProxy.h:
* GPUProcess/media/RemoteMediaPlayerProxy.messages.in:

* GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h:
(WebKit::RemoteMediaPlayerProxyConfiguration::encode const):
(WebKit::RemoteMediaPlayerProxyConfiguration::decode):

* GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
(WebKit::RemoteMediaPlayerProxy::setVideoInlineSizeIfPossible): Convert from static
function so we can log.
(WebKit::RemoteMediaPlayerProxy::mediaPlayerFirstVideoFrameAvailable): Add logging.
(WebKit::RemoteMediaPlayerProxy::mediaPlayerRenderingModeChanged): Ditto.
(WebKit::RemoteMediaPlayerProxy::setVideoInlineSizeFenced): Ditto.
(WebKit::setVideoInlineSizeIfPossible): Deleted.

* WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
(WebKit::MediaPlayerPrivateRemote::playerContentBoxRectChanged):
* WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

* WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
(WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (290873 => 290874)


--- trunk/Source/WebCore/ChangeLog	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebCore/ChangeLog	2022-03-06 17:28:26 UTC (rev 290874)
@@ -1,3 +1,23 @@
+2022-03-06  Eric Carlson  <[email protected]>
+
+        Push HTMLMediaElement renderer's contentBox rect to GPU process
+        https://bugs.webkit.org/show_bug.cgi?id=237444
+        rdar://84869202
+
+        Reviewed by Jer Noble.
+
+        No new tests. This is a speculative fix, with new logging, for an issue I haven't
+        been able to reproduce.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::updateRenderer): Push mediaPlayerContentBoxRect to the
+        media player.
+        * platform/graphics/MediaPlayer.cpp:
+        (WebCore::MediaPlayer::playerContentBoxRectChanged): Pass rect to platform player.
+        * platform/graphics/MediaPlayer.h:
+        * platform/graphics/MediaPlayerPrivate.h:
+        (WebCore::MediaPlayerPrivateInterface::playerContentBoxRectChanged):
+
 2022-03-05  Simon Fraser  <[email protected]>
 
         Replace IntRectExtent with RectEdges<int>

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (290873 => 290874)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2022-03-06 17:28:26 UTC (rev 290874)
@@ -894,6 +894,9 @@
 
     if (m_mediaControlsHost)
         m_mediaControlsHost->updateCaptionDisplaySizes();
+
+    if (m_player)
+        m_player->playerContentBoxRectChanged(mediaPlayerContentBoxRect());
 }
 
 void HTMLMediaElement::didAttachRenderers()

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp (290873 => 290874)


--- trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp	2022-03-06 17:28:26 UTC (rev 290874)
@@ -1778,6 +1778,11 @@
     m_private->stopVideoFrameMetadataGathering();
 }
 
+void MediaPlayer::playerContentBoxRectChanged(const LayoutRect& rect)
+{
+    m_private->playerContentBoxRectChanged(rect);
+}
+
 #if PLATFORM(COCOA)
 void MediaPlayer::onNewVideoFrameMetadata(VideoFrameMetadata&& metadata, RetainPtr<CVPixelBufferRef>&& buffer)
 {

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.h (290873 => 290874)


--- trunk/Source/WebCore/platform/graphics/MediaPlayer.h	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.h	2022-03-06 17:28:26 UTC (rev 290874)
@@ -695,6 +695,8 @@
     void startVideoFrameMetadataGathering();
     void stopVideoFrameMetadataGathering();
 
+    void playerContentBoxRectChanged(const LayoutRect&);
+
 private:
     MediaPlayer(MediaPlayerClient&);
     MediaPlayer(MediaPlayerClient&, MediaPlayerEnums::MediaEngineIdentifier);

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h (290873 => 290874)


--- trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h	2022-03-06 17:28:26 UTC (rev 290874)
@@ -326,6 +326,8 @@
     virtual void startVideoFrameMetadataGathering() { }
     virtual void stopVideoFrameMetadataGathering() { }
 
+    virtual void playerContentBoxRectChanged(const LayoutRect&) { }
+
     virtual void setResourceOwner(const ProcessIdentity&) { }
 };
 

Modified: trunk/Source/WebKit/ChangeLog (290873 => 290874)


--- trunk/Source/WebKit/ChangeLog	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebKit/ChangeLog	2022-03-06 17:28:26 UTC (rev 290874)
@@ -1,3 +1,38 @@
+2022-03-06  Eric Carlson  <[email protected]>
+
+        Push HTMLMediaElement renderer's contentBox rect to GPU process
+        https://bugs.webkit.org/show_bug.cgi?id=237444
+        rdar://84869202
+
+        Reviewed by Jer Noble.
+
+        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
+        (WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy): Configuration now has
+        playerContentBoxRect.
+        (WebKit::RemoteMediaPlayerProxy::mediaPlayerContentBoxRect const):
+        (WebKit::RemoteMediaPlayerProxy::playerContentBoxRectChanged): Update playerContentBoxRect.
+        * GPUProcess/media/RemoteMediaPlayerProxy.h:
+        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
+
+        * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h:
+        (WebKit::RemoteMediaPlayerProxyConfiguration::encode const):
+        (WebKit::RemoteMediaPlayerProxyConfiguration::decode):
+
+        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
+        (WebKit::RemoteMediaPlayerProxy::setVideoInlineSizeIfPossible): Convert from static
+        function so we can log.
+        (WebKit::RemoteMediaPlayerProxy::mediaPlayerFirstVideoFrameAvailable): Add logging.
+        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRenderingModeChanged): Ditto.
+        (WebKit::RemoteMediaPlayerProxy::setVideoInlineSizeFenced): Ditto.
+        (WebKit::setVideoInlineSizeIfPossible): Deleted.
+
+        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
+        (WebKit::MediaPlayerPrivateRemote::playerContentBoxRectChanged):
+        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
+
+        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
+        (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):
+
 2022-03-04  Sihui Liu  <[email protected]>
 
         Stop setting NSURLIsExcludedFromBackupKey attribute for localSorageDirectory in UI process

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp (290873 => 290874)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp	2022-03-06 17:28:26 UTC (rev 290874)
@@ -91,6 +91,7 @@
 {
     m_typesRequiringHardwareSupport = m_configuration.mediaContentTypesRequiringHardwareSupport;
     m_renderingCanBeAccelerated = m_configuration.renderingCanBeAccelerated;
+    m_playerContentBoxRect = m_configuration.playerContentBoxRect;
     m_player = MediaPlayer::create(*this, m_engineIdentifier);
     if (auto* playerPrivate = m_player->playerPrivate())
         playerPrivate->setResourceOwner(resourceOwner);
@@ -478,6 +479,11 @@
     return m_manager->gpuConnectionToWebProcess()->mediaCacheDirectory();
 }
 
+LayoutRect RemoteMediaPlayerProxy::mediaPlayerContentBoxRect() const
+{
+    return m_playerContentBoxRect;
+}
+
 const Vector<WebCore::ContentType>& RemoteMediaPlayerProxy::mediaContentTypesRequiringHardwareSupport() const
 {
     return m_typesRequiringHardwareSupport;
@@ -1129,6 +1135,11 @@
         m_player->startVideoFrameMetadataGathering();
 }
 
+void RemoteMediaPlayerProxy::playerContentBoxRectChanged(const WebCore::LayoutRect& contentRect)
+{
+    m_playerContentBoxRect = contentRect;
+}
+
 #if !RELEASE_LOG_DISABLED
 WTFLogChannel& RemoteMediaPlayerProxy::logChannel() const
 {

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h (290873 => 290874)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h	2022-03-06 17:28:26 UTC (rev 290874)
@@ -278,6 +278,7 @@
     bool doesHaveAttribute(const AtomString&, AtomString* = nullptr) const final;
     bool mediaPlayerShouldUsePersistentCache() const final;
     const String& mediaPlayerMediaCacheDirectory() const final;
+    WebCore::LayoutRect mediaPlayerContentBoxRect() const final;
 
     void textTrackRepresentationBoundsChanged(const WebCore::IntRect&) final;
 
@@ -329,10 +330,13 @@
     void mediaPlayerOnNewVideoFrameMetadata(WebCore::VideoFrameMetadata&&, RetainPtr<CVPixelBufferRef>&&);
 #endif
 
+    void playerContentBoxRectChanged(const WebCore::LayoutRect&);
+
     bool mediaPlayerPausedOrStalled() const;
     void currentTimeChanged(const MediaTime&);
 
 #if PLATFORM(COCOA)
+    void setVideoInlineSizeIfPossible(const WebCore::FloatSize&);
     void nativeImageForCurrentTime(CompletionHandler<void(std::optional<WTF::MachSendRight>&&, WebCore::DestinationColorSpace)>&&);
     void colorSpace(CompletionHandler<void(WebCore::DestinationColorSpace)>&&);
 #endif
@@ -375,6 +379,7 @@
 
     WebCore::FloatSize m_videoInlineSize;
     float m_videoContentScale { 1.0 };
+    WebCore::LayoutRect m_playerContentBoxRect;
 
     bool m_bufferedChanged { true };
     bool m_renderingCanBeAccelerated { false };

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.messages.in (290873 => 290874)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.messages.in	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.messages.in	2022-03-06 17:28:26 UTC (rev 290874)
@@ -133,6 +133,8 @@
 
     StartVideoFrameMetadataGathering()
     StopVideoFrameMetadataGathering()
+
+    PlayerContentBoxRectChanged(WebCore::LayoutRect contentRect)
 }
 
 #endif

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h (290873 => 290874)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h	2022-03-06 17:28:26 UTC (rev 290874)
@@ -29,6 +29,7 @@
 
 #include <WebCore/ContentType.h>
 #include <WebCore/FourCC.h>
+#include <WebCore/LayoutRect.h>
 #include <WebCore/PlatformTextTrack.h>
 #include <WebCore/SecurityOriginData.h>
 #include <wtf/text/WTFString.h>
@@ -46,7 +47,7 @@
     std::optional<Vector<WebCore::FourCC>> allowedMediaVideoCodecIDs;
     std::optional<Vector<WebCore::FourCC>> allowedMediaAudioCodecIDs;
     std::optional<Vector<WebCore::FourCC>> allowedMediaCaptionFormatTypes;
-
+    WebCore::LayoutRect playerContentBoxRect;
     Vector<String> preferredAudioCharacteristics;
 #if ENABLE(AVF_CAPTIONS)
     Vector<WebCore::PlatformTextTrackData> outOfBandTrackData;
@@ -70,6 +71,7 @@
         encoder << allowedMediaVideoCodecIDs;
         encoder << allowedMediaAudioCodecIDs;
         encoder << allowedMediaCaptionFormatTypes;
+        encoder << playerContentBoxRect;
         encoder << preferredAudioCharacteristics;
 #if ENABLE(AVF_CAPTIONS)
         encoder << outOfBandTrackData;
@@ -94,6 +96,7 @@
             && decoder.decode(configuration.allowedMediaVideoCodecIDs)
             && decoder.decode(configuration.allowedMediaAudioCodecIDs)
             && decoder.decode(configuration.allowedMediaCaptionFormatTypes)
+            && decoder.decode(configuration.playerContentBoxRect)
             && decoder.decode(configuration.preferredAudioCharacteristics)
 #if ENABLE(AVF_CAPTIONS)
             && decoder.decode(configuration.outOfBandTrackData)

Modified: trunk/Source/WebKit/GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm (290873 => 290874)


--- trunk/Source/WebKit/GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebKit/GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm	2022-03-06 17:28:26 UTC (rev 290874)
@@ -38,15 +38,17 @@
 
 namespace WebKit {
 
-static void setVideoInlineSizeIfPossible(LayerHostingContext& context, const WebCore::FloatSize& size)
+void RemoteMediaPlayerProxy::setVideoInlineSizeIfPossible(const WebCore::FloatSize& size)
 {
-    if (!context.rootLayer() || size.isEmpty())
+    if (!m_inlineLayerHostingContext->rootLayer() || size.isEmpty())
         return;
 
+    ALWAYS_LOG(LOGIDENTIFIER, size.width(), "x", size.height());
+
     // We do not want animations here.
     [CATransaction begin];
     [CATransaction setDisableActions:YES];
-    [context.rootLayer() setFrame:CGRectMake(0, 0, size.width(), size.height())];
+    [m_inlineLayerHostingContext->rootLayer() setFrame:CGRectMake(0, 0, size.width(), size.height())];
     [CATransaction commit];
 }
 
@@ -66,22 +68,24 @@
 
 void RemoteMediaPlayerProxy::mediaPlayerFirstVideoFrameAvailable()
 {
-    // Initially the size of the platformLayer may be 0x0 because we do not provide mediaPlayerContentBoxRect() in this class.
-    setVideoInlineSizeIfPossible(*m_inlineLayerHostingContext, m_videoInlineSize);
+    ALWAYS_LOG(LOGIDENTIFIER);
+    setVideoInlineSizeIfPossible(m_videoInlineSize);
     m_webProcessConnection->send(Messages::MediaPlayerPrivateRemote::FirstVideoFrameAvailable(), m_id);
 }
 
 void RemoteMediaPlayerProxy::mediaPlayerRenderingModeChanged()
 {
+    ALWAYS_LOG(LOGIDENTIFIER);
     m_inlineLayerHostingContext->setRootLayer(m_player->platformLayer());
     m_webProcessConnection->send(Messages::MediaPlayerPrivateRemote::RenderingModeChanged(), m_id);
 }
 void RemoteMediaPlayerProxy::setVideoInlineSizeFenced(const WebCore::FloatSize& size, const WTF::MachSendRight& machSendRight)
 {
+    ALWAYS_LOG(LOGIDENTIFIER, size.width(), "x", size.height());
     m_inlineLayerHostingContext->setFencePort(machSendRight.sendRight());
 
     m_videoInlineSize = size;
-    setVideoInlineSizeIfPossible(*m_inlineLayerHostingContext, size);
+    setVideoInlineSizeIfPossible(size);
 }
 
 void RemoteMediaPlayerProxy::mediaPlayerOnNewVideoFrameMetadata(VideoFrameMetadata&& metadata, RetainPtr<CVPixelBufferRef>&& buffer)

Modified: trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp (290873 => 290874)


--- trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp	2022-03-06 17:28:26 UTC (rev 290874)
@@ -1416,6 +1416,11 @@
     connection().send(Messages::RemoteMediaPlayerProxy::StopVideoFrameMetadataGathering(), m_id);
 }
 
+void MediaPlayerPrivateRemote::playerContentBoxRectChanged(const LayoutRect& contentRect)
+{
+    connection().send(Messages::RemoteMediaPlayerProxy::PlayerContentBoxRectChanged(contentRect), m_id);
+}
+
 void MediaPlayerPrivateRemote::requestResource(RemoteMediaResourceIdentifier remoteMediaResourceIdentifier, WebCore::ResourceRequest&& request, WebCore::PlatformMediaResourceLoader::LoadOptions options, CompletionHandler<void()>&& completionHandler)
 {
     ASSERT(!m_mediaResources.contains(remoteMediaResourceIdentifier));

Modified: trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h (290873 => 290874)


--- trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h	2022-03-06 17:28:26 UTC (rev 290874)
@@ -412,6 +412,8 @@
     void startVideoFrameMetadataGathering() final;
     void stopVideoFrameMetadataGathering() final;
 
+    void playerContentBoxRectChanged(const WebCore::LayoutRect&) final;
+
 #if PLATFORM(COCOA)
     void pushVideoFrameMetadata(WebCore::VideoFrameMetadata&&, RetainPtr<CVPixelBufferRef>&&);
 #endif

Modified: trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp (290873 => 290874)


--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp	2022-03-06 06:59:01 UTC (rev 290873)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp	2022-03-06 17:28:26 UTC (rev 290874)
@@ -173,6 +173,7 @@
     proxyConfiguration.allowedMediaVideoCodecIDs = player->allowedMediaVideoCodecIDs();
     proxyConfiguration.allowedMediaAudioCodecIDs = player->allowedMediaAudioCodecIDs();
     proxyConfiguration.allowedMediaCaptionFormatTypes = player->allowedMediaCaptionFormatTypes();
+    proxyConfiguration.playerContentBoxRect = player->playerContentBoxRect();
 
     auto identifier = MediaPlayerIdentifier::generate();
     gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::CreateMediaPlayer(identifier, remoteEngineIdentifier, proxyConfiguration), 0);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to