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