Title: [230823] trunk/Source/WebCore
Revision
230823
Author
an...@apple.com
Date
2018-04-19 15:31:05 -0700 (Thu, 19 Apr 2018)

Log Message

Don't use RenderTreeBuilder::current() in RenderTreeUpdater
https://bugs.webkit.org/show_bug.cgi?id=184794

Reviewed by Zalan Bujtas.

Pass the builder as a parameter where needed.

* rendering/updating/RenderTreeUpdater.cpp:
(WebCore::RenderTreeUpdater::updateElementRenderer):
(WebCore::RenderTreeUpdater::updateTextRenderer):
(WebCore::RenderTreeUpdater::tearDownRenderers):
(WebCore::RenderTreeUpdater::tearDownRenderer):
(WebCore::RenderTreeUpdater::tearDownTextRenderer):
(WebCore::RenderTreeUpdater::tearDownLeftoverPaginationRenderersIfNeeded):
(WebCore::RenderTreeUpdater::tearDownLeftoverShadowHostChildren):
* rendering/updating/RenderTreeUpdater.h:
* rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
(WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
(WebCore::RenderTreeUpdater::GeneratedContent::removeBeforePseudoElement):
(WebCore::RenderTreeUpdater::GeneratedContent::removeAfterPseudoElement):
* rendering/updating/RenderTreeUpdaterGeneratedContent.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (230822 => 230823)


--- trunk/Source/WebCore/ChangeLog	2018-04-19 22:21:21 UTC (rev 230822)
+++ trunk/Source/WebCore/ChangeLog	2018-04-19 22:31:05 UTC (rev 230823)
@@ -1,3 +1,27 @@
+2018-04-19  Antti Koivisto  <an...@apple.com>
+
+        Don't use RenderTreeBuilder::current() in RenderTreeUpdater
+        https://bugs.webkit.org/show_bug.cgi?id=184794
+
+        Reviewed by Zalan Bujtas.
+
+        Pass the builder as a parameter where needed.
+
+        * rendering/updating/RenderTreeUpdater.cpp:
+        (WebCore::RenderTreeUpdater::updateElementRenderer):
+        (WebCore::RenderTreeUpdater::updateTextRenderer):
+        (WebCore::RenderTreeUpdater::tearDownRenderers):
+        (WebCore::RenderTreeUpdater::tearDownRenderer):
+        (WebCore::RenderTreeUpdater::tearDownTextRenderer):
+        (WebCore::RenderTreeUpdater::tearDownLeftoverPaginationRenderersIfNeeded):
+        (WebCore::RenderTreeUpdater::tearDownLeftoverShadowHostChildren):
+        * rendering/updating/RenderTreeUpdater.h:
+        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
+        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
+        (WebCore::RenderTreeUpdater::GeneratedContent::removeBeforePseudoElement):
+        (WebCore::RenderTreeUpdater::GeneratedContent::removeAfterPseudoElement):
+        * rendering/updating/RenderTreeUpdaterGeneratedContent.h:
+
 2018-04-19  Eric Carlson  <eric.carl...@apple.com>
 
         Runtime logging during GC can cause crash

Modified: trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp (230822 => 230823)


--- trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp	2018-04-19 22:21:21 UTC (rev 230822)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp	2018-04-19 22:31:05 UTC (rev 230823)
@@ -318,7 +318,7 @@
 
         // display:none cancels animations.
         auto teardownType = update.style->display() == NONE ? TeardownType::RendererUpdateCancelingAnimations : TeardownType::RendererUpdate;
-        tearDownRenderers(element, teardownType);
+        tearDownRenderers(element, teardownType, m_builder);
 
         renderingParent().didCreateOrDestroyChildRenderer = true;
     }
@@ -484,7 +484,7 @@
     if (existingRenderer && textUpdate && textUpdate->inheritedDisplayContentsStyle) {
         if (existingRenderer->inlineWrapperForDisplayContents() || *textUpdate->inheritedDisplayContentsStyle) {
             // FIXME: We could update without teardown.
-            tearDownTextRenderer(text);
+            tearDownTextRenderer(text, m_builder);
             existingRenderer = nullptr;
         }
     }
@@ -495,7 +495,7 @@
                 existingRenderer->setTextWithOffset(text.data(), textUpdate->offset, textUpdate->length);
             return;
         }
-        tearDownTextRenderer(text);
+        tearDownTextRenderer(text, m_builder);
         renderingParent().didCreateOrDestroyChildRenderer = true;
         return;
     }
@@ -520,7 +520,7 @@
     if (!view)
         return;
     RenderTreeBuilder builder(*view);
-    tearDownRenderers(root, TeardownType::Full);
+    tearDownRenderers(root, TeardownType::Full, builder);
 }
 
 void RenderTreeUpdater::tearDownRenderer(Text& text)
@@ -529,10 +529,10 @@
     if (!view)
         return;
     RenderTreeBuilder builder(*view);
-    tearDownTextRenderer(text);
+    tearDownTextRenderer(text, builder);
 }
 
-void RenderTreeUpdater::tearDownRenderers(Element& root, TeardownType teardownType)
+void RenderTreeUpdater::tearDownRenderers(Element& root, TeardownType teardownType, RenderTreeBuilder& builder)
 {
     WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates;
 
@@ -563,17 +563,17 @@
             if (teardownType == TeardownType::Full)
                 element.clearHoverAndActiveStatusBeforeDetachingRenderer();
 
-            GeneratedContent::removeBeforePseudoElement(element);
-            GeneratedContent::removeAfterPseudoElement(element);
+            GeneratedContent::removeBeforePseudoElement(element, builder);
+            GeneratedContent::removeAfterPseudoElement(element, builder);
 
             if (auto* renderer = element.renderer()) {
-                RenderTreeBuilder::current()->destroyAndCleanUpAnonymousWrappers(*renderer);
+                builder.destroyAndCleanUpAnonymousWrappers(*renderer);
                 element.setRenderer(nullptr);
             }
 
             // Make sure we don't leave any renderers behind in nodes outside the composed tree.
             if (element.shadowRoot())
-                tearDownLeftoverShadowHostChildren(element);
+                tearDownLeftoverShadowHostChildren(element, builder);
 
             if (element.hasCustomStyleResolveCallbacks())
                 element.didDetachRenderers();
@@ -587,7 +587,7 @@
         pop(it.depth());
 
         if (is<Text>(*it)) {
-            tearDownTextRenderer(downcast<Text>(*it));
+            tearDownTextRenderer(downcast<Text>(*it), builder);
             continue;
         }
 
@@ -596,19 +596,19 @@
 
     pop(0);
 
-    tearDownLeftoverPaginationRenderersIfNeeded(root);
+    tearDownLeftoverPaginationRenderersIfNeeded(root, builder);
 }
 
-void RenderTreeUpdater::tearDownTextRenderer(Text& text)
+void RenderTreeUpdater::tearDownTextRenderer(Text& text, RenderTreeBuilder& builder)
 {
     auto* renderer = text.renderer();
     if (!renderer)
         return;
-    RenderTreeBuilder::current()->destroyAndCleanUpAnonymousWrappers(*renderer);
+    builder.destroyAndCleanUpAnonymousWrappers(*renderer);
     text.setRenderer(nullptr);
 }
 
-void RenderTreeUpdater::tearDownLeftoverPaginationRenderersIfNeeded(Element& root)
+void RenderTreeUpdater::tearDownLeftoverPaginationRenderersIfNeeded(Element& root, RenderTreeBuilder& builder)
 {
     if (&root != root.document().documentElement())
         return;
@@ -615,22 +615,22 @@
     for (auto* child = root.document().renderView()->firstChild(); child;) {
         auto* nextSibling = child->nextSibling();
         if (is<RenderMultiColumnFlow>(*child) || is<RenderMultiColumnSet>(*child))
-            RenderTreeBuilder::current()->destroyAndCleanUpAnonymousWrappers(*child);
+            builder.destroyAndCleanUpAnonymousWrappers(*child);
         child = nextSibling;
     }
 }
 
-void RenderTreeUpdater::tearDownLeftoverShadowHostChildren(Element& host)
+void RenderTreeUpdater::tearDownLeftoverShadowHostChildren(Element& host, RenderTreeBuilder& builder)
 {
     for (auto* hostChild = host.firstChild(); hostChild; hostChild = hostChild->nextSibling()) {
         if (!hostChild->renderer())
             continue;
         if (is<Text>(*hostChild)) {
-            tearDownTextRenderer(downcast<Text>(*hostChild));
+            tearDownTextRenderer(downcast<Text>(*hostChild), builder);
             continue;
         }
         if (is<Element>(*hostChild))
-            tearDownRenderers(downcast<Element>(*hostChild), TeardownType::Full);
+            tearDownRenderers(downcast<Element>(*hostChild), TeardownType::Full, builder);
     }
 }
 

Modified: trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.h (230822 => 230823)


--- trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.h	2018-04-19 22:21:21 UTC (rev 230822)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.h	2018-04-19 22:31:05 UTC (rev 230823)
@@ -87,10 +87,10 @@
     void popParentsToDepth(unsigned depth);
 
     enum class TeardownType { Full, RendererUpdate, RendererUpdateCancelingAnimations };
-    static void tearDownRenderers(Element&, TeardownType);
-    static void tearDownTextRenderer(Text&);
-    static void tearDownLeftoverShadowHostChildren(Element&);
-    static void tearDownLeftoverPaginationRenderersIfNeeded(Element&);
+    static void tearDownRenderers(Element&, TeardownType, RenderTreeBuilder&);
+    static void tearDownTextRenderer(Text&, RenderTreeBuilder&);
+    static void tearDownLeftoverShadowHostChildren(Element&, RenderTreeBuilder&);
+    static void tearDownLeftoverPaginationRenderersIfNeeded(Element&, RenderTreeBuilder&);
 
     RenderView& renderView();
 

Modified: trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.cpp (230822 => 230823)


--- trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.cpp	2018-04-19 22:21:21 UTC (rev 230822)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.cpp	2018-04-19 22:31:05 UTC (rev 230823)
@@ -99,9 +99,9 @@
     if (!needsPseudoElement(update)) {
         if (pseudoElement) {
             if (pseudoId == BEFORE)
-                removeBeforePseudoElement(current);
+                removeBeforePseudoElement(current, m_updater.m_builder);
             else
-                removeAfterPseudoElement(current);
+                removeAfterPseudoElement(current, m_updater.m_builder);
         }
         return;
     }
@@ -165,21 +165,21 @@
     return true;
 }
 
-void RenderTreeUpdater::GeneratedContent::removeBeforePseudoElement(Element& element)
+void RenderTreeUpdater::GeneratedContent::removeBeforePseudoElement(Element& element, RenderTreeBuilder& builder)
 {
     auto* pseudoElement = element.beforePseudoElement();
     if (!pseudoElement)
         return;
-    tearDownRenderers(*pseudoElement, TeardownType::Full);
+    tearDownRenderers(*pseudoElement, TeardownType::Full, builder);
     element.clearBeforePseudoElement();
 }
 
-void RenderTreeUpdater::GeneratedContent::removeAfterPseudoElement(Element& element)
+void RenderTreeUpdater::GeneratedContent::removeAfterPseudoElement(Element& element, RenderTreeBuilder& builder)
 {
     auto* pseudoElement = element.afterPseudoElement();
     if (!pseudoElement)
         return;
-    tearDownRenderers(*pseudoElement, TeardownType::Full);
+    tearDownRenderers(*pseudoElement, TeardownType::Full, builder);
     element.clearAfterPseudoElement();
 }
 

Modified: trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.h (230822 => 230823)


--- trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.h	2018-04-19 22:21:21 UTC (rev 230822)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.h	2018-04-19 22:31:05 UTC (rev 230823)
@@ -41,8 +41,8 @@
     void updatePseudoElement(Element&, const std::optional<Style::ElementUpdate>&, PseudoId);
     void updateRemainingQuotes();
 
-    static void removeBeforePseudoElement(Element&);
-    static void removeAfterPseudoElement(Element&);
+    static void removeBeforePseudoElement(Element&, RenderTreeBuilder&);
+    static void removeAfterPseudoElement(Element&, RenderTreeBuilder&);
 
 private:
     void updateQuotesUpTo(RenderQuote*);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to