Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 8884fab24279a36dcfe3b5c1eaf5e68b41fb2874
https://github.com/WebKit/WebKit/commit/8884fab24279a36dcfe3b5c1eaf5e68b41fb2874
Author: Tyler Wilcock <[email protected]>
Date: 2023-05-06 (Sat, 06 May 2023)
Changed paths:
M LayoutTests/accessibility-isolated-tree/TestExpectations
A LayoutTests/accessibility/mac/display-contents-relative-frame-expected.txt
A LayoutTests/accessibility/mac/display-contents-relative-frame.html
A
LayoutTests/accessibility/mac/dynamic-transform-relative-frame-expected.txt
A LayoutTests/accessibility/mac/dynamic-transform-relative-frame.html
A
LayoutTests/accessibility/mac/position-fixed-top-bottom-properties-relative-frame-expected.txt
A
LayoutTests/accessibility/mac/position-fixed-top-bottom-properties-relative-frame.html
M LayoutTests/platform/mac-wk1/TestExpectations
M Source/WebCore/Headers.cmake
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
A Source/WebCore/accessibility/AXGeometryManager.cpp
A Source/WebCore/accessibility/AXGeometryManager.h
M Source/WebCore/accessibility/AXObjectCache.cpp
M Source/WebCore/accessibility/AXObjectCache.h
M Source/WebCore/accessibility/AccessibilityObject.h
M Source/WebCore/accessibility/AccessibilityObjectInterface.h
M Source/WebCore/accessibility/AccessibilityScrollView.cpp
M Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
M Source/WebCore/dom/Document.cpp
M Source/WebCore/page/LocalFrameView.h
M Source/WebCore/page/Page.cpp
M Source/WebCore/page/Page.h
M Source/WebCore/platform/ScrollView.cpp
M Source/WebCore/platform/ScrollView.h
M Source/WebCore/rendering/AccessibilityRegionContext.cpp
M Source/WebCore/rendering/AccessibilityRegionContext.h
M Source/WebCore/rendering/InlineBoxPainter.cpp
M Source/WebCore/rendering/RenderBlock.cpp
M Source/WebCore/rendering/RenderReplaced.cpp
M Source/WebCore/rendering/TextBoxPainter.cpp
Log Message:
-----------
AX: Cache AXIsolatedObject::relativeFrame using geometry computed during
PaintPhase::Accessibility
https://bugs.webkit.org/show_bug.cgi?id=256179
rdar://problem/108756434
Reviewed by Andres Gonzalez.
With this patch, we cache the relative frame for most types of objects with the
geometry computed
during PaintPhase::Accessibility. The high-level approach is as follows:
1. In Page::doAfterUpdateRendering, initiate a PaintPhase::Accessibility paint
- This paint is buffered on a timer to happen, at-most, once every 750ms,
to avoid taxing the main-thread.
2. As objects paint themselves during this phase, they will submit their
geometry to AccessibilityRegionContext.
3. AccessibilityRegionContext will apply any transforms, clips, and other
necessary modifications, and then send
the geometry to AXObjectCache::onPaint.
4. AXObjectCache::onPaint queues an update for the isolated tree (if
necessary)
After this patch, holding VO-Right on a popular social media website showed
that we serve 85% of relative
frame requests off the main-thread (we served 0% off the main-thread before
this patch).
This patch does not cache the relative frame for every type of object. Notable
missing types:
- Most AccessibilityMockObject subclasses, and other
non-AccessibilityRenderObject subclasses (because they do not have a renderer
to paint)
- SVGs. WebKit still uses the legacy SVG implementation, and I found it
difficult to extract the correct geometry from painted legacy SVGs.
- Node-only objects with no children
- And more; this list is not comprehensive.
* LayoutTests/accessibility-isolated-tree/TestExpectations:
* LayoutTests/accessibility/mac/display-contents-relative-frame-expected.txt:
Added.
* LayoutTests/accessibility/mac/display-contents-relative-frame.html: Added.
* LayoutTests/accessibility/mac/dynamic-transform-relative-frame-expected.txt:
Added.
* LayoutTests/accessibility/mac/dynamic-transform-relative-frame.html: Added.
*
LayoutTests/accessibility/mac/position-fixed-top-bottom-properties-relative-frame-expected.txt:
Added.
*
LayoutTests/accessibility/mac/position-fixed-top-bottom-properties-relative-frame.html:
Added.
* LayoutTests/platform/mac-wk1/TestExpectations:
* Source/WebCore/Headers.cmake:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/accessibility/AXGeometryManager.cpp: Added.
(WebCore::AXGeometryManager::AXGeometryManager):
(WebCore::AXGeometryManager::paintRectForID):
(WebCore::AXGeometryManager::onPaint):
(WebCore::AXGeometryManager::scheduleObjectRegionsUpdate):
(WebCore::AXGeometryManager::willUpdateObjectRegions):
(WebCore::AXGeometryManager::updateObjectRegionsTimerFired):
* Source/WebCore/accessibility/AXGeometryManager.h: Copied from
Source/WebCore/rendering/AccessibilityRegionContext.h.
(WebCore::AXGeometryManager::create):
(WebCore::AXGeometryManager::remove):
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::AXObjectCache):
(WebCore::AXObjectCache::getOrCreateIsolatedTree):
(WebCore::AXObjectCache::remove):
(WebCore::AXObjectCache::onPaint const):
(WebCore::AXObjectCache::getOrCreateIsolatedTree const): Deleted.
* Source/WebCore/accessibility/AXObjectCache.h:
(WebCore::AXObjectCache::paintRectForID):
(WebCore::AXObjectCache::onPaint const):
(WebCore::AXObjectCache::scheduleObjectRegionsUpdate):
(WebCore::AXObjectCache::willUpdateObjectRegions):
(WebCore::AXObjectCache::onPaint):
(WebCore::AXObjectCache::updateObjectRegionsTimerFired):
* Source/WebCore/accessibility/AccessibilityObject.h:
* Source/WebCore/accessibility/AccessibilityObjectInterface.h:
(WebCore::Accessibility::exposedTableAncestor):
* Source/WebCore/accessibility/AccessibilityScrollView.cpp:
(WebCore::AccessibilityScrollView::elementRect const):
* Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper tableParent]):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::initializeProperties):
(WebCore::AXIsolatedObject::optionalAttributeValue const):
(WebCore::AXIsolatedObject::elementRect const):
(WebCore::AXIsolatedObject::relativeFrame const):
(WebCore::AXIsolatedObject::relativeFrameFromChildren const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::updateFrame):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::updateAccessibilityObjectRegions):
* Source/WebCore/page/LocalFrameView.h:
* Source/WebCore/page/Page.cpp:
(WebCore::Page::doAfterUpdateRendering):
(WebCore::Page::shouldUpdateAccessibilityRegions const):
(WebCore::operator<<):
* Source/WebCore/page/Page.h:
* Source/WebCore/platform/ScrollView.cpp:
(WebCore::ScrollView::frameRectShrunkByInset const):
(WebCore::ScrollView::paint):
* Source/WebCore/platform/ScrollView.h:
* Source/WebCore/rendering/AccessibilityRegionContext.cpp:
(WebCore::AccessibilityRegionContext::~AccessibilityRegionContext):
(WebCore::AccessibilityRegionContext::takeBounds):
(WebCore::AccessibilityRegionContext::takeBoundsInternal):
(WebCore::AccessibilityRegionContext::onPaint):
* Source/WebCore/rendering/AccessibilityRegionContext.h:
(WebCore::AccessibilityRegionContext::takeBounds):
* Source/WebCore/rendering/InlineBoxPainter.cpp:
(WebCore::InlineBoxPainter::paint):
* Source/WebCore/rendering/RenderBlock.cpp:
(WebCore::RenderBlock::paintObject):
* Source/WebCore/rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::paint):
* Source/WebCore/rendering/TextBoxPainter.cpp:
(WebCore::TextBoxPainter<TextBoxPath>::paint):
Canonical link: https://commits.webkit.org/263771@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes