[webkit-changes] [WebKit/WebKit] e6f958: AX: accessibilityAttributeNames does several unnec...

Tyler Wilcock noreply at github.com
Wed Dec 11 11:58:22 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e6f95871da78d511ad2bdb4a1bb135818288d4d4
      https://github.com/WebKit/WebKit/commit/e6f95871da78d511ad2bdb4a1bb135818288d4d4
  Author: Tyler Wilcock <tyler_w at apple.com>
  Date:   2024-12-11 (Wed, 11 Dec 2024)

  Changed paths:
    M LayoutTests/accessibility/display-contents/role-row-headers-expected.txt
    M LayoutTests/accessibility/image-link-expected.txt
    M LayoutTests/accessibility/image-map2-expected.txt
    M LayoutTests/accessibility/mac/aria-columnrowheaders-expected.txt
    M LayoutTests/accessibility/mac/bounds-for-range-expected.txt
    M LayoutTests/accessibility/mac/document-attributes-expected.txt
    M LayoutTests/accessibility/mac/document-links-expected.txt
    M LayoutTests/accessibility/mac/internal-link-anchors-expected.txt
    M LayoutTests/accessibility/table-attributes-expected.txt
    M LayoutTests/accessibility/table-cell-spans-expected.txt
    M LayoutTests/accessibility/table-cells-expected.txt
    M LayoutTests/accessibility/table-multiple-tbodies-expected.txt
    M LayoutTests/accessibility/table-thead-tfoot-expected.txt
    M LayoutTests/accessibility/table-with-rules-expected.txt
    M LayoutTests/platform/mac/accessibility/lists-expected.txt
    M Source/WebCore/accessibility/AXCoreObject.cpp
    M Source/WebCore/accessibility/AXCoreObject.h
    M Source/WebCore/accessibility/AccessibilityObject.cpp
    M Source/WebCore/accessibility/AccessibilityRenderObject.cpp
    M Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp
    M Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm
    M Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
    M Source/WebCore/inspector/InspectorAuditAccessibilityObject.cpp
    M Source/WebCore/inspector/agents/InspectorDOMAgent.cpp

  Log Message:
  -----------
  AX: accessibilityAttributeNames does several unnecessary NSArray copies and ancestry traversals
https://bugs.webkit.org/show_bug.cgi?id=284212
rdar://141080358

Reviewed by Chris Fleizach.

Prior to this commit, -[WebAccessibilityObjectWrapperMac accessibilityAttributeNames] would unnecessarily call
arrayByAddingObjectsFromArray several times, which makes a copy of the NSArray (at least 2 unnecessary copies were made
for every object, with as many as 4 possible depending on the ARIA attributes and role combination). With this commit,
we are guaranteed to do at most 1, and significantly more often will not need to do any copy at all (e.g. for static
text objects, which are obviously one of the most common types). This saves 230 samples on a slow webpage.

This patch further optimizes -[WebAccessibilityObjectWrapperMac accessibilityAttributeNames] by combining three separate
ancestry traversals into one. This saves ~400 samples on a slow webpage.

Finally, this patch optimizes AXIsolatedObject creation. Prior to this patch, computing AXPropertyName::SortDirection
did an ancestry traversal for every single object in search of a row or column header, the only objects that are valid
to have aria-sort. With this commit, each object only checks its own role and aria-sort presence, saving an ancestry traversal.
Furthermore, this decreases memory usage, as prior to this patch, every descendant of a row or column header with aria-sort
would store that aria-sort value (since every object iterated upwards to find a sort-direction-having ancestor).

* LayoutTests/accessibility/display-contents/role-row-headers-expected.txt:
* LayoutTests/accessibility/image-link-expected.txt:
* LayoutTests/accessibility/image-map2-expected.txt:
* LayoutTests/accessibility/mac/aria-columnrowheaders-expected.txt:
* LayoutTests/accessibility/mac/bounds-for-range-expected.txt:
* LayoutTests/accessibility/mac/document-attributes-expected.txt:
* LayoutTests/accessibility/mac/document-links-expected.txt:
* LayoutTests/accessibility/mac/internal-link-anchors-expected.txt:
* LayoutTests/accessibility/table-attributes-expected.txt:
* LayoutTests/accessibility/table-cell-spans-expected.txt:
* LayoutTests/accessibility/table-cells-expected.txt:
* LayoutTests/accessibility/table-multiple-tbodies-expected.txt:
* LayoutTests/accessibility/table-thead-tfoot-expected.txt:
* LayoutTests/accessibility/table-with-rules-expected.txt:
* LayoutTests/platform/mac/accessibility/lists-expected.txt:
AXBusy is reordered in attribute name lists.

* Source/WebCore/accessibility/AXCoreObject.cpp:
(WebCore::AXCoreObject::hasPopup const):
(WebCore::AXCoreObject::selfOrAncestorLinkHasPopup const):
(WebCore::AXCoreObject::sortDirectionIncludingAncestors const):
* Source/WebCore/accessibility/AXCoreObject.h:
(WebCore::AXCoreObject::isInsideLiveRegion const): Deleted.
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::sortDirection const):
(WebCore::AccessibilityObject::buttonRoleType const):
* Source/WebCore/accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::determineAccessibilityRole):
* Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp:
(WebCore::AccessibilityObjectAtspi::states const):
(WebCore::AccessibilityObjectAtspi::attributes const):
* Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper accessibilityHasPopup]):
(-[WebAccessibilityObjectWrapper accessibilitySortDirection]):
* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper _additionalAccessibilityAttributeNames:]):
(-[WebAccessibilityObjectWrapper ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
* Source/WebCore/inspector/InspectorAuditAccessibilityObject.cpp:
(WebCore::InspectorAuditAccessibilityObject::getComputedProperties):
* Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:
(WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

Canonical link: https://commits.webkit.org/287686@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