[webkit-changes] [WebKit/WebKit] 110619: Model Process CA layer hosting

eddydas noreply at github.com
Wed Feb 28 09:36:46 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 11061972c7486a8ddd132affabbc3396aa2ca961
      https://github.com/WebKit/WebKit/commit/11061972c7486a8ddd132affabbc3396aa2ca961
  Author: Eddy Wong <eddy_wong at apple.com>
  Date:   2024-02-28 (Wed, 28 Feb 2024)

  Changed paths:
    M Source/WebCore/Modules/model-element/HTMLModelElement.cpp
    M Source/WebCore/Modules/model-element/HTMLModelElement.h
    M Source/WebCore/Modules/model-element/ModelPlayer.h
    M Source/WebCore/Modules/model-element/ModelPlayerClient.h
    M Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp
    M Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h
    M Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h
    M Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.mm
    M Source/WebCore/platform/graphics/GraphicsLayer.h
    M Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
    M Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h
    M Source/WebCore/rendering/RenderLayerBacking.cpp
    M Source/WebKit/CMakeLists.txt
    M Source/WebKit/DerivedSources-input.xcfilelist
    M Source/WebKit/DerivedSources.make
    M Source/WebKit/ModelProcess/ModelProcessModelPlayerManagerProxy.cpp
    R Source/WebKit/ModelProcess/ModelProcessModelPlayerProxy.cpp
    R Source/WebKit/ModelProcess/ModelProcessModelPlayerProxy.h
    R Source/WebKit/ModelProcess/ModelProcessModelPlayerProxy.messages.in
    A Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h
    A Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.messages.in
    A Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm
    M Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.Model.sb.in
    M Source/WebKit/Scripts/process-entitlements.sh
    M Source/WebKit/Sources.txt
    M Source/WebKit/SourcesCocoa.txt
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/Model/ARKitInlinePreviewModelPlayer.h
    M Source/WebKit/WebProcess/Model/ARKitInlinePreviewModelPlayer.mm
    M Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp
    M Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.h
    M Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.messages.in
    M Source/WebKit/WebProcess/Model/ModelProcessModelPlayerManager.cpp
    M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h
    M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.mm
    M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h
    M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm
    M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.h
    M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm

  Log Message:
  -----------
  Model Process CA layer hosting
rdar://123273873
https://bugs.webkit.org/show_bug.cgi?id=269762

Reviewed by Tim Horton.

Hosts a dummy green CALayer in Model process and display it for
<model> tag, as a precursor to actually hosting the 3D model.

The hosting mechanism utilizes the same PlatformCALayerRemoteCustom
as that used by HTMLVideoElement, with some minor generalization.

We have created a new ContentsLayerPurpose::HostedModel to
distinguish between the existing in-process Model path and the
Model process path, as a temporary measure.

* Source/WebCore/Modules/model-element/HTMLModelElement.cpp:
(WebCore::HTMLModelElement::layerHostingContextIdentifier const):
(WebCore::HTMLModelElement::didUpdateLayerHostingContextIdentifier):
The hosting context identifier comes back in an async manner, so this
callback will ultimately re-create the correct hosting layer
pointing to this new hosting context identifier.

* Source/WebCore/Modules/model-element/HTMLModelElement.h:
* Source/WebCore/Modules/model-element/ModelPlayer.h:
* Source/WebCore/Modules/model-element/ModelPlayerClient.h:
* Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp:
(WebCore::DummyModelPlayer::layerHostingContextIdentifier):
* Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h:
* Source/WebCore/platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::setContentsToPlatformLayerCustom):
A generic way to utilize a PlatformLayerCustom with any
given hosting context identifier and purpose.

* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::createPlatformCALayerCustom):
(WebCore::GraphicsLayerCA::setContentsToPlatformLayerCustom):
A platformCALayerCustom essentially does one thing - hosts
another CALayer in another process. So this fits our purpose
well.

(WebCore::GraphicsLayerCA::purposeNameForInnerLayer const):
* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h:
The handling for the existing "Model" layer purpose is quite
distinct from what we are going to do. So let's introduce
a new "HostedModel" layer purpose for the time being. We could
remove the old "Model" one once the new HostedModel implementation
is fully in parity.

* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateConfiguration):
If we have a hosting context identifier, we are ready to
create a layer that displays the hosted CA layer. This
identifier is not always available, because its hosted
CALayer is created out of process and therefore is async.
The identifier will be nullopt before the async message
comes back.

* Source/WebKit/DerivedSources-input.xcfilelist:
* Source/WebKit/DerivedSources.make:
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h: Renamed from Source/WebKit/ModelProcess/ModelProcessModelPlayerProxy.h.
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.messages.in: Renamed from Source/WebKit/ModelProcess/ModelProcessModelPlayerProxy.messages.in.
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm: Renamed from Source/WebKit/ModelProcess/ModelProcessModelPlayerProxy.cpp.
(WebKit::ModelProcessModelPlayerProxy::create):
(WebKit::ModelProcessModelPlayerProxy::ModelProcessModelPlayerProxy):
(WebKit::ModelProcessModelPlayerProxy::~ModelProcessModelPlayerProxy):
(WebKit::ModelProcessModelPlayerProxy::invalidate):
(WebKit::ModelProcessModelPlayerProxy::send):
(WebKit::ModelProcessModelPlayerProxy::createLayer):
(WebKit::ModelProcessModelPlayerProxy::loadModel):
(WebKit::ModelProcessModelPlayerProxy::sizeDidChange):
* Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.Model.sb.in:
Allows CARenderServer connection from Model process since we need to
create a hosted CALayer.

* Source/WebKit/Scripts/process-entitlements.sh:
Specify the correct sandbox profile name instead of re-using WebContent's.

* Source/WebKit/Sources.txt:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
(WebKit::RemoteLayerTreeHost::makeNode):
Now that WebProcess vends a different PlatformCALayer for Model process path,
we no longer need to guard this site. This site is now only used by
in-process path.

* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp:
(WebKit::ModelProcessModelPlayer::~ModelProcessModelPlayer):
(WebKit::ModelProcessModelPlayer::send):
(WebKit::ModelProcessModelPlayer::didCreateLayer):
(WebKit::ModelProcessModelPlayer::load):
(WebKit::ModelProcessModelPlayer::sizeDidChange):
(WebKit::ModelProcessModelPlayer::didLoad): Deleted.
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.h:
(WebKit::ModelProcessModelPlayer::layerHostingContextIdentifier):
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.messages.in:
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayerManager.cpp:
(WebKit::ModelProcessModelPlayerManager::createModelProcessModelPlayer):
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.mm:
(WebKit::GraphicsLayerCARemote::createPlatformCALayerCustom):
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm:
(WebKit::PlatformCALayerRemote::create):
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.h:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
(WebKit::PlatformCALayerRemoteCustom::create):
(WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
Re-wire HTMLVideoElement's creation into the new initializer since they're
doing very much the same thing.

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



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


More information about the webkit-changes mailing list