Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 9784033bdce3c771fc8e88735612c51c396d423b
      
https://github.com/WebKit/WebKit/commit/9784033bdce3c771fc8e88735612c51c396d423b
  Author: Jer Noble <[email protected]>
  Date:   2026-03-14 (Sat, 14 Mar 2026)

  Changed paths:
    M Source/WebCore/Modules/WebGPU/GPUBuffer.cpp
    M Source/WebCore/Modules/WebGPU/GPUBuffer.h
    M Source/WebCore/Modules/WebGPU/GPUCommandEncoder.cpp
    M Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.cpp
    M Source/WebCore/Modules/WebGPU/GPUDevice.cpp
    M Source/WebCore/Modules/WebGPU/GPUQueue.cpp
    M Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.cpp
    M Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.cpp
    M Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp
    M Source/WebCore/Modules/WebGPU/GPUTexture.cpp
    M Source/WebCore/Modules/applepay-ams-ui/ApplePayAMSUIPaymentHandler.cpp
    M Source/WebCore/Modules/applepay/ApplePaySession.cpp
    M Source/WebCore/Modules/applepay/ApplePaySetup.cpp
    M Source/WebCore/Modules/applepay/ApplePaySetupWebCore.h
    M Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp
    M Source/WebCore/Modules/async-clipboard/Clipboard.cpp
    M Source/WebCore/Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp
    M Source/WebCore/Modules/cache/DOMCache.cpp
    M Source/WebCore/Modules/cache/DOMCacheStorage.cpp
    M Source/WebCore/Modules/contact-picker/ContactsManager.cpp
    M Source/WebCore/Modules/cookie-store/CookieStore.cpp
    M Source/WebCore/Modules/credentialmanagement/CredentialsContainer.cpp
    M Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp
    M Source/WebCore/Modules/encryptedmedia/MediaKeySystemAccess.cpp
    M Source/WebCore/Modules/encryptedmedia/MediaKeys.cpp
    M Source/WebCore/Modules/encryptedmedia/NavigatorEME.cpp
    M Source/WebCore/Modules/fetch/FetchBody.cpp
    M Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp
    M Source/WebCore/Modules/fetch/FetchBodyOwner.cpp
    M Source/WebCore/Modules/fetch/FetchBodySource.cpp
    M Source/WebCore/Modules/fetch/WindowOrWorkerGlobalScopeFetch.cpp
    M Source/WebCore/Modules/filesystem/FileSystemDirectoryHandle.cpp
    M Source/WebCore/Modules/filesystem/FileSystemFileHandle.cpp
    M Source/WebCore/Modules/filesystem/FileSystemHandle.cpp
    M Source/WebCore/Modules/filesystem/FileSystemWritableFileStream.cpp
    M Source/WebCore/Modules/filesystem/FileSystemWritableFileStreamSink.cpp
    M Source/WebCore/Modules/gamepad/GamepadHapticActuator.cpp
    M Source/WebCore/Modules/identity/CredentialRequestCoordinator.cpp
    M Source/WebCore/Modules/identity/CredentialRequestCoordinator.h
    M Source/WebCore/Modules/identity/DigitalCredential.cpp
    M Source/WebCore/Modules/identity/DigitalCredential.h
    M Source/WebCore/Modules/indexeddb/IDBFactory.cpp
    M Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp
    M Source/WebCore/Modules/mediastream/ImageCapture.cpp
    M Source/WebCore/Modules/mediastream/ImageCapture.h
    M Source/WebCore/Modules/mediastream/MediaDevices.cpp
    M Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp
    M Source/WebCore/Modules/mediastream/MediaStreamTrack.h
    M Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp
    M Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp
    M Source/WebCore/Modules/mediastream/RTCEncodedStreamProducer.cpp
    M Source/WebCore/Modules/mediastream/RTCRtpSFrameTransform.cpp
    M Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp
    M Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp
    M Source/WebCore/Modules/model-element/HTMLModelElement.cpp
    M Source/WebCore/Modules/notifications/Notification.cpp
    M Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp
    M Source/WebCore/Modules/permissions/Permissions.cpp
    M 
Source/WebCore/Modules/pictureinpicture/HTMLVideoElementPictureInPicture.cpp
    M Source/WebCore/Modules/push-api/PushManager.cpp
    M Source/WebCore/Modules/push-api/PushSubscription.cpp
    M Source/WebCore/Modules/remoteplayback/RemotePlayback.cpp
    M Source/WebCore/Modules/screen-wake-lock/WakeLock.cpp
    M Source/WebCore/Modules/storage/StorageManager.cpp
    M Source/WebCore/Modules/streams/ReadableByteStreamController.cpp
    M Source/WebCore/Modules/streams/ReadableStreamDefaultReader.cpp
    M Source/WebCore/Modules/streams/ReadableStreamReadRequest.cpp
    M Source/WebCore/Modules/streams/ReadableStreamSource.cpp
    M Source/WebCore/Modules/streams/WritableStreamSink.cpp
    M Source/WebCore/Modules/streams/WritableStreamSink.h
    M Source/WebCore/Modules/web-locks/WebLockManager.cpp
    M Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.cpp
    M Source/WebCore/Modules/webaudio/BaseAudioContext.cpp
    M Source/WebCore/Modules/webaudio/OfflineAudioContext.cpp
    M Source/WebCore/Modules/webauthn/AuthenticatorCoordinator.cpp
    M Source/WebCore/Modules/webcodecs/WebCodecsAudioDecoder.cpp
    M Source/WebCore/Modules/webcodecs/WebCodecsAudioEncoder.cpp
    M Source/WebCore/Modules/webcodecs/WebCodecsVideoDecoder.cpp
    M Source/WebCore/Modules/webcodecs/WebCodecsVideoEncoder.cpp
    M Source/WebCore/Modules/webcodecs/WebCodecsVideoFrame.cpp
    M Source/WebCore/Modules/webtransport/DatagramSink.cpp
    M Source/WebCore/Modules/webtransport/WebTransport.cpp
    M Source/WebCore/Modules/webtransport/WebTransportDatagramsWritable.cpp
    M Source/WebCore/Modules/webtransport/WebTransportReceiveStream.cpp
    M Source/WebCore/Modules/webtransport/WebTransportSendGroup.cpp
    M Source/WebCore/Modules/webtransport/WebTransportSendStream.cpp
    M Source/WebCore/Modules/webtransport/WebTransportSendStreamSink.cpp
    M Source/WebCore/Modules/webtransport/WebTransportSendStreamSink.h
    M Source/WebCore/Modules/webtransport/WorkerWebTransportSession.cpp
    M Source/WebCore/Modules/webxr/WebXRSession.cpp
    M Source/WebCore/Modules/webxr/WebXRSystem.cpp
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/animation/KeyframeEffect.cpp
    M Source/WebCore/animation/WebAnimation.cpp
    M Source/WebCore/bindings/js/DOMPromiseProxy.h
    A Source/WebCore/bindings/js/JSDOMConvertBoolean.cpp
    M Source/WebCore/bindings/js/JSDOMConvertBoolean.h
    M Source/WebCore/bindings/js/JSDOMGuardedObject.cpp
    M Source/WebCore/bindings/js/JSDOMGuardedObject.h
    M Source/WebCore/bindings/js/JSDOMPromiseDeferred.cpp
    M Source/WebCore/bindings/js/JSDOMPromiseDeferred.h
    M Source/WebCore/bindings/js/JSDocumentCustom.cpp
    M Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp
    M Source/WebCore/bindings/js/JSImageDataCustom.cpp
    M Source/WebCore/bindings/js/JSMessageEventCustom.cpp
    M Source/WebCore/bindings/js/JSRTCRtpSFrameTransformCustom.cpp
    M Source/WebCore/bindings/js/JSWebAnimationCustom.cpp
    A Source/WebCore/bindings/js/ModuleScriptLoader.cpp
    M Source/WebCore/bindings/js/ModuleScriptLoader.h
    M Source/WebCore/bindings/js/ScriptModuleLoader.h
    M Source/WebCore/crypto/SubtleCrypto.cpp
    M Source/WebCore/css/CSSStyleSheet.cpp
    M Source/WebCore/css/CSSStyleSheetObservableArray.cpp
    M Source/WebCore/css/FontFace.cpp
    M Source/WebCore/dom/DocumentStorageAccess.cpp
    M Source/WebCore/dom/InternalObserverEvery.cpp
    M Source/WebCore/dom/InternalObserverFind.cpp
    M Source/WebCore/dom/InternalObserverFirst.cpp
    M Source/WebCore/dom/InternalObserverLast.cpp
    M Source/WebCore/dom/InternalObserverReduce.cpp
    M Source/WebCore/dom/InternalObserverSome.cpp
    M Source/WebCore/fileapi/Blob.cpp
    M Source/WebCore/html/OffscreenCanvas.cpp
    M Source/WebCore/inspector/InspectorFrontendHost.cpp
    M Source/WebCore/page/LocalDOMWindow.cpp
    M Source/WebCore/page/Navigation.cpp
    M Source/WebCore/page/Navigation.h
    M Source/WebCore/page/NavigationTransition.cpp
    M Source/WebCore/page/NavigationTransition.h
    M Source/WebCore/page/NavigatorLoginStatus.cpp
    M Source/WebCore/page/NavigatorUAData.h
    M Source/WebCore/page/UserMessageHandler.cpp
    M Source/WebCore/testing/ServiceWorkerInternals.cpp
    M Source/WebCore/testing/WebXRTest.cpp
    M Source/WebCore/workers/service/ExtendableMessageEvent.cpp
    M Source/WebCore/workers/service/ServiceWorkerClients.cpp
    M Source/WebCore/workers/service/ServiceWorkerContainer.cpp
    M Source/WebCore/workers/service/ServiceWorkerWindowClient.cpp
    M Source/WebCore/workers/service/background-fetch/BackgroundFetchManager.cpp
    M Source/WebCore/workers/service/background-fetch/BackgroundFetchManager.h
    M Source/WebCore/workers/service/background-fetch/BackgroundFetchRecord.cpp
    M 
Source/WebCore/workers/service/background-fetch/BackgroundFetchRegistration.cpp
    M 
Source/WebCore/workers/service/background-fetch/BackgroundFetchRegistration.h
    M 
Source/WebCore/workers/service/background-fetch/BackgroundFetchUpdateUIEvent.h
    M Source/WebCore/worklets/PaintWorkletGlobalScope.cpp
    M Source/WebCore/worklets/WorkletPendingTasks.cpp
    M Source/WebCore/worklets/WorkletPendingTasks.h

  Log Message:
  -----------
  [Build Speed] Reduce includes of JSDOMPromiseDeferred.h and make it cheaper
rdar://164123237
https://bugs.webkit.org/show_bug.cgi?id=302045

Reviewed by Brent Fulgham and BJ Burg.

Reduce the number of times JSDOMPromiseDeferred.h is included during a build, 
and for those times
when including that header is unavoidable, reduce the cost of including that 
header.

For the first part, remove JSDOMPromiseDeferred.h from (almost all) 
non-Inlines.h headers by
converting those headers to use JSDOMPromiseDeferredForward.h. This also 
requires any class that
stores a JSDOMPromiseDeferred to use a std::unique_ptr instead of a 
std::optional. It also required
some classes to have inline methods move to the implementation file (or have 
implementation files
added where none previously existed). These include SimpleWritableStreamSink, 
ModuleScriptLoader,
NavigationAPIMethodTracker, NavigationTransition, and WorkletPendingTasks.

For the second part, remove JSDOMConvert.h from JSDOMPromiseDeferred.h. 
JSDOMConvert.h pulls in
every different mechanism to convert a c++ object to an IDLType, which is very 
expensive. Instead,
the users of JSDOMPromiseDeferred.h should include only the specific 
JSDOMConvert*.h header needed
to call resolve() or reject().

Before this change, JSDOMPromiseDeferred.h was the 11th most expensive header 
in the WebCore Unified
build. It was included 184 times, at an average cost on this machine of 880ms 
of CPU time, for a total
cost of 2.7m of CPU time spent parsing this header.

After this change, JSDOMPromiseDeferred.h is the 67th most expensive header in 
the WebCore Unified
build. It is included 120 times, at an average cost on this machine of 430ms of 
CPU time, for a total
cost of 53s of CPU time spent parsing this header.

All told, frontend parsing time decreased from 8122s to 7876s, a reduction of 
3%.

* Source/WebCore/Modules/WebGPU/GPUBuffer.cpp:
(WebCore::GPUBuffer::mapAsync):
(WebCore::GPUBuffer::internalUnmap):
* Source/WebCore/Modules/WebGPU/GPUBuffer.h:
* Source/WebCore/Modules/WebGPU/GPUQueue.h:
* Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp:
* Source/WebCore/Modules/applepay/ApplePaySession.cpp:
* Source/WebCore/Modules/applepay/ApplePaySetup.cpp:
(WebCore::ApplePaySetup::getSetupFeatures):
(WebCore::ApplePaySetup::begin):
(WebCore::ApplePaySetup::stop):
* Source/WebCore/Modules/applepay/ApplePaySetupWebCore.h:
* Source/WebCore/Modules/cache/DOMCache.cpp:
* Source/WebCore/Modules/cache/DOMCacheStorage.cpp:
* Source/WebCore/Modules/contact-picker/ContactsManager.cpp:
* Source/WebCore/Modules/cookie-consent/NavigatorCookieConsent.cpp:
* Source/WebCore/Modules/cookie-store/CookieStore.cpp:
* Source/WebCore/Modules/credentialmanagement/CredentialsContainer.cpp:
* Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp:
* Source/WebCore/Modules/encryptedmedia/MediaKeySystemAccess.cpp:
* Source/WebCore/Modules/encryptedmedia/MediaKeys.cpp:
* Source/WebCore/Modules/encryptedmedia/NavigatorEME.cpp:
* Source/WebCore/Modules/fetch/FetchBody.cpp:
* Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp:
* Source/WebCore/Modules/fetch/WindowOrWorkerGlobalScopeFetch.cpp:
* Source/WebCore/Modules/filesystem/FileSystemDirectoryHandle.cpp:
* Source/WebCore/Modules/filesystem/FileSystemWritableFileStreamSink.cpp:
* Source/WebCore/Modules/gamepad/GamepadHapticActuator.cpp:
* Source/WebCore/Modules/identity/CredentialRequestCoordinator.cpp:
(WebCore::CredentialRequestCoordinator::setCurrentPromise):
(WebCore::CredentialRequestCoordinator::currentPromise):
* Source/WebCore/Modules/identity/CredentialRequestCoordinator.h:
* Source/WebCore/Modules/identity/DigitalCredential.cpp:
* Source/WebCore/Modules/identity/DigitalCredential.h:
* Source/WebCore/Modules/indexeddb/IDBFactory.cpp:
* Source/WebCore/Modules/mediastream/ImageCapture.cpp:
* Source/WebCore/Modules/mediastream/ImageCapture.h:
* Source/WebCore/Modules/mediastream/MediaDevices.cpp:
* Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:
* Source/WebCore/Modules/mediastream/MediaStreamTrack.h:
* Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp:
* Source/WebCore/Modules/mediastream/RTCEncodedStreamProducer.cpp:
* Source/WebCore/Modules/mediastream/RTCRtpSFrameTransform.cpp:
* Source/WebCore/Modules/mediastream/RTCRtpScriptTransformer.cpp:
* Source/WebCore/Modules/mediastream/UserMediaRequest.cpp:
* Source/WebCore/Modules/mediastream/VideoTrackGenerator.cpp:
* Source/WebCore/Modules/mediastream/VideoTrackGenerator.h:
* Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
* Source/WebCore/Modules/notifications/Notification.cpp:
* Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:
* Source/WebCore/Modules/permissions/Permissions.cpp:
* Source/WebCore/Modules/pictureinpicture/DocumentPictureInPicture.cpp:
* Source/WebCore/Modules/pictureinpicture/HTMLVideoElementPictureInPicture.cpp:
* Source/WebCore/Modules/push-api/PushSubscription.cpp:
* Source/WebCore/Modules/remoteplayback/RemotePlayback.cpp:
* Source/WebCore/Modules/screen-wake-lock/WakeLock.cpp:
* Source/WebCore/Modules/storage/StorageManager.cpp:
* Source/WebCore/Modules/streams/StreamPipeToUtilities.cpp:
* Source/WebCore/Modules/streams/WritableStreamSink.cpp: Copied from 
Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
(WebCore::SimpleWritableStreamSink::SimpleWritableStreamSink):
(WebCore::SimpleWritableStreamSink::write):
* Source/WebCore/Modules/streams/WritableStreamSink.h:
(WebCore::SimpleWritableStreamSink::SimpleWritableStreamSink): Deleted.
(WebCore::SimpleWritableStreamSink::write): Deleted.
* Source/WebCore/Modules/web-locks/WebLockManager.cpp:
* Source/WebCore/Modules/webaudio/OfflineAudioContext.cpp:
* Source/WebCore/Modules/webauthn/AuthenticatorCoordinator.cpp:
* Source/WebCore/Modules/webcodecs/WebCodecsVideoFrame.cpp:
* Source/WebCore/Modules/webtransport/DatagramSink.cpp:
* Source/WebCore/Modules/webtransport/WebTransport.cpp:
* Source/WebCore/Modules/webtransport/WebTransportSendStreamSink.cpp:
* Source/WebCore/Modules/webtransport/WorkerWebTransportSession.cpp:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/animation/WebAnimation.cpp:
* Source/WebCore/bindings/js/DOMPromiseProxy.h:
* Source/WebCore/bindings/js/JSDOMConvertEnumeration.h:
* Source/WebCore/bindings/js/JSDOMGuardedObject.h:
* Source/WebCore/bindings/js/JSDOMPromiseDeferred.h:
* Source/WebCore/bindings/js/ModuleScriptLoader.cpp: Copied from 
Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp.
(WebCore::ModuleScriptLoader::ModuleScriptLoader):
* Source/WebCore/bindings/js/ModuleScriptLoader.h:
(WebCore::ModuleScriptLoader::ModuleScriptLoader): Deleted.
* Source/WebCore/crypto/SubtleCrypto.cpp:
* Source/WebCore/css/DOMCSSPaintWorklet.cpp:
(WebCore::PaintWorklet::addModule):
* Source/WebCore/css/DOMCSSPaintWorklet.h:
* Source/WebCore/css/FontFace.cpp:
* Source/WebCore/css/FontFaceSet.cpp:
* Source/WebCore/dom/DocumentStorageAccess.cpp:
* Source/WebCore/dom/InternalObserverEvery.cpp:
* Source/WebCore/dom/InternalObserverFind.cpp:
* Source/WebCore/dom/InternalObserverFirst.cpp:
* Source/WebCore/dom/InternalObserverForEach.cpp:
* Source/WebCore/dom/InternalObserverSome.cpp:
* Source/WebCore/fileapi/Blob.cpp:
* Source/WebCore/html/OffscreenCanvas.cpp:
* Source/WebCore/inspector/InspectorFrontendHost.cpp:
* Source/WebCore/page/Navigation.cpp:
(WebCore::NavigationAPIMethodTracker::NavigationAPIMethodTracker):
* Source/WebCore/page/Navigation.h:
(WebCore::NavigationAPIMethodTracker::NavigationAPIMethodTracker): Deleted.
* Source/WebCore/page/NavigationTransition.cpp:
(WebCore::NavigationTransition::create):
* Source/WebCore/page/NavigationTransition.h:
* Source/WebCore/page/NavigatorLoginStatus.cpp:
* Source/WebCore/page/NavigatorUAData.cpp:
(WebCore::NavigatorUAData::createArbitraryVersion): Deleted.
(WebCore::NavigatorUAData::createArbitraryBrand): Deleted.
* Source/WebCore/page/NavigatorUAData.h:
(): Deleted.
* Source/WebCore/page/Quirks.cpp:
(WebCore::handleVimeoQuirks):
* Source/WebCore/page/UserMessageHandler.cpp:
* Source/WebCore/testing/ServiceWorkerInternals.cpp:
* Source/WebCore/workers/service/ServiceWorkerClients.cpp:
* Source/WebCore/workers/service/ServiceWorkerContainer.cpp:
* Source/WebCore/workers/service/ServiceWorkerWindowClient.cpp:
* Source/WebCore/workers/service/background-fetch/BackgroundFetchManager.cpp:
* Source/WebCore/workers/service/background-fetch/BackgroundFetchManager.h:
* Source/WebCore/workers/service/background-fetch/BackgroundFetchRecord.cpp:
* 
Source/WebCore/workers/service/background-fetch/BackgroundFetchRegistration.cpp:
* Source/WebCore/workers/service/background-fetch/BackgroundFetchRegistration.h:
* 
Source/WebCore/workers/service/background-fetch/BackgroundFetchUpdateUIEvent.h:
* Source/WebCore/worklets/Worklet.cpp:
(WebCore::Worklet::addModule):
* Source/WebCore/worklets/Worklet.h:
* Source/WebCore/worklets/WorkletPendingTasks.cpp:
(WebCore::WorkletPendingTasks::create):
(WebCore::WorkletPendingTasks::WorkletPendingTasks):
(WebCore::WorkletPendingTasks::abort):
(WebCore::WorkletPendingTasks::decrementCounter):
* Source/WebCore/worklets/WorkletPendingTasks.h:
(WebCore::WorkletPendingTasks::create): Deleted.

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to