Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 28e996fdbabd4690fb1937ca2f261ceb42b7883f https://github.com/WebKit/WebKit/commit/28e996fdbabd4690fb1937ca2f261ceb42b7883f Author: Jean-Yves Avenard <j...@apple.com> Date: 2023-12-11 (Mon, 11 Dec 2023)
Changed paths: A LayoutTests/media/media-source/content/test-fragmented.webm A LayoutTests/media/media-source/media-managedmse-multipletracks-bufferedchange-expected.txt A LayoutTests/media/media-source/media-managedmse-multipletracks-bufferedchange.html M LayoutTests/media/media-source/mock-managedmse-bufferedchange-expected.txt M LayoutTests/media/media-source/mock-managedmse-bufferedchange.html M LayoutTests/platform/glib/TestExpectations M LayoutTests/platform/mac-wk1/TestExpectations M Source/WebCore/Modules/mediasource/SourceBuffer.cpp M Source/WebCore/Modules/mediasource/SourceBuffer.h M Source/WebCore/platform/graphics/SourceBufferPrivate.cpp M Source/WebCore/platform/graphics/SourceBufferPrivate.h M Source/WebCore/platform/graphics/SourceBufferPrivateClient.h M Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp M Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h M Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.messages.in M Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.cpp M Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.h M Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.messages.in Log Message: ----------- [ManagedMSE] bufferedchange event isn't fired when MediaSource::endOfStream is called https://bugs.webkit.org/show_bug.cgi?id=266169 rdar://119451536 Reviewed by Youenn Fablet. The buffered range was calculated and held in the SourceBufferPrivate, however when endOfStream() is called, it requires to synchronously change the value of the buffered attribute. To allow to simulate synchronicity, we used to keep a cache in the MediaSourcePrivateRemote but this was fragile and incompatible with MSE in a worker. We can remove this caching and have the SourceBuffer hold the track buffered ranges instead and perform all the calculations there. The SourceBufferPrivate no longer need to be notified synchronously when the MediaSource is ended either which simplifies the threading model. We can simplify the IPC calls between the GPU process and the content process and only send the track buffered ranges when they are changing. And finally, by having the SourceBuffer owns the track buffered ranges, we can correctly fire the `bufferedchange` when mediaSource.endOfStream() is called. * LayoutTests/media/media-source/content/test-fragmented.webm: Added. * LayoutTests/media/media-source/media-managedmse-multipletracks-bufferedchange-expected.txt: Added. * LayoutTests/media/media-source/media-managedmse-multipletracks-bufferedchange.html: Added. * LayoutTests/media/media-source/mock-managedmse-bufferedchange-expected.txt: * LayoutTests/media/media-source/mock-managedmse-bufferedchange.html: * LayoutTests/platform/mac-wk1/TestExpectations: * Source/WebCore/Modules/mediasource/SourceBuffer.cpp: (WebCore::SourceBuffer::appendBufferInternal): (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): (WebCore::SourceBuffer::sourceBufferPrivateBufferedChanged): (WebCore::SourceBuffer::updateBuffered): (WebCore::SourceBuffer::setMediaSourceEnded): (WebCore::SourceBuffer::sourceBufferPrivateReportExtraMemoryCost): Deleted. * Source/WebCore/Modules/mediasource/SourceBuffer.h: (WebCore::SourceBuffer::bufferedInternal const): * Source/WebCore/platform/graphics/SourceBufferPrivate.cpp: (WebCore::SourceBufferPrivate::updateBuffered): (WebCore::SourceBufferPrivate::clearTrackBuffers): (WebCore::SourceBufferPrivate::setMediaSourceEnded): (WebCore::SourceBufferPrivate::removeCodedFrames): (WebCore::SourceBufferPrivate::removeCodedFramesInternal): (WebCore::SourceBufferPrivate::append): (WebCore::SourceBufferPrivate::memoryPressure): (WebCore::SourceBufferPrivate::minimumBufferedTime const): (WebCore::SourceBufferPrivate::maximumBufferedTime const): (WebCore::SourceBufferPrivate::evictFrames): (WebCore::SourceBufferPrivate::setBufferedRanges): Deleted. (WebCore::SourceBufferPrivate::updateBufferedFromTrackBuffers): Deleted. * Source/WebCore/platform/graphics/SourceBufferPrivate.h: (WebCore::SourceBufferPrivate::buffered const): Deleted. (WebCore::SourceBufferPrivate::queue): Deleted. * Source/WebCore/platform/graphics/SourceBufferPrivateClient.h: (WebCore::SourceBufferPrivateClient::sourceBufferPrivateTrackBuffersChanged): Deleted. * Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp: (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateBufferedChanged): (WebKit::RemoteSourceBufferProxy::append): (WebKit::RemoteSourceBufferProxy::removeCodedFrames): we instead rely on sourceBufferPrivateBufferedChanged to have been called. (WebKit::RemoteSourceBufferProxy::evictCodedFrames): (WebKit::RemoteSourceBufferProxy::memoryPressure): we instead rely on sourceBufferPrivateBufferedChanged to have been called. (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateTrackBuffersChanged): Deleted. (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateReportExtraMemoryCost): Deleted. * Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h: * Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.messages.in: * Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.cpp: (WebKit::SourceBufferPrivateRemote::append): (WebKit::SourceBufferPrivateRemote::removeCodedFrames): we instead rely on sourceBufferPrivateBufferedChanged to have been called. (WebKit::SourceBufferPrivateRemote::evictCodedFrames): (WebKit::SourceBufferPrivateRemote::sourceBufferPrivateBufferedChanged): (WebKit::SourceBufferPrivateRemote::memoryPressure): we instead rely on sourceBufferPrivateBufferedChanged to have been called. (WebKit::SourceBufferPrivateRemote::sourceBufferPrivateTrackBuffersChanged): Deleted. (WebKit::SourceBufferPrivateRemote::sourceBufferPrivateReportExtraMemoryCost): Deleted. * Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.h: * Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.messages.in: Canonical link: https://commits.webkit.org/271865@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes