Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: ef070161a369956d0787ffa9e4ae9904e27ee3cf
https://github.com/WebKit/WebKit/commit/ef070161a369956d0787ffa9e4ae9904e27ee3cf
Author: Nathan Solomon <[email protected]>
Date: 2025-01-15 (Wed, 15 Jan 2025)
Changed paths:
A
LayoutTests/fast/dom/gc-dom-tree-async-node-deletion-queue-limit-expected.txt
A LayoutTests/fast/dom/gc-dom-tree-async-node-deletion-queue-limit.html
A LayoutTests/fast/dom/gc-dom-tree-lifetime-shadow-tree-expected.txt
A LayoutTests/fast/dom/gc-dom-tree-lifetime-shadow-tree.html
M LayoutTests/fast/dom/gc-dom-tree-lifetime.html
M LayoutTests/intersection-observer/root-element-deleted.html
M LayoutTests/platform/ios/TestExpectations
M LayoutTests/platform/mac-wk1/TestExpectations
M Source/WebCore/Headers.cmake
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
A Source/WebCore/dom/AsyncNodeDeletionQueue.h
M Source/WebCore/dom/ContainerNode.cpp
M Source/WebCore/dom/ContainerNode.h
M Source/WebCore/dom/ContainerNodeAlgorithms.cpp
M Source/WebCore/dom/ContainerNodeAlgorithms.h
M Source/WebCore/dom/Document.cpp
M Source/WebCore/dom/Document.h
M Source/WebCore/page/MemoryRelease.cpp
M Source/WebCore/page/Page.cpp
M Source/WebCore/page/Page.h
M Source/WebCore/testing/Internals.cpp
M Source/WebCore/testing/Internals.h
M Source/WebCore/testing/Internals.idl
Log Message:
-----------
Asynchronously delete small DOM nodes
https://bugs.webkit.org/show_bug.cgi?id=282249
rdar://137026148
Reviewed by Matthieu Dubet and Ryosuke Niwa.
Make removedChildren DOM nodes get deleted using the Opportunistic Task
Scheduler.
Instead of synchronously deleting removed child nodes upon each call
to removeChildren, keep a strong reference to each child that has been
removed from the DOM tree but has not been deallocated. Remove the
last reference using the Opportunistic Task Scheduler which will call
each node's destructor.
This is an optimization. We see roughly a
.30% - .55% performance improvement.
*
LayoutTests/fast/dom/gc-dom-tree-async-node-deletion-queue-limit-expected.txt:
Added.
* LayoutTests/fast/dom/gc-dom-tree-async-node-deletion-queue-limit.html: Added.
* LayoutTests/fast/dom/gc-dom-tree-lifetime-shadow-tree-expected.txt: Added.
* LayoutTests/fast/dom/gc-dom-tree-lifetime-shadow-tree.html: Copied from
LayoutTests/fast/dom/gc-dom-tree-lifetime.html.
* LayoutTests/fast/dom/gc-dom-tree-lifetime.html:
* LayoutTests/intersection-observer/root-element-deleted.html:
* LayoutTests/platform/ios/TestExpectations:
* LayoutTests/platform/mac-wk1/TestExpectations:
* Source/WebCore/Headers.cmake:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/dom/AsyncNodeDeletionQueue.h: Added.
(WebCore::AsyncNodeDeletionQueue::addIfSubtreeSizeIsUnderLimit):
(WebCore::AsyncNodeDeletionQueue::deleteNodesNow):
(WebCore::AsyncNodeDeletionQueue::canNodeBeDeletedAsync):
(WebCore::AsyncNodeDeletionQueue::isNodeLikelyLarge):
* Source/WebCore/dom/ContainerNode.cpp:
(WebCore::ContainerNode::removeAllChildrenWithScriptAssertionMaybeAsync):
(WebCore::ContainerNode::removeAllChildrenWithScriptAssertion):
(WebCore::ContainerNode::removeNodeWithScriptAssertion):
(WebCore::ContainerNode::replaceAll):
(WebCore::ContainerNode::removeChildren):
(WebCore::ContainerNode::replaceChildren):
* Source/WebCore/dom/ContainerNode.h:
* Source/WebCore/dom/ContainerNodeAlgorithms.cpp:
(WebCore::updateCanDelayNodeDeletion):
(WebCore::notifyNodeRemovedFromDocument):
(WebCore::notifyNodeRemovedFromTree):
(WebCore::notifyChildNodeRemoved):
* Source/WebCore/dom/ContainerNodeAlgorithms.h:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::removedLastRef):
* Source/WebCore/dom/Document.h:
(WebCore::Document::asyncNodeDeletionQueue):
* Source/WebCore/page/MemoryRelease.cpp:
(WebCore::releaseNoncriticalMemory):
* Source/WebCore/page/Page.cpp:
(WebCore::Page::performOpportunisticallyScheduledTasks):
(WebCore::Page::deleteRemovedNodes):
* Source/WebCore/page/Page.h:
* Source/WebCore/testing/Internals.cpp:
(WebCore::Internals::executeOpportunisticallyScheduledTasks const):
* Source/WebCore/testing/Internals.h:
* Source/WebCore/testing/Internals.idl:
Canonical link: https://commits.webkit.org/288944@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