[webkit-changes] [WebKit/WebKit] f36f30: AX: -[WebAccessibilityObjectWrapper accessibilityI...

Tyler Wilcock noreply at github.com
Tue Oct 10 21:05:00 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f36f30e2e54847922e9b65cce60ab4fd75200404
      https://github.com/WebKit/WebKit/commit/f36f30e2e54847922e9b65cce60ab4fd75200404
  Author: Tyler Wilcock <tyler_w at apple.com>
  Date:   2023-10-10 (Tue, 10 Oct 2023)

  Changed paths:
    M Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm

  Log Message:
  -----------
  AX: -[WebAccessibilityObjectWrapper accessibilityIndexOfChild:] unnecessarily allocates an NSArray
https://bugs.webkit.org/show_bug.cgi?id=262941
rdar://problem/116717845

Reviewed by Chris Fleizach.

Prior to this patch, accessibilityIndexOfChild calls childrenVectorArray, which turns AXCoreObject::children()
into an NSArray of the corresponding wrappers. This is bad to use in accessibilityIndexOfChild for two reasons:

  1. This NSArray allocation shows up in the thousands of samples on some sites
  2. childrenVectorArray eagerly resolves attachments, which (for now) requires a main-thread hit,
     even if accessibilityIndexOfChild doesn't use the attachment

With this patch, we iterate over the children directly without allocating the NSArray. This saves 7k samples
on an internal webpage. Snippet from the sample:

6952 -[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]
! 6861 -[NSObject(NSObjectAccessibilityAttributeAccessAdditions) accessibilityIndexForChildUIElementAttributeForParameter:]
! : 6698 -[WebAccessibilityObjectWrapper accessibilityIndexOfChild:]
! : | 5016 makeNSArray(WTF::Vector<...> const&)
! : | + 4020 objc_msgSend  (in libobjc.A.dylib)
! : | + 684 -[__NSArrayM addObject:]
! : | + 133 -[__NSArrayM insertObject:atIndex:]
! : | + 66 objc_msgSend$addObject:
! : | + 61 objc_retain
! : | + 28 objc_msgSend$insertObject:atIndex:
! : | + 24 DYLD-STUB$$objc_retain
! : | 1163 makeNSArray(WTF::Vector<...> const&)

* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityIndexOfChild:]):

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




More information about the webkit-changes mailing list