Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 36b6519ff89e17bb7a38224b3f1c8403da54c417
https://github.com/WebKit/WebKit/commit/36b6519ff89e17bb7a38224b3f1c8403da54c417
Author: Tyler Wilcock <[email protected]>
Date: 2024-12-13 (Fri, 13 Dec 2024)
Changed paths:
M Source/WebCore/accessibility/AXObjectCache.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
M Source/WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm
Log Message:
-----------
AX: Accessing AXIsolatedTree::rootNode() should not require taking a lock
https://bugs.webkit.org/show_bug.cgi?id=284640
rdar://141445513
Reviewed by Chris Fleizach.
rootNode() is called quite frequently (e.g. from screenRelativePosition(),
relativeFrame(), isDetachedFromParent(), and more),
so it's important that it should be consistently fast to access (i.e. not
behind m_changeLogLock).
With this commit, we add AXIsolatedTree::m_pendingRootNode, matching the
pattern of other state we sync to the AX thread,
e.g. m_pendingFocusedNodeID and m_focusedNodeID. The expectation then becomes
that AXIsolatedTree::m_rootNode is only
ever read and written from the AX thread, except when each AXIsolatedTree is
first created before it is registered
via AXIsolatedTree::storeTree, as at that point only the main-thread can access
the tree.
This commit also fixes a potential thread-safety issue where
AXIsolatedTree::updateRootScreenRelativePosition accessed
the root node on the main-thread after the tree was registed via
`AXIsolatedTree::storeTree`.
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::getOrCreateIsolatedTree):
(WebCore::AXObjectCache::buildIsolatedTree):
(WebCore::AXObjectCache::isolatedTreeRootObject):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::isDetachedFromParent):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::createEmptyContent):
(WebCore::AXIsolatedTree::create):
(WebCore::AXIsolatedTree::applyPendingRootNode):
(WebCore::AXIsolatedTree::nodeChangeForObject):
(WebCore::AXIsolatedTree::setPendingRootNodeLocked):
(WebCore::AXIsolatedTree::updateRootScreenRelativePosition):
(WebCore::AXIsolatedTree::applyPendingChanges):
(WebCore::AXIsolatedTree::rootNode): Deleted.
(WebCore::AXIsolatedTree::setRootNode): Deleted.
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:
(WebCore::AXIsolatedTree::rootNode):
* Source/WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
(-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
Canonical link: https://commits.webkit.org/287828@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes