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