[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