Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: f37c05e1232e7be8dca7ddebe2003a9b1d75948c https://github.com/WebKit/WebKit/commit/f37c05e1232e7be8dca7ddebe2003a9b1d75948c Author: Kimmo Kinnunen <kkinnu...@apple.com> Date: 2023-04-04 (Tue, 04 Apr 2023)
Changed paths: M Source/WebCore/PlatformMac.cmake M Source/WebCore/SourcesCocoa.txt M Source/WebCore/WebCore.xcodeproj/project.pbxproj R Source/WebCore/html/canvas/GPUCanvasContextCocoa.cpp M Source/WebCore/html/canvas/GPUCanvasContextCocoa.h A Source/WebCore/html/canvas/GPUCanvasContextCocoa.mm R Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp M Source/WebCore/platform/graphics/ca/PlatformCALayer.h A Source/WebCore/platform/graphics/ca/PlatformCALayer.mm A Source/WebCore/platform/graphics/ca/PlatformCALayerDelegatedContents.h M Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.h M Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm M Source/WebCore/platform/graphics/cocoa/WebProcessGraphicsContextGLCocoa.mm M Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h M Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm M Source/WebKit/SourcesCocoa.txt M Source/WebKit/WebKit.xcodeproj/project.pbxproj M Source/WebKit/WebProcess/GPU/graphics/cocoa/RemoteGraphicsContextGLProxyCocoa.mm R Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h A Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm M Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm Log Message: ----------- Refactor PlatformCALayer to support finishing the delegated layer contents before compositing https://bugs.webkit.org/show_bug.cgi?id=254988 rdar://107605713 Reviewed by Simon Fraser. The WebKit compositor should wait for WebGL / WebGPU content to be finished before proceeding to send that to the system compositor. Otherwise slow WebGL content slows down the system user interface. Refactor "delegated contents" feature of PlatformCALayer to be able to pass objects that allow to do the above. The structure will be: - Each layer, i.e. WebGL or WebGPU context, has a Metal shared event that can be waited on. - Each submitted frame, i.e. IOSurface, will be ready to be composited only after the shared event has received a signal with the "finished identifier". Refactor the PlatformCALayer to support the above, but do not introduce any new functionality in this patch. Since Metal shared event is id<MTLSharedEvent>, Obj-C protocol, the code that uses definitions of new structs in PlatformCALayerDelegatedContents.h needs to also be real Obj-C code. - Renames previously C++ caller GPUCanvasContextCocoa.cpp to GPUCanvasContextCocoa.mm - Renames previously C++ callee PlatformCALayer.cpp to PlatformCALayer.mm * Source/WebCore/PlatformMac.cmake: * Source/WebCore/SourcesCocoa.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/html/canvas/GPUCanvasContextCocoa.h: * Source/WebCore/html/canvas/GPUCanvasContextCocoa.mm: Renamed from Source/WebCore/html/canvas/GPUCanvasContextCocoa.cpp. (WebCore::GPUCanvasContext::create): (WebCore::GPUCanvasContextCocoa::create): (WebCore::presentationContextDescriptor): (WebCore::getCanvasWidth): (WebCore::getCanvasHeight): (WebCore::GPUCanvasContextCocoa::GPUCanvasContextCocoa): (WebCore::GPUCanvasContextCocoa::reshape): (WebCore::GPUCanvasContextCocoa::canvas): (WebCore::GPUCanvasContextCocoa::configure): (WebCore::GPUCanvasContextCocoa::unconfigure): (WebCore::GPUCanvasContextCocoa::getCurrentTexture): (WebCore::GPUCanvasContextCocoa::pixelFormat const): (WebCore::GPUCanvasContextCocoa::colorSpace const): (WebCore::GPUCanvasContextCocoa::layerContentsDisplayDelegate): (WebCore::GPUCanvasContextCocoa::prepareForDisplay): (WebCore::GPUCanvasContextCocoa::markContextChangedAndNotifyCanvasObservers): * Source/WebCore/platform/graphics/ca/PlatformCALayer.h: * Source/WebCore/platform/graphics/ca/PlatformCALayer.mm: Renamed from Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp. (WebCore::PlatformCALayer::PlatformCALayer): (WebCore::PlatformCALayer::~PlatformCALayer): (WebCore::PlatformCALayer::currentTimeToMediaTime): (WebCore::PlatformCALayer::canHaveBackingStore const): (WebCore::PlatformCALayer::drawRepaintIndicator): (WebCore::PlatformCALayer::flipContext): (WebCore::PlatformCALayer::drawTextAtPoint const): (WebCore::PlatformCALayer::createCompatibleLayerOrTakeFromPool): (WebCore::PlatformCALayer::moveToLayerPool): (WebCore::PlatformCALayer::layerPool): (WebCore::PlatformCALayer::clearContents): (WebCore::PlatformCALayer::setDelegatedContentsFinishedEvent): (WebCore::PlatformCALayer::setDelegatedContents): (WebCore::PlatformCALayer::clearAcceleratedEffectsAndBaseValues): (WebCore::PlatformCALayer::setAcceleratedEffectsAndBaseValues): (WebCore::PlatformCALayer::dumpAdditionalProperties): (WebCore::operator<<): * Source/WebCore/platform/graphics/ca/PlatformCALayerDelegatedContents.h: Added. * Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.h: * Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm: (WebCore::PlatformCALayerCocoa::setDelegatedContentsFinishedEvent): (WebCore::PlatformCALayerCocoa::setDelegatedContents): * Source/WebCore/platform/graphics/cocoa/WebProcessGraphicsContextGLCocoa.mm: * Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h: * Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm: (WebKit::RemoteLayerBackingStore::setDelegatedContentsFinishedEvent): (WebKit::RemoteLayerBackingStore::setDelegatedContents): (WebKit::RemoteLayerBackingStore::setContents): Deleted. * Source/WebKit/WebProcess/GPU/graphics/cocoa/RemoteGraphicsContextGLProxyCocoa.mm: * Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h: * Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm: (WebKit::PlatformCALayerRemote::setDelegatedContentsFinishedEvent): (WebKit::PlatformCALayerRemote::setDelegatedContents): * Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm: Canonical link: https://commits.webkit.org/262613@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes