Changeset 284102 in webkit
- Timestamp:
- Oct 13, 2021, 10:28:28 AM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 7 edited
-
ChangeLog (modified) (1 diff)
-
GPUProcess/media/RemoteMediaPlayerProxy.cpp (modified) (1 diff)
-
GPUProcess/media/RemoteMediaPlayerProxy.h (modified) (2 diffs)
-
GPUProcess/media/RemoteMediaPlayerProxy.messages.in (modified) (1 diff)
-
GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm (modified) (1 diff)
-
WebProcess/GPU/media/MediaPlayerPrivateRemote.h (modified) (1 diff)
-
WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r284099 r284102 1 2021-10-13 Kimmo Kinnunen <kkinnunen@apple.com> 2 3 WebGL video texture upload is very slow due to excessive transfer of the video pixel buffer 4 https://bugs.webkit.org/show_bug.cgi?id=231425 5 6 Reviewed by Youenn Fablet. 7 8 Typical WebGL content requests the videos to be uploaded to a texture 9 once per render loop update, even though the video has not changed. 10 The video pixel buffer is slow to transfer across IPC. It should be transferred 11 only when it has changed. 12 13 MediaPlayerPrivateAVFoundationObjC and MediaPlayerPrivateMediaSourceAVFObjC hold 14 the last requested pixel buffer ref. They will update it or discard it only 15 when pixelBufferForCurrentTime() is called. 16 17 Cache the pixel buffer to MediaPlayerPrivateRemote (GPUP side proxy) 18 Cache the pixel buffer to RemoteMediaPlayerProxy (WebP side proxy) 19 20 The caches increase the total memory use only during the duration 21 of the call, since after the ref has been updated, it refers 22 to the one always held in the original objects (MediaPlayerPrivateAVFoundationObjC 23 and MediaPlayerPrivateMediaSourceAVFObjC) 24 25 No new tests, fixes a perf regression wrt GPUP media. 26 27 * GPUProcess/media/RemoteMediaPlayerProxy.cpp: 28 (WebKit::RemoteMediaPlayerProxy::invalidate): 29 * GPUProcess/media/RemoteMediaPlayerProxy.h: 30 * GPUProcess/media/RemoteMediaPlayerProxy.messages.in: 31 * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm: 32 (WebKit::RemoteMediaPlayerProxy::nativeImageForCurrentTime): 33 (WebKit::RemoteMediaPlayerProxy::pixelBufferForCurrentTimeIfChanged): 34 (WebKit::RemoteMediaPlayerProxy::pixelBufferForCurrentTime): Deleted. 35 * WebProcess/GPU/media/MediaPlayerPrivateRemote.h: 36 * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm: 37 (WebKit::MediaPlayerPrivateRemote::pixelBufferForCurrentTime): 38 1 39 2021-10-13 Per Arne Vollan <pvollan@apple.com> 2 40 -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp
r284080 r284102 107 107 } 108 108 m_renderingResourcesRequest = { }; 109 #if USE(AVFOUNDATION) 110 m_pixelBufferForCurrentTime = nullptr; 111 #endif 109 112 } 110 113 -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h
r283333 r284102 315 315 #endif 316 316 #if USE(AVFOUNDATION) 317 void pixelBufferForCurrentTime (CompletionHandler<void(RetainPtr<CVPixelBufferRef>&&)>&&);317 void pixelBufferForCurrentTimeIfChanged(CompletionHandler<void(std::optional<RetainPtr<CVPixelBufferRef>>&&)>&&); 318 318 #endif 319 319 … … 370 370 371 371 bool m_observingTimeChanges { false }; 372 372 #if USE(AVFOUNDATION) 373 RetainPtr<CVPixelBufferRef> m_pixelBufferForCurrentTime; 374 #endif 373 375 #if !RELEASE_LOG_DISABLED 374 376 const Logger& m_logger; -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.messages.in
r281227 r284102 127 127 #endif 128 128 #if USE(AVFOUNDATION) 129 PixelBufferForCurrentTime () -> (RetainPtr<CVPixelBufferRef> pixelBuffer) Synchronous129 PixelBufferForCurrentTimeIfChanged() -> (std::optional<RetainPtr<CVPixelBufferRef>> pixelBuffer) Synchronous 130 130 #endif 131 131 -
trunk/Source/WebKit/GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm
r280776 r284102 112 112 } 113 113 114 void RemoteMediaPlayerProxy::pixelBufferForCurrentTime(CompletionHandler<void(RetainPtr<CVPixelBufferRef>&&)>&& completionHandler) 114 #if USE(AVFOUNDATION) 115 void RemoteMediaPlayerProxy::pixelBufferForCurrentTimeIfChanged(CompletionHandler<void(std::optional<RetainPtr<CVPixelBufferRef>>&&)>&& completionHandler) 115 116 { 116 RetainPtr<CVPixelBufferRef> result; 117 std::optional<RetainPtr<CVPixelBufferRef>> result; 118 RetainPtr<CVPixelBufferRef> pixelBuffer; 117 119 if (m_player) 118 result = m_player->pixelBufferForCurrentTime(); 120 pixelBuffer = m_player->pixelBufferForCurrentTime(); 121 if (m_pixelBufferForCurrentTime != pixelBuffer) { 122 result = pixelBuffer; 123 m_pixelBufferForCurrentTime = WTFMove(pixelBuffer); 124 } 119 125 completionHandler(WTFMove(result)); 120 126 } 127 #endif 121 128 122 129 } // namespace WebKit -
trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h
r282789 r284102 446 446 bool m_timeIsProgressing { false }; 447 447 bool m_renderingCanBeAccelerated { false }; 448 #if USE(AVFOUNDATION) 449 RetainPtr<CVPixelBufferRef> m_pixelBufferForCurrentTime; 450 #endif 448 451 }; 449 452 -
trunk/Source/WebKit/WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm
r281157 r284102 67 67 } 68 68 69 #if USE(AVFOUNDATION) 69 70 RetainPtr<CVPixelBufferRef> MediaPlayerPrivateRemote::pixelBufferForCurrentTime() 70 71 { 71 72 RetainPtr<CVPixelBufferRef> result; 73 if (!connection().sendSync(Messages::RemoteMediaPlayerProxy::PixelBufferForCurrentTime(), Messages::RemoteMediaPlayerProxy::PixelBufferForCurrentTime::Reply(result), m_id)) 72 std::optional<RetainPtr<CVPixelBufferRef>> result; 73 if (!connection().sendSync(Messages::RemoteMediaPlayerProxy::PixelBufferForCurrentTimeIfChanged(), Messages::RemoteMediaPlayerProxy::PixelBufferForCurrentTimeIfChanged::Reply(result), m_id)) 74 74 return nullptr; 75 return result; 75 if (result) 76 m_pixelBufferForCurrentTime = WTFMove(*result); 77 return m_pixelBufferForCurrentTime; 76 78 } 79 #endif 77 80 78 81 } // namespace WebKit
Note:
See TracChangeset
for help on using the changeset viewer.