[webkit-changes] [WebKit/WebKit] 365b5b: [view-transitions] Suppress rendering while a view...
mattwoodrow
noreply at github.com
Sun Jun 9 04:59:24 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 365b5b3b07b0ccc3be56f0a7bcce3f912f5d5b27
https://github.com/WebKit/WebKit/commit/365b5b3b07b0ccc3be56f0a7bcce3f912f5d5b27
Author: Matt Woodrow <mattwoodrow at apple.com>
Date: 2024-06-09 (Sun, 09 Jun 2024)
Changed paths:
M LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/input-targets-root-while-render-blocked-expected.txt
M LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-css-animation-while-render-blocked-expected.txt
A LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-painting-while-render-blocked-expected.html
A LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-painting-while-render-blocked-ref.html
A LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-painting-while-render-blocked.html
M LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-raf-while-render-blocked-expected.txt
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/mac-wk2/TestExpectations
M Source/WebCore/dom/Document.cpp
M Source/WebCore/dom/Document.h
M Source/WebCore/dom/ViewTransition.cpp
M Source/WebCore/page/ElementTargetingController.cpp
M Source/WebCore/page/InteractionRegion.cpp
M Source/WebCore/page/Page.cpp
M Source/WebCore/page/Page.h
M Source/WebCore/platform/Logging.h
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/platform/graphics/ca/PlatformCALayerClient.h
M Source/WebCore/rendering/EventRegion.cpp
M Source/WebCore/rendering/EventRegion.h
M Source/WebCore/rendering/RenderElementInlines.h
M Source/WebCore/rendering/RenderLayerCompositor.cpp
M Source/WebCore/rendering/RenderLayerCompositor.h
M Source/WebCore/rendering/RenderObject.cpp
M Source/WebCore/rendering/RenderObject.h
M Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
M Source/WebCore/rendering/svg/RenderSVGShape.cpp
M Source/WebCore/rendering/svg/RenderSVGText.cpp
M Source/WebCore/rendering/svg/SVGInlineTextBox.cpp
M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGImage.cpp
M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGModelObject.cpp
M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.cpp
M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h
M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm
Log Message:
-----------
[view-transitions] Suppress rendering while a view-transition is being setup.
https://bugs.webkit.org/show_bug.cgi?id=270672
rdar://124240939
Reviewed by Simon Fraser.
This implements rendering suppression by adding a flag to GraphicsLayer that
prevents updates to the PlatformCALayer tree for it and its descendants until
the flag is cleared. This will currently only work on cocoa, with remote
layers enabled.
The flag gets set on the GraphicsLayer after the rendering update completes,
so that any mutations made before rendering suppression were enabled (including
layer tree changes needed for suppression) get flushed before blocking all
future changes.
It also moves all consumers of RenderStyle:::usedPointerEvents to go via the
renderer, where we can override them to none while suppression is in place.
The exceptions are the style change handlers, which can remain unchanged
since we invalidate style entirely when the VT starts.
This doesn't yet prevent async scrolling rendering updates - bug 273612.
It also doesn't work fully with in-process layers - bug 273613.
* LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/input-targets-root-while-render-blocked-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-css-animation-while-render-blocked-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-painting-while-render-blocked-expected.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-painting-while-render-blocked-ref.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-painting-while-render-blocked.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-view-transitions/no-raf-while-render-blocked-expected.txt:
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/mac-wk2/TestExpectations:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::setActiveViewTransition):
(WebCore::Document::renderingIsSuppressedForViewTransition const):
(WebCore::Document::setRenderingIsSuppressedForViewTransitionAfterUpdateRendering):
(WebCore::Document::clearRenderingIsSuppressedForViewTransition):
(WebCore::Document::flushDeferredRenderingIsSuppressedForViewTransitionChanges):
(WebCore::Document::performPendingViewTransitions):
* Source/WebCore/dom/Document.h:
* Source/WebCore/dom/ViewTransition.cpp:
(WebCore::ViewTransition::skipViewTransition):
(WebCore::ViewTransition::setupViewTransition):
(WebCore::ViewTransition::activateViewTransition):
* Source/WebCore/page/ElementTargetingController.cpp:
(WebCore::ElementTargetingController::extractTargets):
* Source/WebCore/page/InteractionRegion.cpp:
(WebCore::interactionRegionForRenderedRegion):
* Source/WebCore/page/Page.cpp:
(WebCore::Page::updateRendering):
(WebCore::Page::doAfterUpdateRendering):
(WebCore::Page::didCompleteRenderingFrame):
(WebCore::Page::prioritizeVisibleResources):
(WebCore::Page::forEachRenderableDocument const):
* Source/WebCore/page/Page.h:
* Source/WebCore/platform/Logging.h:
* Source/WebCore/platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::renderingIsSuppressedIncludingDescendants const):
(WebCore::GraphicsLayer::setRenderingIsSuppressedIncludingDescendants):
* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::needsCommit):
* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h:
* Source/WebCore/platform/graphics/ca/PlatformCALayerClient.h:
(WebCore::PlatformCALayerClient::platformCALayerRenderingIsSuppressedIncludingDescendants const):
* Source/WebCore/rendering/EventRegion.cpp:
(WebCore::EventRegionContext::unite):
(WebCore::EventRegion::unite):
* Source/WebCore/rendering/EventRegion.h:
* Source/WebCore/rendering/RenderElementInlines.h:
(WebCore::RenderElement::visibleToHitTesting const):
* Source/WebCore/rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::setRenderingIsSuppressed):
* Source/WebCore/rendering/RenderLayerCompositor.h:
* Source/WebCore/rendering/RenderObject.cpp:
(WebCore::RenderObject::usedPointerEvents const):
* Source/WebCore/rendering/RenderObject.h:
* Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:
(WebCore::RenderSVGModelObject::checkIntersection):
(WebCore::RenderSVGModelObject::checkEnclosure):
* Source/WebCore/rendering/svg/RenderSVGShape.cpp:
(WebCore::RenderSVGShape::nodeAtPoint):
* Source/WebCore/rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::nodeAtFloatPoint):
* Source/WebCore/rendering/svg/SVGInlineTextBox.cpp:
(WebCore::SVGInlineTextBox::nodeAtPoint):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGImage.cpp:
(WebCore::LegacyRenderSVGImage::nodeAtFloatPoint):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGModelObject.cpp:
(WebCore::LegacyRenderSVGModelObject::checkIntersection):
(WebCore::LegacyRenderSVGModelObject::checkEnclosure):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.cpp:
(WebCore::LegacyRenderSVGShape::nodeAtFloatPoint):
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm:
(WebKit::PlatformCALayerRemote::recursiveMarkWillBeDisplayed):
(WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
Canonical link: https://commits.webkit.org/279857@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