Don't allocate rare data on every Element on removal
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Jan 2013 04:06:22 +0000 (04:06 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Jan 2013 04:06:22 +0000 (04:06 +0000)
https://bugs.webkit.org/show_bug.cgi?id=107756

Patch by Elliott Sprehn <esprehn@gmail.com> on 2013-01-23
Reviewed by Eric Seidel.

We should not allocate an ElementRareData for every element
in Element::removedFrom. Previously calls to setIsInTopLayer
would unconditionally call ensureElementRareData(), and this was
called from Element::removedFrom meaning removing an element
made the entire subtree suddenly balloon to huge in size as each
one got an ElementRareData.

This is a regression from my patch on Bug 103912 where I removed a check
that avoided this allocation.

No new tests needed, covered by existing tests.

* dom/Element.cpp:
(WebCore::Element::setIsInTopLayer):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@140638 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/dom/Element.cpp

index 027519d..ab218b2 100644 (file)
@@ -1,3 +1,25 @@
+2013-01-23  Elliott Sprehn  <esprehn@gmail.com>
+
+        Don't allocate rare data on every Element on removal
+        https://bugs.webkit.org/show_bug.cgi?id=107756
+
+        Reviewed by Eric Seidel.
+
+        We should not allocate an ElementRareData for every element
+        in Element::removedFrom. Previously calls to setIsInTopLayer
+        would unconditionally call ensureElementRareData(), and this was
+        called from Element::removedFrom meaning removing an element
+        made the entire subtree suddenly balloon to huge in size as each
+        one got an ElementRareData.
+
+        This is a regression from my patch on Bug 103912 where I removed a check
+        that avoided this allocation.
+
+        No new tests needed, covered by existing tests.
+
+        * dom/Element.cpp:
+        (WebCore::Element::setIsInTopLayer):
+
 2013-01-23  Adam Barth  <abarth@webkit.org>
 
         BackgroundHTMLParser should use more const references to avoid copy constructors
index 5d8f945..0b85ffe 100644 (file)
@@ -2401,6 +2401,8 @@ bool Element::isInTopLayer() const
 
 void Element::setIsInTopLayer(bool inTopLayer)
 {
+    if (isInTopLayer() == inTopLayer)
+        return;
     ensureElementRareData()->setIsInTopLayer(inTopLayer);
     setNeedsStyleRecalc(SyntheticStyleChange);
 }