Closed Bug 1846389 Opened 1 year ago Closed 1 year ago

[wpt-sync] Sync PR 41265 - Add append_to argument to Clone() to avoid extra InsertedInto calls

Categories

(Core :: DOM: Core & HTML, task, P4)

task

Tracking

()

RESOLVED FIXED
118 Branch
Tracking Status
firefox118 --- fixed

People

(Reporter: wpt-sync, Unassigned)

References

()

Details

(Whiteboard: [wptsync downstream])

Sync web-platform-tests PR 41265 into mozilla-central (this bug is closed when the sync is complete).

PR: https://github.com/web-platform-tests/wpt/pull/41265
Details from upstream follow.

Mason Freed <masonf@chromium.org> wrote:

Add append_to argument to Clone() to avoid extra InsertedInto calls

Because of the order of operations for Clone(), previous to this CL,
the typical sequence would be:

  1. Clone the element
  2. Clone the children of the element (recursing to step #1).
  3. AppendChild() each cloned child to its parent cloned element.
  4. (in the caller of Clone) AppendChild the cloned element to its
    eventual parent.

Because each AppendChild triggers a call to Node::InsertedInto() for
all descendants of the appended element [1], the fact that the tree
is constructed bottom-up (leaf nodes first) means that InsertedInto()
is called N^2 times, where N is the depth of the cloned tree.

Because clone-and-append is a very common pattern, this CL adds an
append_to argument to Clone(), which appends to the parent before
appending the children.

This CL also adds a perf test for this scenario (cloning a deep tree).
Locally, on a debug build, this test gives 0.13 runs/s before this CL,
and 0.40 runs/s after, for a 3.1X speedup.

[1] https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/dom/container_node.cc;l=1006;drc=5d60017dba57e86d477634812e1340127734f8a7

Bug: 1453291
Change-Id: Icdd75c45aa5ecc4fe8bb5d1ff0b7a2b27bec2171
Cq-Do-Not-Cancel-Tryjobs: true
Reviewed-on: https://chromium-review.googlesource.com/4728983
WPT-Export-Revision: f09d0b0e757070fa10e9789d2d6438ba6c4c7d2e

Component: web-platform-tests → DOM: Core & HTML
Product: Testing → Core
Test result changes from PR not available.
Pushed by ctuns@mozilla.com:
https://hg.mozilla.org/mozilla-central/rev/1294fa7756a0
[wpt PR 41265] - Add append_to argument to Clone() to avoid extra InsertedInto calls, a=testonly
Status: NEW → RESOLVED
Closed: 1 year ago
Resolution: --- → FIXED
Target Milestone: --- → 118 Branch
You need to log in before you can comment on or make changes to this bug.