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);