Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 75bfd79c190e9b11ce6e4677f6321d5d6432663a
      
https://github.com/WebKit/WebKit/commit/75bfd79c190e9b11ce6e4677f6321d5d6432663a
  Author: Jean-Yves Avenard <j...@apple.com>
  Date:   2024-01-30 (Tue, 30 Jan 2024)

  Changed paths:
    M Source/WebCore/loader/MediaResourceLoader.cpp
    M Source/WebCore/loader/MediaResourceLoader.h
    M Source/WebCore/loader/cache/CachedRawResourceClient.h
    M Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h
    M Source/WebCore/platform/graphics/WebMResourceClient.cpp
    M Source/WebCore/platform/graphics/WebMResourceClient.h
    M 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
    M 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
    M 
Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h
    M 
Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm
    M Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.h
    M Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.mm
    M Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp
    M Source/WebCore/platform/network/cocoa/RangeResponseGenerator.h
    M Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm
    M Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.h
    M Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm
    M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp
    M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h
    M Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp
    M Source/WebKit/GPUProcess/media/RemoteMediaResource.cpp
    M Source/WebKit/GPUProcess/media/RemoteMediaResource.h
    M Source/WebKit/GPUProcess/media/RemoteMediaResourceLoader.cpp
    M Source/WebKit/GPUProcess/media/RemoteMediaResourceLoader.h
    M Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.cpp
    M Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.h
    M Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp

  Log Message:
  -----------
  Perform media networking operations off the main thread
https://bugs.webkit.org/show_bug.cgi?id=235353
rdar://84517825

Reviewed by Eric Carlson.

We run the media's networking operation and IPC service into a new dedicated 
WorkQueue.
A MediaResource still need to be created on the main thread due to the current 
architecture
but all other operations will now run on a WorkQueue when the GPU Process is 
enabled.
For WK1 or if no GPU process is in use, we continue to use the main thread.

We use the IPC::Connection::WorkQueueMessageReceiver characteristics to proxy 
the network operations from the content process main thread to the GPU Process 
MediaResourceLoader's WorkQueue.

Side-by fixes: various thread-safety fixes in WebCoreNSURLSession, access to 
some members weren't thread-safe.

To make the code flow easier to follow, we use the new 
assertIsCurrent(WorkQueue&) extensively. Most methods will now assert that it 
runs on the thread it's supposed to.

* Source/WebCore/loader/MediaResourceLoader.cpp:
(WebCore::MediaResourceLoader::MediaResourceLoader):
(WebCore::MediaResourceLoader::~MediaResourceLoader):
(WebCore::MediaResourceLoader::contextDestroyed):
(WebCore::MediaResourceLoader::sendH2Ping):
(WebCore::MediaResourceLoader::requestResource):
(WebCore::MediaResourceLoader::removeResource):
(WebCore::MediaResourceLoader::addResponseForTesting):
(WebCore::MediaResourceLoader::document):
(WebCore::MediaResourceLoader::crossOriginMode const):
(WebCore::MediaResourceLoader::responsesForTesting const):
(WebCore::MediaResource::MediaResource):
(WebCore::MediaResource::~MediaResource):
(WebCore::MediaResource::shutdown):
(WebCore::MediaResource::responseReceived):
(WebCore::MediaResource::shouldCacheResponse):
(WebCore::MediaResource::redirectReceived):
(WebCore::MediaResource::dataSent):
(WebCore::MediaResource::dataReceived):
(WebCore::MediaResource::notifyFinished):
(WebCore::MediaResource::ensureShutdown):
(WebCore::MediaResource::stop): Deleted.
* Source/WebCore/loader/MediaResourceLoader.h:
* Source/WebCore/loader/cache/CachedRawResourceClient.h:
* Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h:
(WebCore::PlatformMediaResourceLoader::targetQueue):
(WebCore::PlatformMediaResource::didPassAccessControlCheck const):
(WebCore::PlatformMediaResource::shutdown):
(WebCore::PlatformMediaResource::setClient):
(WebCore::PlatformMediaResource::client const):
(WebCore::PlatformMediaResource::stop): Deleted.
(WebCore::PlatformMediaResource::client): Deleted.
* Source/WebCore/platform/graphics/WebMResourceClient.cpp:
(WebCore::WebMResourceClient::stop):
(WebCore::WebMResourceClient::dataReceived):
(WebCore::WebMResourceClient::loadFailed):
(WebCore::WebMResourceClient::loadFinished):
* Source/WebCore/platform/graphics/WebMResourceClient.h:
* 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
* 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):
(WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
(WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
(WebCore::MediaPlayerPrivateAVFoundationObjC::didCancelLoadingRequest):
(WebCore::MediaPlayerPrivateAVFoundationObjC::didStopLoadingRequest):
(WebCore::MediaPlayerPrivateAVFoundationObjC::didPassCORSAccessCheck const):
(WebCore::MediaPlayerPrivateAVFoundationObjC::isCrossOrigin const):
* Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
* 
Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
(WebCore::CachedResourceMediaLoader::responseReceived):
(WebCore::PlatformResourceMediaLoader::create):
(WebCore::PlatformResourceMediaLoader::PlatformResourceMediaLoader):
(WebCore::PlatformResourceMediaLoader::stop):
(WebCore::PlatformResourceMediaLoader::responseReceived):
(WebCore::PlatformResourceMediaLoader::loadFailed):
(WebCore::PlatformResourceMediaLoader::loadFinished):
(WebCore::PlatformResourceMediaLoader::dataReceived):
(WebCore::DataURLResourceMediaLoader::DataURLResourceMediaLoader):
(WebCore::WebCoreAVFResourceLoader::create):
(WebCore::WebCoreAVFResourceLoader::WebCoreAVFResourceLoader):
(WebCore::WebCoreAVFResourceLoader::~WebCoreAVFResourceLoader):
(WebCore::WebCoreAVFResourceLoader::startLoading):
(WebCore::WebCoreAVFResourceLoader::stopLoading):
(WebCore::WebCoreAVFResourceLoader::responseReceived):
(WebCore::WebCoreAVFResourceLoader::loadFailed):
(WebCore::WebCoreAVFResourceLoader::loadFinished):
(WebCore::WebCoreAVFResourceLoader::newDataStoredInSharedBuffer):
(WebCore::WebCoreAVFResourceLoader::invalidate): Deleted.
* Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.h:
* Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.mm:
(WebCore::MediaPlayerPrivateWebM::MediaPlayerPrivateWebM):
(WebCore::MediaPlayerPrivateWebM::dataReceived):
(WebCore::MediaPlayerPrivateWebM::loadFailed):
(WebCore::MediaPlayerPrivateWebM::loadFinished):
(WebCore::MediaPlayerPrivateWebM::setDuration):
(WebCore::MediaPlayerPrivateWebM::enqueueSample):
(WebCore::MediaPlayerPrivateWebM::notifyClientWhenReadyForMoreSamples):
(WebCore::MediaPlayerPrivateWebM::appendCompleted):
(WebCore::MediaPlayerPrivateWebM::maybeFinishLoading):
(WebCore::MediaPlayerPrivateWebM::trackDidChangeSelected):
(WebCore::MediaPlayerPrivateWebM::didParseInitializationData):
(WebCore::MediaPlayerPrivateWebM::append): Deleted.
* Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp: 
Initialise members with default values. Some can be read before a response is 
received.
(stopLoaderIfNeeded):
(webKitWebSrcUnLock):
(CachedResourceStreamingClient::responseReceived): Store origins into 
WebKitWebSrcPrivate as it may need to be retrieved after the 
PlatformMediaResourceClient got deleted.
(CachedResourceStreamingClient::redirectReceived): same.
(webKitSrcIsCrossOrigin):
* Source/WebCore/platform/network/cocoa/RangeResponseGenerator.h:
* Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:
(WebCore::RangeResponseGenerator::Data::Data):
(WebCore::RangeResponseGenerator::Data::~Data):
(WebCore::RangeResponseGenerator::Data::shutdownResource):
(WebCore::RangeResponseGenerator::RangeResponseGenerator):
(WebCore::RangeResponseGenerator::map):
(WebCore::synthesizedResponseForRange):
(WebCore::RangeResponseGenerator::removeTask):
(WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):
(WebCore::RangeResponseGenerator::expectedContentLengthFromData):
(WebCore::RangeResponseGenerator::giveResponseToTasksWithFinishedRanges):
(WebCore::RangeResponseGenerator::willHandleRequest):
(WebCore::RangeResponseGenerator::willSynthesizeRangeResponses):
(WebCore::RangeResponseGenerator::~RangeResponseGenerator): Deleted.
* Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.h:
* Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm:
(-[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:onTarget:]):
(-[WebCoreNSURLSessionTaskTransactionMetrics dealloc]):
(-[WebCoreNSURLSessionTaskMetrics _initWithMetrics:onTarget:]):
(-[WebCoreNSURLSessionTaskMetrics dealloc]):
(-[WebCoreNSURLSessionTaskMetrics transactionMetrics]):
(-[WebCoreNSURLSession initWithResourceLoader:delegate:delegateQueue:]):
(-[WebCoreNSURLSession dealloc]):
(-[WebCoreNSURLSession taskCompleted:]):
(-[WebCoreNSURLSession addDelegateOperation:]):
(-[WebCoreNSURLSession task:didReceiveCORSAccessCheckResult:]):
(-[WebCoreNSURLSession task:addSecurityOrigin:]):
(-[WebCoreNSURLSession rangeResponseGenerator]):
(-[WebCoreNSURLSession didPassCORSAccessChecks]):
(-[WebCoreNSURLSession isCrossOrigin:]):
(-[WebCoreNSURLSession finishTasksAndInvalidate]):
(-[WebCoreNSURLSession dataTaskWithRequest:]):
(-[WebCoreNSURLSession sendH2Ping:pongHandler:]):
(WebCore::WebCoreNSURLSessionDataTaskClient::WebCoreNSURLSessionDataTaskClient):
(WebCore::WebCoreNSURLSessionDataTaskClient::clearTask):
(WebCore::WebCoreNSURLSessionDataTaskClient::dataSent):
(WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
(WebCore::WebCoreNSURLSessionDataTaskClient::shouldCacheResponse):
(WebCore::WebCoreNSURLSessionDataTaskClient::dataReceived):
(WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived):
(WebCore::WebCoreNSURLSessionDataTaskClient::accessControlCheckFailed):
(WebCore::WebCoreNSURLSessionDataTaskClient::loadFailed):
(WebCore::WebCoreNSURLSessionDataTaskClient::loadFinished):
(-[WebCoreNSURLSessionDataTask 
initWithSession:identifier:request:targetQueue:]):
(-[WebCoreNSURLSessionDataTask _cancel]):
(-[WebCoreNSURLSessionDataTask error]):
(-[WebCoreNSURLSessionDataTask session]):
(-[WebCoreNSURLSessionDataTask setSession:]):
(-[WebCoreNSURLSessionDataTask resource]):
(-[WebCoreNSURLSessionDataTask setResource:]):
(-[WebCoreNSURLSessionDataTask cancel]):
(-[WebCoreNSURLSessionDataTask suspend]):
(-[WebCoreNSURLSessionDataTask resume]):
(-[WebCoreNSURLSessionDataTask dealloc]):
(-[WebCoreNSURLSessionDataTask resource:sentBytes:totalBytesToBeSent:]):
(-[WebCoreNSURLSessionDataTask resource:receivedResponse:completionHandler:]):
(-[WebCoreNSURLSessionDataTask resource:shouldCacheResponse:]):
(-[WebCoreNSURLSessionDataTask resource:receivedData:]):
(-[WebCoreNSURLSessionDataTask 
resource:receivedRedirect:request:completionHandler:]):
(-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]):
(-[WebCoreNSURLSessionDataTask resource:accessControlCheckFailedWithError:]):
(-[WebCoreNSURLSessionDataTask resource:loadFailedWithError:]):
(-[WebCoreNSURLSessionDataTask resourceFinished:metrics:]):
(-[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:]): Deleted.
(-[WebCoreNSURLSessionTaskMetrics _initWithMetrics:]): Deleted.
(-[WebCoreNSURLSessionDataTask initWithSession:identifier:request:]): Deleted.
(-[WebCoreNSURLSessionDataTask _restart]): Deleted.
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::GPUConnectionToWebProcess::didClose):
(WebKit::GPUConnectionToWebProcess::remoteMediaResourceManager):
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h:
* Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp:
(WebKit::RemoteMediaPlayerProxy::requestResource):
* Source/WebKit/GPUProcess/media/RemoteMediaResource.cpp:
(WebKit::RemoteMediaResource::RemoteMediaResource):
(WebKit::RemoteMediaResource::~RemoteMediaResource):
(WebKit::RemoteMediaResource::shutdown):
(WebKit::RemoteMediaResource::responseReceived):
(WebKit::RemoteMediaResource::redirectReceived):
(WebKit::RemoteMediaResource::dataSent):
(WebKit::RemoteMediaResource::dataReceived):
(WebKit::RemoteMediaResource::accessControlCheckFailed):
(WebKit::RemoteMediaResource::loadFailed):
(WebKit::RemoteMediaResource::loadFinished):
(WebKit::RemoteMediaResource::stop): Deleted.
* Source/WebKit/GPUProcess/media/RemoteMediaResource.h:
* Source/WebKit/GPUProcess/media/RemoteMediaResourceLoader.cpp:
(WebKit::RemoteMediaResourceLoader::RemoteMediaResourceLoader):
(WebKit::RemoteMediaResourceLoader::requestResource):
(WebKit::RemoteMediaResourceLoader::sendH2Ping):
* Source/WebKit/GPUProcess/media/RemoteMediaResourceLoader.h:
* Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.cpp:
(WebKit::RemoteMediaResourceManager::~RemoteMediaResourceManager):
(WebKit::RemoteMediaResourceManager::stopListeningForIPC):
(WebKit::RemoteMediaResourceManager::initializeConnection):
(WebKit::RemoteMediaResourceManager::addMediaResource):
(WebKit::RemoteMediaResourceManager::removeMediaResource):
(WebKit::RemoteMediaResourceManager::resourceForId):
(WebKit::RemoteMediaResourceManager::responseReceived):
(WebKit::RemoteMediaResourceManager::redirectReceived):
(WebKit::RemoteMediaResourceManager::dataSent):
(WebKit::RemoteMediaResourceManager::dataReceived):
(WebKit::RemoteMediaResourceManager::accessControlCheckFailed):
(WebKit::RemoteMediaResourceManager::loadFailed):
(WebKit::RemoteMediaResourceManager::loadFinished):
* Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.h:
(WebKit::RemoteMediaResourceManager::create):
* Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
(WebKit::MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote):
(WebKit::MediaPlayerPrivateRemote::removeResource):

Canonical link: https://commits.webkit.org/273804@main


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to