Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 9128760a1c6a839c8cb022f19e2a41cd842791d4
      
https://github.com/WebKit/WebKit/commit/9128760a1c6a839c8cb022f19e2a41cd842791d4
  Author: Tyler Wilcock <[email protected]>
  Date:   2023-05-25 (Thu, 25 May 2023)

  Changed paths:
    M Source/WebCore/accessibility/AXObjectCache.cpp
    M Source/WebCore/accessibility/AXObjectCache.h
    M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp

  Log Message:
  -----------
  AX: Cache accessibilityIsIgnored before in AXIsolatedTree::generateSubtree 
and AXIsolatedTree::updateChildren
https://bugs.webkit.org/show_bug.cgi?id=244724
rdar://problem/99501850

Reviewed by Andres Gonzalez.

We do a lot of reading from the live tree in AXIsolatedTree::generateSubtree
and AXIsolatedTree::updateChildren, especially during large updates.
This often involves repeated computation of accessibilityIsIgnored for
the same elements, which is expensive. This patch deploys 
AXAttributeCacheEnabler in both of
these codepaths.

This patch also fixes AXAttributeCacheEnabler to not disable the 
AXComputedObjectAttributeCache
if it existed before AXAttributeCacheEnabler was constructed. This prevents 
nested calls
to AXAttributeCacheEnabler from disabling the cache prematurely. Concretely, 
without this
change, we would construct an AXAttributeCacheEnabler in 
AXIsolatedTree::updateChildren,
then overwrite that cache with the AXAttributeCacheEnabler in 
AccessibilityObject::updateChildrenIfNecessary(),
then destroy that new cache when updateChildrenIfNecessary ends, making the 
initial cache
from AXIsolatedTree::updateChildren useless.

In a sample taken from Quip with 130k total samples, this eliminates 20k 
samples.

* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXAttributeCacheEnabler::AXAttributeCacheEnabler):
(WebCore::AXAttributeCacheEnabler::~AXAttributeCacheEnabler):
* Source/WebCore/accessibility/AXObjectCache.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::generateSubtree):
(WebCore::AXIsolatedTree::updateChildren):

Canonical link: https://commits.webkit.org/264524@main


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to