Title: [275126] trunk/Source/WebCore
Revision
275126
Author
[email protected]
Date
2021-03-26 18:37:26 -0700 (Fri, 26 Mar 2021)

Log Message

[RenderTreeBuilder] No need to update the counters when the renderer is moved internally
https://bugs.webkit.org/show_bug.cgi?id=223801
<rdar://75835208>

Reviewed by Ryosuke Niwa.

When the renderer re-parenting is initiated by an "internal move" (e.g. anonymous block parent is not needed anymore so all the descendants
are moved "one level" up), we don't need to re-compute the counters. Their state should not be any different after this re-parenting.

* rendering/updating/RenderTreeBuilder.cpp:
(WebCore::RenderTreeBuilder::attachToRenderElementInternal):
(WebCore::RenderTreeBuilder::move):
* rendering/updating/RenderTreeBuilder.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (275125 => 275126)


--- trunk/Source/WebCore/ChangeLog	2021-03-27 01:00:34 UTC (rev 275125)
+++ trunk/Source/WebCore/ChangeLog	2021-03-27 01:37:26 UTC (rev 275126)
@@ -1,3 +1,19 @@
+2021-03-26  Zalan Bujtas  <[email protected]>
+
+        [RenderTreeBuilder] No need to update the counters when the renderer is moved internally
+        https://bugs.webkit.org/show_bug.cgi?id=223801
+        <rdar://75835208>
+
+        Reviewed by Ryosuke Niwa.
+
+        When the renderer re-parenting is initiated by an "internal move" (e.g. anonymous block parent is not needed anymore so all the descendants
+        are moved "one level" up), we don't need to re-compute the counters. Their state should not be any different after this re-parenting.
+
+        * rendering/updating/RenderTreeBuilder.cpp:
+        (WebCore::RenderTreeBuilder::attachToRenderElementInternal):
+        (WebCore::RenderTreeBuilder::move):
+        * rendering/updating/RenderTreeBuilder.h:
+
 2021-03-26  Chris Fleizach  <[email protected]>
 
         AX: crash at aom.apple.WebCore: WebCore::AccessibilityProgressIndicator::element const

Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (275125 => 275126)


--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp	2021-03-27 01:00:34 UTC (rev 275125)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp	2021-03-27 01:37:26 UTC (rev 275126)
@@ -427,7 +427,7 @@
     parent.didAttachChild(newChild, beforeChild);
 }
 
-void RenderTreeBuilder::attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
+void RenderTreeBuilder::attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild, ReinsertAfterMove reinsertAfterMove)
 {
     RELEASE_ASSERT_WITH_MESSAGE(!parent.view().frameView().layoutContext().layoutState(), "Layout must not mutate render tree");
     ASSERT(parent.canHaveChildren() || parent.canHaveGeneratedChildren());
@@ -451,7 +451,9 @@
         if (is<RenderMultiColumnFlow>(fragmentedFlow))
             multiColumnBuilder().multiColumnDescendantInserted(downcast<RenderMultiColumnFlow>(*fragmentedFlow), *newChild);
 
-        if (is<RenderElement>(*newChild))
+        // FIXME: needsStateReset could probably be used for multicolumn as well.
+        auto needsStateReset = reinsertAfterMove == ReinsertAfterMove::No;
+        if (needsStateReset && is<RenderElement>(*newChild))
             RenderCounter::rendererSubtreeAttached(downcast<RenderElement>(*newChild));
     }
 
@@ -482,7 +484,7 @@
         attach(to, WTFMove(childToMove), beforeChild);
     } else {
         auto childToMove = detachFromRenderElement(from, child);
-        attachToRenderElementInternal(to, WTFMove(childToMove), beforeChild);
+        attachToRenderElementInternal(to, WTFMove(childToMove), beforeChild, ReinsertAfterMove::Yes);
     }
 }
 

Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h (275125 => 275126)


--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h	2021-03-27 01:00:34 UTC (rev 275125)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h	2021-03-27 01:37:26 UTC (rev 275126)
@@ -70,7 +70,8 @@
     void attachIgnoringContinuation(RenderElement& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
     void attachToRenderGrid(RenderGrid& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
     void attachToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
-    void attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
+    enum class ReinsertAfterMove { No, Yes };
+    void attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr, ReinsertAfterMove = ReinsertAfterMove::No);
 
     enum class WillBeDestroyed { No, Yes };
     RenderPtr<RenderObject> detachFromRenderElement(RenderElement& parent, RenderObject& child, WillBeDestroyed = WillBeDestroyed::Yes) WARN_UNUSED_RETURN;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to