Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 3388dd2d1027cf92f3efa4976a7e835a54693e6d
https://github.com/WebKit/WebKit/commit/3388dd2d1027cf92f3efa4976a7e835a54693e6d
Author: Etienne Segonzac <[email protected]>
Date: 2026-04-07 (Tue, 07 Apr 2026)
Changed paths:
M Source/WebCore/rendering/RenderLayerBacking.cpp
M Source/WebCore/rendering/RenderModel.cpp
M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteGPU.cpp
M Source/WebKit/WebProcess/Model/WebModelPlayer.h
M Source/WebKit/WebProcess/Model/WebModelPlayer.mm
Log Message:
-----------
Avoid constantly updating models that are "at rest"
https://bugs.webkit.org/show_bug.cgi?id=311530
<rdar://172484538>
Reviewed by Mike Wyrzykowski.
Implement a clean update / render / display loop for the WebModelPlayer.
When no interaction or animations are playing the model is at rest and
stops updating and rendering.
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::contentChanged):
* Source/WebCore/rendering/RenderModel.cpp:
(WebCore::RenderModel::update):
Remove extra `setNeedsDisplay` calls making it harder to reason about
the WebModelPlayer render loop.
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteGPU.cpp:
(WebKit::RemoteGPU::createRenderBuffers):
Use double-buffering for the WebModelPlayer.
* Source/WebKit/WebProcess/Model/WebModelPlayer.h:
* Source/WebKit/WebProcess/Model/WebModelPlayer.mm:
(WebKit::WebModelPlayer::load):
(WebKit::WebModelPlayer::notifyEntityTransformUpdated):
(WebKit::WebModelPlayer::sizeDidChange):
(WebKit::WebModelPlayer::handleMouseDown):
(WebKit::WebModelPlayer::handleMouseMove):
(WebKit::WebModelPlayer::handleMouseUp):
(WebKit::WebModelPlayer::configureGraphicsLayer):
(WebKit::WebModelPlayer::displayBuffer const):
(WebKit::WebModelPlayer::simulate):
Only update the stagemode rotation from this one method, that runs at
most once per tick.
(WebKit::WebModelPlayer::setPlaybackRate):
(WebKit::WebModelPlayer::startUpdateLoopIfNeeded):
(WebKit::WebModelPlayer::scheduleUpdateIfNeeded):
(WebKit::WebModelPlayer::update):
(WebKit::WebModelPlayer::render):
(WebKit::WebModelPlayer::scheduleDisplayUpdate):
(WebKit::WebModelPlayer::play):
(WebKit::WebModelPlayer::setLoop):
(WebKit::WebModelPlayer::setCurrentTime):
(WebKit::WebModelPlayer::setStageMode):
(WebKit::WebModelPlayer::setEntityTransform):
(WebKit::WebModelPlayer::setEnvironmentMap):
(WebKit::WebModelPlayer::visibilityStateDidChange):
Implement the new update loop and trigger it from all the places where
something changes.
Canonical link: https://commits.webkit.org/310754@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications