[webkit-changes] [WebKit/WebKit] 28e996: [ManagedMSE] bufferedchange event isn't fired when...

Jean-Yves Avenard noreply at github.com
Mon Dec 11 02:29:00 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 28e996fdbabd4690fb1937ca2f261ceb42b7883f
      https://github.com/WebKit/WebKit/commit/28e996fdbabd4690fb1937ca2f261ceb42b7883f
  Author: Jean-Yves Avenard <jya at 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




More information about the webkit-changes mailing list