Changeset 290874 in webkit
- Timestamp:
- Mar 6, 2022, 9:28:26 AM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 14 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/html/HTMLMediaElement.cpp (modified) (1 diff)
-
WebCore/platform/graphics/MediaPlayer.cpp (modified) (1 diff)
-
WebCore/platform/graphics/MediaPlayer.h (modified) (1 diff)
-
WebCore/platform/graphics/MediaPlayerPrivate.h (modified) (1 diff)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp (modified) (3 diffs)
-
WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h (modified) (3 diffs)
-
WebKit/GPUProcess/media/RemoteMediaPlayerProxy.messages.in (modified) (1 diff)
-
WebKit/GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h (modified) (4 diffs)
-
WebKit/GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm (modified) (4 diffs)
-
WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp (modified) (1 diff)
-
WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h (modified) (1 diff)
-
WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r290872 r290874 1 2022-03-06 Eric Carlson <eric.carlson@apple.com> 2 3 Push HTMLMediaElement renderer's contentBox rect to GPU process 4 https://bugs.webkit.org/show_bug.cgi?id=237444 5 rdar://84869202 6 7 Reviewed by Jer Noble. 8 9 No new tests. This is a speculative fix, with new logging, for an issue I haven't 10 been able to reproduce. 11 12 * html/HTMLMediaElement.cpp: 13 (WebCore::HTMLMediaElement::updateRenderer): Push mediaPlayerContentBoxRect to the 14 media player. 15 * platform/graphics/MediaPlayer.cpp: 16 (WebCore::MediaPlayer::playerContentBoxRectChanged): Pass rect to platform player. 17 * platform/graphics/MediaPlayer.h: 18 * platform/graphics/MediaPlayerPrivate.h: 19 (WebCore::MediaPlayerPrivateInterface::playerContentBoxRectChanged): 20 1 21 2022-03-05 Simon Fraser <simon.fraser@apple.com> 2 22 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r290778 r290874 895 895 if (m_mediaControlsHost) 896 896 m_mediaControlsHost->updateCaptionDisplaySizes(); 897 898 if (m_player) 899 m_player->playerContentBoxRectChanged(mediaPlayerContentBoxRect()); 897 900 } 898 901 -
trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp
r290470 r290874 1779 1779 } 1780 1780 1781 void MediaPlayer::playerContentBoxRectChanged(const LayoutRect& rect) 1782 { 1783 m_private->playerContentBoxRectChanged(rect); 1784 } 1785 1781 1786 #if PLATFORM(COCOA) 1782 1787 void MediaPlayer::onNewVideoFrameMetadata(VideoFrameMetadata&& metadata, RetainPtr<CVPixelBufferRef>&& buffer) -
trunk/Source/WebCore/platform/graphics/MediaPlayer.h
r290470 r290874 696 696 void stopVideoFrameMetadataGathering(); 697 697 698 void playerContentBoxRectChanged(const LayoutRect&); 699 698 700 private: 699 701 MediaPlayer(MediaPlayerClient&); -
trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
r290590 r290874 327 327 virtual void stopVideoFrameMetadataGathering() { } 328 328 329 virtual void playerContentBoxRectChanged(const LayoutRect&) { } 330 329 331 virtual void setResourceOwner(const ProcessIdentity&) { } 330 332 }; -
trunk/Source/WebKit/ChangeLog
r290863 r290874 1 2022-03-06 Eric Carlson <eric.carlson@apple.com> 2 3 Push HTMLMediaElement renderer's contentBox rect to GPU process 4 https://bugs.webkit.org/show_bug.cgi?id=237444 5 rdar://84869202 6 7 Reviewed by Jer Noble. 8 9 * GPUProcess/media/RemoteMediaPlayerProxy.cpp: 10 (WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy): Configuration now has 11 playerContentBoxRect. 12 (WebKit::RemoteMediaPlayerProxy::mediaPlayerContentBoxRect const): 13 (WebKit::RemoteMediaPlayerProxy::playerContentBoxRectChanged): Update playerContentBoxRect. 14 * GPUProcess/media/RemoteMediaPlayerProxy.h: 15 * GPUProcess/media/RemoteMediaPlayerProxy.messages.in: 16 17 * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h: 18 (WebKit::RemoteMediaPlayerProxyConfiguration::encode const): 19 (WebKit::RemoteMediaPlayerProxyConfiguration::decode): 20 21 * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm: 22 (WebKit::RemoteMediaPlayerProxy::setVideoInlineSizeIfPossible): Convert from static 23 function so we can log. 24 (WebKit::RemoteMediaPlayerProxy::mediaPlayerFirstVideoFrameAvailable): Add logging. 25 (WebKit::RemoteMediaPlayerProxy::mediaPlayerRenderingModeChanged): Ditto. 26 (WebKit::RemoteMediaPlayerProxy::setVideoInlineSizeFenced): Ditto. 27 (WebKit::setVideoInlineSizeIfPossible): Deleted. 28 29 * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp: 30 (WebKit::MediaPlayerPrivateRemote::playerContentBoxRectChanged): 31 * WebProcess/GPU/media/MediaPlayerPrivateRemote.h: 32 33 * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp: 34 (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer): 35 1 36 2022-03-04 Sihui Liu <sihui_liu@apple.com> 2 37 -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp
r290590 r290874 92 92 m_typesRequiringHardwareSupport = m_configuration.mediaContentTypesRequiringHardwareSupport; 93 93 m_renderingCanBeAccelerated = m_configuration.renderingCanBeAccelerated; 94 m_playerContentBoxRect = m_configuration.playerContentBoxRect; 94 95 m_player = MediaPlayer::create(*this, m_engineIdentifier); 95 96 if (auto* playerPrivate = m_player->playerPrivate()) … … 479 480 } 480 481 482 LayoutRect RemoteMediaPlayerProxy::mediaPlayerContentBoxRect() const 483 { 484 return m_playerContentBoxRect; 485 } 486 481 487 const Vector<WebCore::ContentType>& RemoteMediaPlayerProxy::mediaContentTypesRequiringHardwareSupport() const 482 488 { … … 1130 1136 } 1131 1137 1138 void RemoteMediaPlayerProxy::playerContentBoxRectChanged(const WebCore::LayoutRect& contentRect) 1139 { 1140 m_playerContentBoxRect = contentRect; 1141 } 1142 1132 1143 #if !RELEASE_LOG_DISABLED 1133 1144 WTFLogChannel& RemoteMediaPlayerProxy::logChannel() const -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h
r290590 r290874 279 279 bool mediaPlayerShouldUsePersistentCache() const final; 280 280 const String& mediaPlayerMediaCacheDirectory() const final; 281 WebCore::LayoutRect mediaPlayerContentBoxRect() const final; 281 282 282 283 void textTrackRepresentationBoundsChanged(const WebCore::IntRect&) final; … … 330 331 #endif 331 332 333 void playerContentBoxRectChanged(const WebCore::LayoutRect&); 334 332 335 bool mediaPlayerPausedOrStalled() const; 333 336 void currentTimeChanged(const MediaTime&); 334 337 335 338 #if PLATFORM(COCOA) 339 void setVideoInlineSizeIfPossible(const WebCore::FloatSize&); 336 340 void nativeImageForCurrentTime(CompletionHandler<void(std::optional<WTF::MachSendRight>&&, WebCore::DestinationColorSpace)>&&); 337 341 void colorSpace(CompletionHandler<void(WebCore::DestinationColorSpace)>&&); … … 376 380 WebCore::FloatSize m_videoInlineSize; 377 381 float m_videoContentScale { 1.0 }; 382 WebCore::LayoutRect m_playerContentBoxRect; 378 383 379 384 bool m_bufferedChanged { true }; -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.messages.in
r290175 r290874 134 134 StartVideoFrameMetadataGathering() 135 135 StopVideoFrameMetadataGathering() 136 137 PlayerContentBoxRectChanged(WebCore::LayoutRect contentRect) 136 138 } 137 139 -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h
r289697 r290874 30 30 #include <WebCore/ContentType.h> 31 31 #include <WebCore/FourCC.h> 32 #include <WebCore/LayoutRect.h> 32 33 #include <WebCore/PlatformTextTrack.h> 33 34 #include <WebCore/SecurityOriginData.h> … … 47 48 std::optional<Vector<WebCore::FourCC>> allowedMediaAudioCodecIDs; 48 49 std::optional<Vector<WebCore::FourCC>> allowedMediaCaptionFormatTypes; 49 50 WebCore::LayoutRect playerContentBoxRect; 50 51 Vector<String> preferredAudioCharacteristics; 51 52 #if ENABLE(AVF_CAPTIONS) … … 71 72 encoder << allowedMediaAudioCodecIDs; 72 73 encoder << allowedMediaCaptionFormatTypes; 74 encoder << playerContentBoxRect; 73 75 encoder << preferredAudioCharacteristics; 74 76 #if ENABLE(AVF_CAPTIONS) … … 95 97 && decoder.decode(configuration.allowedMediaAudioCodecIDs) 96 98 && decoder.decode(configuration.allowedMediaCaptionFormatTypes) 99 && decoder.decode(configuration.playerContentBoxRect) 97 100 && decoder.decode(configuration.preferredAudioCharacteristics) 98 101 #if ENABLE(AVF_CAPTIONS) -
trunk/Source/WebKit/GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm
r288315 r290874 39 39 namespace WebKit { 40 40 41 static void setVideoInlineSizeIfPossible(LayerHostingContext& context,const WebCore::FloatSize& size)41 void RemoteMediaPlayerProxy::setVideoInlineSizeIfPossible(const WebCore::FloatSize& size) 42 42 { 43 if (! context.rootLayer() || size.isEmpty())43 if (!m_inlineLayerHostingContext->rootLayer() || size.isEmpty()) 44 44 return; 45 46 ALWAYS_LOG(LOGIDENTIFIER, size.width(), "x", size.height()); 45 47 46 48 // We do not want animations here. 47 49 [CATransaction begin]; 48 50 [CATransaction setDisableActions:YES]; 49 [ context.rootLayer() setFrame:CGRectMake(0, 0, size.width(), size.height())];51 [m_inlineLayerHostingContext->rootLayer() setFrame:CGRectMake(0, 0, size.width(), size.height())]; 50 52 [CATransaction commit]; 51 53 } … … 67 69 void RemoteMediaPlayerProxy::mediaPlayerFirstVideoFrameAvailable() 68 70 { 69 // Initially the size of the platformLayer may be 0x0 because we do not provide mediaPlayerContentBoxRect() in this class.70 setVideoInlineSizeIfPossible( *m_inlineLayerHostingContext,m_videoInlineSize);71 ALWAYS_LOG(LOGIDENTIFIER); 72 setVideoInlineSizeIfPossible(m_videoInlineSize); 71 73 m_webProcessConnection->send(Messages::MediaPlayerPrivateRemote::FirstVideoFrameAvailable(), m_id); 72 74 } … … 74 76 void RemoteMediaPlayerProxy::mediaPlayerRenderingModeChanged() 75 77 { 78 ALWAYS_LOG(LOGIDENTIFIER); 76 79 m_inlineLayerHostingContext->setRootLayer(m_player->platformLayer()); 77 80 m_webProcessConnection->send(Messages::MediaPlayerPrivateRemote::RenderingModeChanged(), m_id); … … 79 82 void RemoteMediaPlayerProxy::setVideoInlineSizeFenced(const WebCore::FloatSize& size, const WTF::MachSendRight& machSendRight) 80 83 { 84 ALWAYS_LOG(LOGIDENTIFIER, size.width(), "x", size.height()); 81 85 m_inlineLayerHostingContext->setFencePort(machSendRight.sendRight()); 82 86 83 87 m_videoInlineSize = size; 84 setVideoInlineSizeIfPossible( *m_inlineLayerHostingContext,size);88 setVideoInlineSizeIfPossible(size); 85 89 } 86 90 -
trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
r290676 r290874 1417 1417 } 1418 1418 1419 void MediaPlayerPrivateRemote::playerContentBoxRectChanged(const LayoutRect& contentRect) 1420 { 1421 connection().send(Messages::RemoteMediaPlayerProxy::PlayerContentBoxRectChanged(contentRect), m_id); 1422 } 1423 1419 1424 void MediaPlayerPrivateRemote::requestResource(RemoteMediaResourceIdentifier remoteMediaResourceIdentifier, WebCore::ResourceRequest&& request, WebCore::PlatformMediaResourceLoader::LoadOptions options, CompletionHandler<void()>&& completionHandler) 1420 1425 { -
trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h
r290470 r290874 413 413 void stopVideoFrameMetadataGathering() final; 414 414 415 void playerContentBoxRectChanged(const WebCore::LayoutRect&) final; 416 415 417 #if PLATFORM(COCOA) 416 418 void pushVideoFrameMetadata(WebCore::VideoFrameMetadata&&, RetainPtr<CVPixelBufferRef>&&); -
trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp
r290329 r290874 174 174 proxyConfiguration.allowedMediaAudioCodecIDs = player->allowedMediaAudioCodecIDs(); 175 175 proxyConfiguration.allowedMediaCaptionFormatTypes = player->allowedMediaCaptionFormatTypes(); 176 proxyConfiguration.playerContentBoxRect = player->playerContentBoxRect(); 176 177 177 178 auto identifier = MediaPlayerIdentifier::generate();
Note:
See TracChangeset
for help on using the changeset viewer.