[webkit-changes] [WebKit/WebKit] 3b81a1: Add a fast path to Node::moveNodeToNewDocument
Ryosuke Niwa
noreply at github.com
Thu Jan 25 17:33:52 PST 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 3b81a10b2d4083c9426957aeba7ffc5086d7ed06
https://github.com/WebKit/WebKit/commit/3b81a10b2d4083c9426957aeba7ffc5086d7ed06
Author: Ryosuke Niwa <rniwa at webkit.org>
Date: 2024-01-25 (Thu, 25 Jan 2024)
Changed paths:
M Source/WebCore/Modules/model-element/HTMLModelElement.cpp
M Source/WebCore/dom/Document.h
M Source/WebCore/dom/DocumentInlines.h
M Source/WebCore/dom/EventDispatcher.cpp
M Source/WebCore/dom/Node.cpp
M Source/WebCore/dom/Node.h
M Source/WebCore/html/HTMLCanvasElement.cpp
M Source/WebCore/html/HTMLDataListElement.cpp
M Source/WebCore/html/HTMLFormControlElement.cpp
M Source/WebCore/html/HTMLFormElement.cpp
M Source/WebCore/html/HTMLImageElement.cpp
M Source/WebCore/html/HTMLMaybeFormAssociatedCustomElement.cpp
M Source/WebCore/html/HTMLMediaElement.cpp
M Source/WebCore/html/HTMLPlugInElement.cpp
M Source/WebCore/html/HTMLPlugInElement.h
M Source/WebCore/html/HTMLPlugInImageElement.cpp
M Source/WebCore/html/HTMLTemplateElement.cpp
M Source/WebCore/svg/SVGGraphicsElement.cpp
M Source/WebCore/svg/SVGGraphicsElement.h
M Source/WebCore/svg/SVGImageElement.cpp
M Source/WebCore/svg/SVGSVGElement.cpp
Log Message:
-----------
Add a fast path to Node::moveNodeToNewDocument
https://bugs.webkit.org/show_bug.cgi?id=268065
Reviewed by Yusuke Suzuki.
Add a fast path to Node::moveNodeToNewDocument when documents don't have ranges, node iterators,
event listeners, etc... as it is the case with the document created by DOMParser by default.
In the fast path, we only call Element::didMoveToNewDocument on elements when newly introduced
TypeFlag::HasDidMoveToNewDocument flag is set. Only a select few elements set this flag upon
construction so it avoids virtual function calls in most cases. We also coalesce the updates to
each document's referencing node count so that they're updated once at the end instead of getting
incremented and decremented by 1 upon visiting each node.
* Source/WebCore/Modules/model-element/HTMLModelElement.cpp:
(WebCore::HTMLModelElement::HTMLModelElement):
* Source/WebCore/dom/Document.h:
(WebCore::Document::incrementReferencingNodeCount):
(WebCore::Document::decrementReferencingNodeCount):
(WebCore::Document::hasRanges):
(WebCore::Document::hasEventListeners const):
* Source/WebCore/dom/DocumentInlines.h:
(WebCore::Document::hasNodeIterators const):
* Source/WebCore/dom/Node.cpp:
(WebCore::traverseSubtreeToUpdateTreeScope):
(WebCore::isDocumentEligibleForFastAdoption):
(WebCore::Node::moveShadowTreeToNewDocumentFastCase):
(WebCore::Node::moveShadowTreeToNewDocumentSlowCase): Renamed from moveShadowTreeToNewDocument.
(WebCore::Node::moveTreeToNewScope):
(WebCore::Node::moveNodeToNewDocumentFastCase):
(WebCore::Node::moveNodeToNewDocumentSlowCase): Renamed from moveNodeToNewDocument.
* Source/WebCore/dom/Node.h:
* Source/WebCore/html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::HTMLCanvasElement):
* Source/WebCore/html/HTMLDataListElement.cpp:
(WebCore::HTMLDataListElement::HTMLDataListElement):
* Source/WebCore/html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::HTMLFormControlElement):
* Source/WebCore/html/HTMLFormElement.cpp:
(WebCore::HTMLFormElement::HTMLFormElement):
* Source/WebCore/html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::HTMLImageElement):
* Source/WebCore/html/HTMLMaybeFormAssociatedCustomElement.cpp:
(WebCore::HTMLMaybeFormAssociatedCustomElement::HTMLMaybeFormAssociatedCustomElement):
* Source/WebCore/html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::HTMLMediaElement):
* Source/WebCore/html/HTMLPlugInElement.cpp:
(WebCore::HTMLPlugInElement::HTMLPlugInElement):
* Source/WebCore/html/HTMLPlugInElement.h:
(WebCore::HTMLPlugInElement::HTMLPlugInElement):
* Source/WebCore/html/HTMLPlugInImageElement.cpp:
(WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
* Source/WebCore/html/HTMLTemplateElement.cpp:
(WebCore::HTMLTemplateElement::HTMLTemplateElement):
* Source/WebCore/svg/SVGGraphicsElement.cpp:
(WebCore::SVGGraphicsElement::SVGGraphicsElement):
* Source/WebCore/svg/SVGGraphicsElement.h:
(WebCore::SVGGraphicsElement::SVGGraphicsElement):
* Source/WebCore/svg/SVGImageElement.cpp:
(WebCore::SVGImageElement::SVGImageElement):
* Source/WebCore/svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::SVGSVGElement):
Canonical link: https://commits.webkit.org/273544@main
More information about the webkit-changes
mailing list