[prev in list] [next in list] [prev in thread] [next in thread]
List: webkit-changes
Subject: [webkit-changes] [WebKit/WebKit] 002569: AX: Depending on the timing of Document::flushDefe...
From: Tyler Wilcock <noreply () github ! com>
Date: 2024-01-31 19:13:38
Message-ID: WebKit/WebKit/push/refs/heads/main/d21e6f-002569 () github ! com
[Download RAW message or body]
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 0025697e602664cc2c95bd76d69f538cbb61a0f0
https://github.com/WebKit/WebKit/commit/0025697e602664cc2c95bd76d69f538cbb61a0f0
Author: Tyler Wilcock <tyler_w@apple.com>
Date: 2024-01-31 (Wed, 31 Jan 2024)
Changed paths:
A LayoutTests/accessibility/tree-update-with-dirty-layout-expected.txt
A LayoutTests/accessibility/tree-update-with-dirty-layout.html
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/ios/TestExpectations
A LayoutTests/platform/ios/accessibility/tree-update-with-dirty-layout-expected.txt
M LayoutTests/platform/mac-wk1/TestExpectations
M LayoutTests/resources/accessibility-helper.js
M Source/WebCore/accessibility/AXCoreObject.cpp
M Source/WebCore/accessibility/AXCoreObject.h
M Source/WebCore/accessibility/AXObjectCache.cpp
M Source/WebCore/accessibility/AXObjectCache.h
M Source/WebCore/accessibility/AccessibilityObject.cpp
M Source/WebCore/accessibility/AccessibilityRenderObject.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
M Source/WebCore/dom/Document.cpp
Log Message:
-----------
AX: Depending on the timing of Document::flushDeferredAXObjectCacheUpdate(), \
AXObjectCache::performDeferredCacheUpdate can be run with dirty layout \
https://bugs.webkit.org/show_bug.cgi?id=268239 rdar://problem/121760427
Reviewed by Chris Fleizach and Andres Gonzalez.
In bug:
https://bugs.webkit.org/show_bug.cgi?id=256403 (Defer AX object cache update as an \
event loop task instead of a post layout task)
AXObjectCache::perfromDeferredCacheUpdate was moved from being a synchronous \
post-layout task to an asynchronous one, running when possible via the EventLoop.
The problem with this is that by the time \
Document::flushDeferredAXObjectCacheUpdate() actually fires, layout may have become \
dirty again, which means AXObjectCache::performDeferredCacheUpdate makes incorrect \
updates to the accessibility tree. As one specific example, it can cause us to \
compute the wrong ignored value for RenderTexts, as we check \
RenderText::hasRenderedText which may unexpectedly return false only because the \
layout is dirty.
With this patch, performDeferredCacheUpdate now detects when layout is dirty, and \
either waits another round in the event loop or forces a layout if necessary. Waiting \
for a clean layout rather than forcing one is ideal, as layout is expensive.
* LayoutTests/accessibility/tree-update-with-dirty-layout-expected.txt: Added.
* LayoutTests/accessibility/tree-update-with-dirty-layout.html: Added.
* LayoutTests/platform/glib/TestExpectations: Disable new test.
* LayoutTests/platform/ios/TestExpectations: Enable new test.
* LayoutTests/platform/ios/accessibility/tree-update-with-dirty-layout-expected.txt: \
Added.
* Source/WebCore/accessibility/AXCoreObject.cpp:
(WebCore::Accessibility::inRenderTreeOrStyleUpdate): Added.
* Source/WebCore/accessibility/AXCoreObject.h:
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::performDeferredCacheUpdate):
(WebCore::AXObjectCache::performCacheUpdateTimerFired): Deleted.
* Source/WebCore/accessibility/AXObjectCache.h:
(WebCore::AXObjectCache::performCacheUpdateTimerFired):
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::updateBackingStore):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::create):
* LayoutTests/resources/accessibility-helper.js:
Canonical link: https://commits.webkit.org/273844@main
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic