Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: ce9170834f27d66522b20ec1f423db0ee11f0ca2
https://github.com/WebKit/WebKit/commit/ce9170834f27d66522b20ec1f423db0ee11f0ca2
Author: Tyler Wilcock <[email protected]>
Date: 2025-03-01 (Sat, 01 Mar 2025)
Changed paths:
M Source/WebCore/accessibility/AXCoreObject.h
M Source/WebCore/accessibility/AXLogger.cpp
M Source/WebCore/accessibility/AXTextMarker.cpp
M Source/WebCore/accessibility/AccessibilityNodeObject.cpp
M Source/WebCore/accessibility/AccessibilityNodeObject.h
M Source/WebCore/accessibility/AccessibilityObject.h
M Source/WebCore/accessibility/cocoa/AXTextMarkerCocoa.mm
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
Log Message:
-----------
AX: AXTextMarker::offsetFromRoot repeatedly calls lineID() on a non-text-run
marker, which is very expensive
https://bugs.webkit.org/show_bug.cgi?id=288887
rdar://145889534
Reviewed by Chris Fleizach.
This commit fixes quadratic behavior in AXTextMarker::offsetFromRoot caused by
repeatedly calling lineID() on
a non-text-runs marker, which traverses to the first text-runs marker. This
commit reimplements offsetFromRoot in a way
that is much more efficient, leaning on our existing knowledge of whether
objects emit newlines rather than comparing
lineID()s.
This commit also includes a few other minor performance optimizations based on
the learning from this problem — namely,
we should always convert marker to text-runs-markers ASAP to avoid repeatedly
doing so in functions that require
text-runs-markers to operate correctly.
* Source/WebCore/accessibility/AXCoreObject.h:
(WebCore::AXCoreObject::emitsNewline const):
(WebCore::AXCoreObject::emitsNewlineAfter const): Deleted.
* Source/WebCore/accessibility/AXLogger.cpp:
(WebCore::operator<<):
* Source/WebCore/accessibility/AXTextMarker.cpp:
(WebCore::AXTextMarker::lineIndex const):
(WebCore::AXTextMarker::offsetFromRoot const):
(WebCore::AXTextMarkerRange::toString const):
(WebCore::AXTextMarker::lineRange const):
(WebCore::AXTextMarker::wordRange const):
(WebCore::AXTextMarker::sentenceRange const):
(WebCore::AXTextMarker::paragraphRange const):
* Source/WebCore/accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::textEmissionBehavior const):
(WebCore::AccessibilityNodeObject::emitTextAfterBehavior const): Deleted.
* Source/WebCore/accessibility/AccessibilityNodeObject.h:
* Source/WebCore/accessibility/AccessibilityObject.h:
* Source/WebCore/accessibility/cocoa/AXTextMarkerCocoa.mm:
(WebCore::AXTextMarkerRange::toAttributedString const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::initializeProperties):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:
Canonical link: https://commits.webkit.org/291455@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