WebKit Bugzilla
Attachment 349806 Details for
Bug 189630
: Introduce dirty bits to RenderLayers.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-189630-20180914142842.patch (text/plain), 41.96 KB, created by
zalan
on 2018-09-14 14:28:43 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
zalan
Created:
2018-09-14 14:28:43 PDT
Size:
41.96 KB
patch
obsolete
>Subversion Revision: 235558 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 28ba10590b42eaa58838491f51ac3fa9654778c2..2fd68f1f171b9423c07fd3d6c17cb7f0d9256d4c 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,109 @@ >+2018-09-14 Zalan Bujtas <zalan@apple.com> >+ >+ Introduce dirty bits to RenderLayers. >+ https://bugs.webkit.org/show_bug.cgi?id=189630 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Collecting EWS failures. >+ >+ * html/shadow/SliderThumbElement.cpp: >+ (WebCore::RenderSliderContainer::layout): >+ * rendering/RenderAttachment.cpp: >+ (WebCore::RenderAttachment::layout): >+ * rendering/RenderBlock.cpp: >+ (WebCore::RenderBlock::layoutPositionedObject): >+ * rendering/RenderBlockFlow.cpp: >+ (WebCore::RenderBlockFlow::layoutBlock): >+ (WebCore::RenderBlockFlow::layoutBlockChild): >+ (WebCore::RenderBlockFlow::layoutExcludedChildren): >+ * rendering/RenderBlockLineLayout.cpp: >+ (WebCore::RenderBlockFlow::computeBlockDirectionPositionsForLine): >+ (WebCore::RenderBlockFlow::layoutLineBoxes): >+ * rendering/RenderDeprecatedFlexibleBox.cpp: >+ (WebCore::RenderDeprecatedFlexibleBox::layoutBlock): >+ * rendering/RenderEmbeddedObject.cpp: >+ (WebCore::RenderEmbeddedObject::layout): >+ * rendering/RenderFlexibleBox.cpp: >+ (WebCore::RenderFlexibleBox::layoutBlock): >+ (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): >+ * rendering/RenderFrameSet.cpp: >+ (WebCore::RenderFrameSet::layout): >+ * rendering/RenderGrid.cpp: >+ (WebCore::RenderGrid::layoutBlock): >+ (WebCore::RenderGrid::layoutPositionedObject): >+ * rendering/RenderIFrame.cpp: >+ (WebCore::RenderIFrame::layout): >+ * rendering/RenderImage.cpp: >+ (WebCore::RenderImage::layout): >+ * rendering/RenderLayer.cpp: >+ (WebCore::RenderLayer::RenderLayer): >+ (WebCore::RenderLayer::markAncestorLayersNeedUpdateAfterLayout const): >+ (WebCore::RenderLayer::setNeedsUpdateAfterLayout): >+ (WebCore::RenderLayer::setChildrenNeedUpdateAfterLayout): >+ (WebCore::RenderLayer::updateLayerPositions): >+ (WebCore::RenderLayer::updateLayerPositionsAfterScroll): >+ (WebCore::RenderLayer::addChild): >+ (WebCore::RenderLayer::scrollTo): >+ (WebCore::RenderLayer::calculateClipRects const): >+ * rendering/RenderLayer.h: >+ * rendering/RenderLayerModelObject.cpp: >+ (WebCore::LayerPositionChange::LayerPositionChange): >+ (WebCore::LayerPositionChange::~LayerPositionChange): >+ * rendering/RenderLayerModelObject.h: >+ * rendering/RenderListBox.cpp: >+ (WebCore::RenderListBox::layout): >+ * rendering/RenderListMarker.cpp: >+ (WebCore::RenderListMarker::layout): >+ * rendering/RenderMediaControlElements.cpp: >+ (WebCore::RenderMediaVolumeSliderContainer::layout): >+ * rendering/RenderMultiColumnFlow.cpp: >+ (WebCore::RenderMultiColumnFlow::layout): >+ * rendering/RenderReplaced.cpp: >+ (WebCore::RenderReplaced::layout): >+ * rendering/RenderReplica.cpp: >+ (WebCore::RenderReplica::layout): >+ * rendering/RenderRubyRun.cpp: >+ (WebCore::RenderRubyRun::layoutBlock): >+ * rendering/RenderScrollbarPart.cpp: >+ (WebCore::RenderScrollbarPart::layout): >+ * rendering/RenderTable.cpp: >+ (WebCore::RenderTable::layout): >+ * rendering/RenderTableCell.cpp: >+ (WebCore::RenderTableCell::layout): >+ * rendering/RenderTableRow.cpp: >+ (WebCore::RenderTableRow::layout): >+ * rendering/RenderTableSection.cpp: >+ (WebCore::RenderTableSection::layout): >+ * rendering/RenderTextControlSingleLine.cpp: >+ (WebCore::RenderTextControlSingleLine::layout): >+ * rendering/RenderVTTCue.cpp: >+ (WebCore::RenderVTTCue::layout): >+ * rendering/RenderVideo.cpp: >+ (WebCore::RenderVideo::layout): >+ * rendering/mathml/RenderMathMLBlock.cpp: >+ (WebCore::RenderMathMLBlock::layoutBlock): >+ * rendering/mathml/RenderMathMLFraction.cpp: >+ (WebCore::RenderMathMLFraction::layoutBlock): >+ * rendering/mathml/RenderMathMLMenclose.cpp: >+ (WebCore::RenderMathMLMenclose::layoutBlock): >+ * rendering/mathml/RenderMathMLOperator.cpp: >+ (WebCore::RenderMathMLOperator::layoutBlock): >+ * rendering/mathml/RenderMathMLPadded.cpp: >+ (WebCore::RenderMathMLPadded::layoutBlock): >+ * rendering/mathml/RenderMathMLRoot.cpp: >+ (WebCore::RenderMathMLRoot::layoutBlock): >+ * rendering/mathml/RenderMathMLRow.cpp: >+ (WebCore::RenderMathMLRow::layoutBlock): >+ * rendering/mathml/RenderMathMLScripts.cpp: >+ (WebCore::RenderMathMLScripts::layoutBlock): >+ * rendering/mathml/RenderMathMLSpace.cpp: >+ (WebCore::RenderMathMLSpace::layoutBlock): >+ * rendering/mathml/RenderMathMLToken.cpp: >+ (WebCore::RenderMathMLToken::layoutBlock): >+ * rendering/mathml/RenderMathMLUnderOver.cpp: >+ (WebCore::RenderMathMLUnderOver::layoutBlock): >+ > 2018-08-31 Aditya Keerthi <akeerthi@apple.com> > > [Datalist][iOS] Add suggestions UI for TextFieldInputTypes >diff --git a/Source/WebCore/html/shadow/SliderThumbElement.cpp b/Source/WebCore/html/shadow/SliderThumbElement.cpp >index fed41e3ddd3c93f283d580875d62a7d50d291eb2..55766f222f64ef2638ce431332e41b2704af2813 100644 >--- a/Source/WebCore/html/shadow/SliderThumbElement.cpp >+++ b/Source/WebCore/html/shadow/SliderThumbElement.cpp >@@ -163,6 +163,7 @@ RenderBox::LogicalExtentComputedValues RenderSliderContainer::computeLogicalHeig > void RenderSliderContainer::layout() > { > ASSERT(element()->shadowHost()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > auto& input = downcast<HTMLInputElement>(*element()->shadowHost()); > bool isVertical = hasVerticalAppearance(input); > mutableStyle().setFlexDirection(isVertical ? FlexDirection::Column : FlexDirection::Row); >diff --git a/Source/WebCore/rendering/RenderAttachment.cpp b/Source/WebCore/rendering/RenderAttachment.cpp >index ed3335e1374d8f7229252d54ce067cc3847681bd..8053c53e133595e891d4155302a4f259b7b274c5 100644 >--- a/Source/WebCore/rendering/RenderAttachment.cpp >+++ b/Source/WebCore/rendering/RenderAttachment.cpp >@@ -54,6 +54,7 @@ HTMLAttachmentElement& RenderAttachment::attachmentElement() const > > void RenderAttachment::layout() > { >+ LayerPositionChange renderLayerNeedsUpdate(*this); > LayoutSize newIntrinsicSize = theme().attachmentIntrinsicSize(*this); > m_minimumIntrinsicWidth = std::max(m_minimumIntrinsicWidth, newIntrinsicSize.width()); > newIntrinsicSize.setWidth(m_minimumIntrinsicWidth); >diff --git a/Source/WebCore/rendering/RenderBlock.cpp b/Source/WebCore/rendering/RenderBlock.cpp >index 12927c47c1991ac61914417e2af796f5ec81ebca..02134965b93e755481ecd25a2b414c5cfb76fe6e 100644 >--- a/Source/WebCore/rendering/RenderBlock.cpp >+++ b/Source/WebCore/rendering/RenderBlock.cpp >@@ -980,6 +980,8 @@ LayoutUnit RenderBlock::marginIntrinsicLogicalWidthForChild(RenderBox& child) co > > void RenderBlock::layoutPositionedObject(RenderBox& r, bool relayoutChildren, bool fixedPositionObjectsOnly) > { >+ LayerPositionChange renderLayerNeedsUpdate(r); >+ > estimateFragmentRangeForBoxChild(r); > > // A fixed position element with an absolute positioned ancestor has no way of knowing if the latter has changed position. So >diff --git a/Source/WebCore/rendering/RenderBlockFlow.cpp b/Source/WebCore/rendering/RenderBlockFlow.cpp >index 39a9003bd6fc3e31c46dc0d733c584afc7a9d551..913ee8bbc443e1aeb675a6e60c6e1147d0a60283 100644 >--- a/Source/WebCore/rendering/RenderBlockFlow.cpp >+++ b/Source/WebCore/rendering/RenderBlockFlow.cpp >@@ -450,6 +450,7 @@ bool RenderBlockFlow::willCreateColumns(std::optional<unsigned> desiredColumnCou > void RenderBlockFlow::layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >@@ -673,6 +674,8 @@ void RenderBlockFlow::layoutInlineChildren(bool relayoutChildren, LayoutUnit& re > > void RenderBlockFlow::layoutBlockChild(RenderBox& child, MarginInfo& marginInfo, LayoutUnit& previousFloatLogicalBottom, LayoutUnit& maxFloatLogicalBottom) > { >+ LayerPositionChange renderLayerNeedsUpdate(child); >+ > LayoutUnit oldPosMarginBefore = maxPositiveMarginBefore(); > LayoutUnit oldNegMarginBefore = maxNegativeMarginBefore(); > >@@ -3791,6 +3794,7 @@ void RenderBlockFlow::layoutExcludedChildren(bool relayoutChildren) > if (!fragmentedFlow) > return; > >+ LayerPositionChange renderLayerNeedsUpdate(*fragmentedFlow); > fragmentedFlow->setIsExcludedFromNormalLayout(true); > > setLogicalTopForChild(*fragmentedFlow, borderAndPaddingBefore()); >diff --git a/Source/WebCore/rendering/RenderBlockLineLayout.cpp b/Source/WebCore/rendering/RenderBlockLineLayout.cpp >index b188a46e269b5c7087a1625d1731fbd5fb9b1134..c2e57b092dfecd0e0286281fd296c7ec9a9068c4 100644 >--- a/Source/WebCore/rendering/RenderBlockLineLayout.cpp >+++ b/Source/WebCore/rendering/RenderBlockLineLayout.cpp >@@ -992,6 +992,8 @@ void RenderBlockFlow::computeBlockDirectionPositionsForLine(RootInlineBox* lineB > // Align positioned boxes with the top of the line box. This is > // a reasonable approximation of an appropriate y position. > auto& renderer = run->renderer(); >+ LayerPositionChange renderLayerNeedsUpdate(renderer); >+ > if (renderer.isOutOfFlowPositioned()) > run->box()->setLogicalTop(logicalHeight()); > >@@ -1676,6 +1678,8 @@ void RenderBlockFlow::layoutLineBoxes(bool relayoutChildren, LayoutUnit& repaint > for (InlineWalker walker(*this); !walker.atEnd(); walker.advance()) { > RenderObject& o = *walker.current(); > >+ LayerPositionChange renderLayerNeedsUpdate(o); >+ > if (!hasInlineChild && o.isInline()) > hasInlineChild = true; > >@@ -1716,8 +1720,10 @@ void RenderBlockFlow::layoutLineBoxes(bool relayoutChildren, LayoutUnit& repaint > } > } > >- for (size_t i = 0; i < replacedChildren.size(); i++) >- replacedChildren[i]->layoutIfNeeded(); >+ for (size_t i = 0; i < replacedChildren.size(); i++) { >+ LayerPositionChange renderLayerNeedsUpdate(*replacedChildren[i]); >+ replacedChildren[i]->layoutIfNeeded(); >+ } > > layoutRunsAndFloats(layoutState, hasInlineChild); > } >diff --git a/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp b/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp >index 0600a85cb518ea623437d1d245a3244441093b2d..ac1e76401a4780d44e81e5a382bca50bbbb4da9b 100644 >--- a/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp >+++ b/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp >@@ -276,6 +276,7 @@ static void repaintChildrenDuringLayoutIfMoved(RenderDeprecatedFlexibleBox* box, > void RenderDeprecatedFlexibleBox::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/RenderEmbeddedObject.cpp b/Source/WebCore/rendering/RenderEmbeddedObject.cpp >index 36ecf5f254ac9f6d1a5fc33d5cb1011a9cd8d9f6..6d4fac10a191a60c75a327cf7ee16940545907ff 100644 >--- a/Source/WebCore/rendering/RenderEmbeddedObject.cpp >+++ b/Source/WebCore/rendering/RenderEmbeddedObject.cpp >@@ -407,6 +407,7 @@ void RenderEmbeddedObject::layout() > { > StackStats::LayoutCheckPoint layoutCheckPoint; > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > LayoutSize oldSize = contentBoxRect().size(); > >diff --git a/Source/WebCore/rendering/RenderFlexibleBox.cpp b/Source/WebCore/rendering/RenderFlexibleBox.cpp >index 6692eac7b1130fc8e69a55e5ec9eff7a31bbd008..7fa6272b55bc48b597dd24af28af0c590b996544 100644 >--- a/Source/WebCore/rendering/RenderFlexibleBox.cpp >+++ b/Source/WebCore/rendering/RenderFlexibleBox.cpp >@@ -259,6 +259,7 @@ void RenderFlexibleBox::styleDidChange(StyleDifference diff, const RenderStyle* > void RenderFlexibleBox::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >@@ -1552,6 +1553,7 @@ void RenderFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, Vect > for (size_t i = 0; i < children.size(); ++i) { > const auto& flexItem = children[i]; > auto& child = flexItem.box; >+ LayerPositionChange renderLayerNeedsUpdate(child); > bool childHadLayout = child.everHadLayout(); > > ASSERT(!flexItem.box.isOutOfFlowPositioned()); >diff --git a/Source/WebCore/rendering/RenderFrameSet.cpp b/Source/WebCore/rendering/RenderFrameSet.cpp >index 2cfbf1f7b3d435e5f77bffdfb0608d78de770922..7b0b475ea2c382962d3f21577f2710022ccc56f9 100644 >--- a/Source/WebCore/rendering/RenderFrameSet.cpp >+++ b/Source/WebCore/rendering/RenderFrameSet.cpp >@@ -447,6 +447,7 @@ void RenderFrameSet::layout() > { > StackStats::LayoutCheckPoint layoutCheckPoint; > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > bool doFullRepaint = selfNeedsLayout() && checkForRepaintDuringLayout(); > LayoutRect oldBounds; >diff --git a/Source/WebCore/rendering/RenderGrid.cpp b/Source/WebCore/rendering/RenderGrid.cpp >index b903ef00ace2f694bd0dc3b6964d76e0ed6ab79c..e866a66994e84a0ab7e9ded5372f5e9e7f8050f3 100644 >--- a/Source/WebCore/rendering/RenderGrid.cpp >+++ b/Source/WebCore/rendering/RenderGrid.cpp >@@ -187,6 +187,7 @@ bool RenderGrid::canPerformSimplifiedLayout() const > void RenderGrid::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >@@ -914,6 +915,8 @@ bool RenderGrid::hasStaticPositionForChild(const RenderBox& child, GridTrackSizi > > void RenderGrid::layoutPositionedObject(RenderBox& child, bool relayoutChildren, bool fixedPositionObjectsOnly) > { >+ LayerPositionChange renderLayerNeedsUpdate(child); >+ > LayoutUnit columnBreadth = gridAreaBreadthForOutOfFlowChild(child, ForColumns); > LayoutUnit rowBreadth = gridAreaBreadthForOutOfFlowChild(child, ForRows); > >diff --git a/Source/WebCore/rendering/RenderIFrame.cpp b/Source/WebCore/rendering/RenderIFrame.cpp >index 64ff9fe58e956c18152b5730c94225e645c277f8..4669a7ad5d391ea04e4cec69cf627b1008990bad 100644 >--- a/Source/WebCore/rendering/RenderIFrame.cpp >+++ b/Source/WebCore/rendering/RenderIFrame.cpp >@@ -104,6 +104,7 @@ void RenderIFrame::layout() > { > StackStats::LayoutCheckPoint layoutCheckPoint; > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > updateLogicalWidth(); > // No kids to layout as a replaced element. >diff --git a/Source/WebCore/rendering/RenderImage.cpp b/Source/WebCore/rendering/RenderImage.cpp >index 6c6aafb7e4586f17d7f2708e252a13ffe22abe81..95365a0773417eaf1f5f873aeb93d59567e5cabe 100644 >--- a/Source/WebCore/rendering/RenderImage.cpp >+++ b/Source/WebCore/rendering/RenderImage.cpp >@@ -736,6 +736,7 @@ bool RenderImage::canHaveChildren() const > > void RenderImage::layout() > { >+ LayerPositionChange renderLayerNeedsUpdate(*this); > // Recomputing overflow is required only when child content is present. > if (needsSimplifiedNormalFlowLayoutOnly() && !m_hasShadowControls) { > clearNeedsLayout(); >diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp >index 0678dee81bf8fc1ca65c2dc75d5a29a423521cd3..1eceba4970493384097553823edd9bbb80b1ef85 100644 >--- a/Source/WebCore/rendering/RenderLayer.cpp >+++ b/Source/WebCore/rendering/RenderLayer.cpp >@@ -318,6 +318,9 @@ RenderLayer::RenderLayer(RenderLayerModelObject& rendererLayerModelObject) > , m_hasNotIsolatedBlendingDescendants(false) > , m_hasNotIsolatedBlendingDescendantsStatusDirty(false) > #endif >+ , m_needsUpdateAfterLayout(false) >+ , m_descendantNeedsUpdateAfterLayout(false) >+ , m_childrenNeedUpdateAfterLayout(false) > , m_renderer(rendererLayerModelObject) > { > m_isNormalFlowOnly = shouldBeNormalFlowOnly(); >@@ -471,6 +474,39 @@ FilterEffectRenderer* RenderLayer::filterRenderer() const > return filterInfo ? filterInfo->renderer() : nullptr; > } > >+void RenderLayer::markAncestorLayersNeedUpdateAfterLayout() const >+{ >+ for (auto* ancestor = parent(); ancestor && !ancestor->descendantNeedsUpdateAfterLayout(); ancestor = ancestor->parent()) >+ ancestor->m_descendantNeedsUpdateAfterLayout = true; >+} >+ >+void RenderLayer::setNeedsUpdateAfterLayout() >+{ >+ m_needsUpdateAfterLayout = true; >+ markAncestorLayersNeedUpdateAfterLayout(); >+ >+ // Continuation >+ ASSERT(is<RenderBoxModelObject>(renderer())); >+ if (!downcast<RenderBoxModelObject>(renderer()).continuation()) >+ return; >+ >+ for (auto* ancestor = renderer().parent(); ancestor; ancestor = ancestor->parent()) { >+ if (!is<RenderBlock>(*ancestor)) >+ continue; >+ >+ if (auto* enclosingLayer = ancestor->enclosingLayer()) >+ enclosingLayer->setChildrenNeedUpdateAfterLayout(); >+ break; >+ } >+} >+ >+void RenderLayer::setChildrenNeedUpdateAfterLayout() >+{ >+ m_childrenNeedUpdateAfterLayout = true; >+ m_descendantNeedsUpdateAfterLayout = true; >+ markAncestorLayersNeedUpdateAfterLayout(); >+} >+ > void RenderLayer::updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, OptionSet<UpdateLayerPositionsFlag> flags) > { > LOG(Compositing, "RenderLayer %p updateLayerPositionsAfterLayout", this); >@@ -482,10 +518,8 @@ void RenderLayer::updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, > > void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, OptionSet<UpdateLayerPositionsFlag> flags) > { >- updateLayerPosition(); // For relpositioned layers or non-positioned layers, >- // we need to keep in sync, since we may have shifted relative >- // to our parent layer. >- >+ // For relpositioned layers or non-positioned layers, we need to keep in sync, since we may have shifted relative to our parent layer. >+ updateLayerPosition(); > applyPostLayoutScrollPositionIfNeeded(); > > if (geometryMap) >@@ -570,8 +604,17 @@ void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, OptionSet > flags |= Seen3DTransformedLayer; > } > >- for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) >- child->updateLayerPositions(geometryMap, flags); >+ auto forceLayerUpdate = renderer().view().frameView().pagination().mode != Pagination::Unpaginated || renderer().style().isFlippedBlocksWritingMode(); >+ if (descendantNeedsUpdateAfterLayout() || forceLayerUpdate) { >+ auto updateAllChildLayers = childrenNeedUpdateAfterLayout() || forceLayerUpdate; >+ >+ for (auto* child = firstChild(); child; child = child->nextSibling()) { >+ if (updateAllChildLayers || child->needsUpdateAfterLayout() || child->descendantNeedsUpdateAfterLayout()) >+ child->updateLayerPositions(geometryMap, flags); >+ } >+ clearDescendantNeedsUpdateAfterLayout(); >+ clearChildrenNeedUpdateAfterLayout(); >+ } > > if ((flags & UpdateCompositingLayers) && isComposited()) { > OptionSet<RenderLayerBacking::UpdateAfterLayoutFlags> updateFlags; >@@ -595,6 +638,7 @@ void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, OptionSet > geometryMap->popMappingsToAncestor(parent()); > > renderer().document().markers().invalidateRectsForAllMarkers(); >+ clearNeedsUpdateAfterLayout(); > } > > LayoutRect RenderLayer::repaintRectIncludingNonCompositingDescendants() const >@@ -839,6 +883,8 @@ void RenderLayer::updateLayerPositionsAfterOverflowScroll() > > void RenderLayer::updateLayerPositionsAfterScroll(RenderGeometryMap* geometryMap, OptionSet<UpdateLayerPositionsAfterScrollFlag> flags) > { >+ setNeedsUpdateAfterLayout(); >+ > // FIXME: This shouldn't be needed, but there are some corner cases where > // these flags are still dirty. Update so that the check below is valid. > updateDescendantDependentFlags(); >@@ -1892,6 +1938,7 @@ void RenderLayer::addChild(RenderLayer* child, RenderLayer* beforeChild) > #endif > > compositor().layerWasAdded(*this, *child); >+ child->setNeedsUpdateAfterLayout(); > } > > RenderLayer* RenderLayer::removeChild(RenderLayer* oldChild) >@@ -2378,6 +2425,8 @@ void RenderLayer::scrollTo(const ScrollPosition& position) > if (!box) > return; > >+ setNeedsUpdateAfterLayout(); >+ > LOG_WITH_STREAM(Scrolling, stream << "RenderLayer::scrollTo " << position); > > ScrollPosition newPosition = position; >@@ -6701,6 +6750,9 @@ void RenderLayer::styleChanged(StyleDifference diff, const RenderStyle* oldStyle > #else > UNUSED_PARAM(diff); > #endif >+ // When it's more than just a geometry/tree mutation change. >+ if (diff > StyleDifference::Equal) >+ setNeedsUpdateAfterLayout(); > } > > void RenderLayer::updateScrollableAreaSet(bool hasOverflow) >diff --git a/Source/WebCore/rendering/RenderLayer.h b/Source/WebCore/rendering/RenderLayer.h >index d6fe3df1bcb03f33f2fbfcf56ca2f4f53a1b3f34..83c2612de385190fa6770274857ffad379095ca9 100644 >--- a/Source/WebCore/rendering/RenderLayer.h >+++ b/Source/WebCore/rendering/RenderLayer.h >@@ -714,7 +714,20 @@ public: > void simulateFrequentPaint() { SinglePaintFrequencyTracking { m_paintFrequencyTracker }; } > bool paintingFrequently() const { return m_paintFrequencyTracker.paintingFrequently(); } > >+ void setNeedsUpdateAfterLayout(); >+ void setChildrenNeedUpdateAfterLayout(); >+ > private: >+ bool needsUpdateAfterLayout() const { return m_needsUpdateAfterLayout; } >+ bool descendantNeedsUpdateAfterLayout() const { return m_descendantNeedsUpdateAfterLayout; } >+ bool childrenNeedUpdateAfterLayout() const { return m_childrenNeedUpdateAfterLayout; } >+ >+ void clearNeedsUpdateAfterLayout() { m_needsUpdateAfterLayout = false; } >+ void clearDescendantNeedsUpdateAfterLayout() { m_descendantNeedsUpdateAfterLayout = false; } >+ void clearChildrenNeedUpdateAfterLayout() { m_childrenNeedUpdateAfterLayout = false; } >+ >+ void markAncestorLayersNeedUpdateAfterLayout() const; >+ > enum CollectLayersBehavior { StopAtStackingContexts, StopAtStackingContainers }; > > struct LayerPaintingInfo { >@@ -1101,6 +1114,10 @@ private: > bool m_hasNotIsolatedBlendingDescendantsStatusDirty : 1; > #endif > >+ bool m_needsUpdateAfterLayout : 1; >+ bool m_descendantNeedsUpdateAfterLayout : 1; >+ bool m_childrenNeedUpdateAfterLayout :1; >+ > RenderLayerModelObject& m_renderer; > > RenderLayer* m_parent { nullptr }; >diff --git a/Source/WebCore/rendering/RenderLayerModelObject.cpp b/Source/WebCore/rendering/RenderLayerModelObject.cpp >index c5d0cef85c4a500e4a9685ea094fe28bd4dd9bfe..e551982fa6394f600276afe6a66f89bcd27abf7c 100644 >--- a/Source/WebCore/rendering/RenderLayerModelObject.cpp >+++ b/Source/WebCore/rendering/RenderLayerModelObject.cpp >@@ -44,6 +44,47 @@ bool RenderLayerModelObject::s_layerWasSelfPainting = false; > typedef WTF::HashMap<const RenderLayerModelObject*, RepaintLayoutRects> RepaintLayoutRectsMap; > static RepaintLayoutRectsMap* gRepaintLayoutRectsMap = nullptr; > >+LayerPositionChange::LayerPositionChange(const RenderObject& renderer) >+{ >+ // Ignore RenderText renderers. >+ if (is<RenderBoxModelObject>(renderer)) >+ m_renderer = &downcast<RenderBoxModelObject>(renderer); >+ >+ // RenderInlines don't have frame rects. >+ if (is<RenderBox>(renderer)) >+ m_rect = downcast<RenderBox>(renderer).frameRect(); >+} >+ >+LayerPositionChange::~LayerPositionChange() >+{ >+ if (!m_renderer) >+ return; >+ >+ auto layerNeedsUpdateAfterLayout = [&]() { >+ >+ if (auto* layer = m_renderer->layer()) { >+ layer->setNeedsUpdateAfterLayout(); >+ return; >+ } >+ >+ // This renderer does not have a layer but it might have descendants with layers. >+ if (auto* enclosingLayer = m_renderer->enclosingLayer()) { >+ enclosingLayer->setChildrenNeedUpdateAfterLayout(); >+ return; >+ } >+ }; >+ >+ // RenderInline >+ if (!m_rect) { >+ layerNeedsUpdateAfterLayout(); >+ return; >+ } >+ >+ // RenderBox >+ if (*m_rect != downcast<RenderBox>(*m_renderer).frameRect()) >+ layerNeedsUpdateAfterLayout(); >+} >+ > RepaintLayoutRects::RepaintLayoutRects(const RenderLayerModelObject& renderer, const RenderLayerModelObject* repaintContainer, const RenderGeometryMap* geometryMap) > : m_repaintRect(renderer.clippedOverflowRectForRepaint(repaintContainer)) > , m_outlineBox(renderer.outlineBoundsForRepaint(repaintContainer, geometryMap)) >diff --git a/Source/WebCore/rendering/RenderLayerModelObject.h b/Source/WebCore/rendering/RenderLayerModelObject.h >index e605a48ba5516ff84c99f9fa66e7c2306886cdfc..557f3f7df6ee9ba746d8aa7ded7c792636990e4f 100644 >--- a/Source/WebCore/rendering/RenderLayerModelObject.h >+++ b/Source/WebCore/rendering/RenderLayerModelObject.h >@@ -36,6 +36,16 @@ struct RepaintLayoutRects { > RepaintLayoutRects() { }; > }; > >+class LayerPositionChange { >+public: >+ LayerPositionChange(const RenderObject&); >+ ~LayerPositionChange(); >+ >+private: >+ const RenderBoxModelObject* m_renderer { nullptr }; >+ std::optional<LayoutRect> m_rect; >+}; >+ > class RenderLayerModelObject : public RenderElement { > WTF_MAKE_ISO_ALLOCATED(RenderLayerModelObject); > public: >diff --git a/Source/WebCore/rendering/RenderListBox.cpp b/Source/WebCore/rendering/RenderListBox.cpp >index 36c1aed0d04195a1feeff2a1647daf9c1a3c86ee..423ebe5a9f74cefee3034303957bc1daf97ed29a 100644 >--- a/Source/WebCore/rendering/RenderListBox.cpp >+++ b/Source/WebCore/rendering/RenderListBox.cpp >@@ -180,6 +180,7 @@ void RenderListBox::selectionChanged() > > void RenderListBox::layout() > { >+ LayerPositionChange renderLayerNeedsUpdate(*this); > StackStats::LayoutCheckPoint layoutCheckPoint; > RenderBlockFlow::layout(); > >diff --git a/Source/WebCore/rendering/RenderListMarker.cpp b/Source/WebCore/rendering/RenderListMarker.cpp >index da10419fa65ade716780ddd1e406247bc09c792f..ebf6347ad542c696f6687f8c4b614daeded420a4 100644 >--- a/Source/WebCore/rendering/RenderListMarker.cpp >+++ b/Source/WebCore/rendering/RenderListMarker.cpp >@@ -1380,6 +1380,7 @@ void RenderListMarker::layout() > { > StackStats::LayoutCheckPoint layoutCheckPoint; > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > LayoutUnit blockOffset; > for (auto* ancestor = parentBox(); ancestor && ancestor != &m_listItem; ancestor = ancestor->parentBox()) >diff --git a/Source/WebCore/rendering/RenderMediaControlElements.cpp b/Source/WebCore/rendering/RenderMediaControlElements.cpp >index c29a83a14a4081d3813ca0c4d1099c6c677207f9..022f2967203e2fdc61eaa9e42ae4afda963de7a0 100644 >--- a/Source/WebCore/rendering/RenderMediaControlElements.cpp >+++ b/Source/WebCore/rendering/RenderMediaControlElements.cpp >@@ -60,6 +60,7 @@ void RenderMediaVolumeSliderContainer::layout() > int absoluteOffsetTop = buttonBox.localToAbsolute(FloatPoint(0, -size().height())).y(); > > LayoutStateDisabler layoutStateDisabler(view().frameView().layoutContext()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > // If the slider would be rendered outside the page, it should be moved below the controls. > if (UNLIKELY(absoluteOffsetTop < 0)) >diff --git a/Source/WebCore/rendering/RenderMultiColumnFlow.cpp b/Source/WebCore/rendering/RenderMultiColumnFlow.cpp >index 6afa0ddfa47b3c468989809332ff1ba4bbccc7bd..bd4f6447b087a8da312b1f2daa65f8c5113d7c26 100644 >--- a/Source/WebCore/rendering/RenderMultiColumnFlow.cpp >+++ b/Source/WebCore/rendering/RenderMultiColumnFlow.cpp >@@ -114,6 +114,7 @@ RenderBox* RenderMultiColumnFlow::previousColumnSetOrSpannerSiblingOf(const Rend > > void RenderMultiColumnFlow::layout() > { >+ LayerPositionChange renderLayerNeedsUpdate(*this); > ASSERT(!m_inLayout); > m_inLayout = true; > m_lastSetWorkedOn = nullptr; >diff --git a/Source/WebCore/rendering/RenderReplaced.cpp b/Source/WebCore/rendering/RenderReplaced.cpp >index 5e6a5b532d0ff1a6fc0ddcbe0b788197c31676e2..8abe5c33de94059a1c17547c1d9fc9b7319bcef3 100644 >--- a/Source/WebCore/rendering/RenderReplaced.cpp >+++ b/Source/WebCore/rendering/RenderReplaced.cpp >@@ -94,6 +94,7 @@ void RenderReplaced::layout() > { > StackStats::LayoutCheckPoint layoutCheckPoint; > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > LayoutRepainter repainter(*this, checkForRepaintDuringLayout()); > >diff --git a/Source/WebCore/rendering/RenderReplica.cpp b/Source/WebCore/rendering/RenderReplica.cpp >index 5311a351050fcca7807a98e201dac14b0c83ac97..cb92aecd6c621beb4369de9f2ed74bb61900fe17 100644 >--- a/Source/WebCore/rendering/RenderReplica.cpp >+++ b/Source/WebCore/rendering/RenderReplica.cpp >@@ -51,6 +51,7 @@ RenderReplica::~RenderReplica() = default; > > void RenderReplica::layout() > { >+ LayerPositionChange renderLayerNeedsUpdate(*this); > StackStats::LayoutCheckPoint layoutCheckPoint; > setFrameRect(parentBox()->borderBoxRect()); > updateLayerTransform(); >diff --git a/Source/WebCore/rendering/RenderRubyRun.cpp b/Source/WebCore/rendering/RenderRubyRun.cpp >index 161e94a518f899f4c720210f127f36e580a03968..29142cbeed2d3853ce0ab9791bb2fd2f4d2c62e8 100644 >--- a/Source/WebCore/rendering/RenderRubyRun.cpp >+++ b/Source/WebCore/rendering/RenderRubyRun.cpp >@@ -138,6 +138,7 @@ void RenderRubyRun::layout() > > void RenderRubyRun::layoutBlock(bool relayoutChildren, LayoutUnit pageHeight) > { >+ LayerPositionChange renderLayerNeedsUpdate(*this); > if (!relayoutChildren) { > // Since the extra relayout in RenderBlockFlow::updateRubyForJustifiedText() causes the size of the RenderRubyText/RenderRubyBase > // dependent on the line's current expansion, whenever we relayout the RenderRubyRun, we need to relayout the RenderRubyBase/RenderRubyText as well. >diff --git a/Source/WebCore/rendering/RenderScrollbarPart.cpp b/Source/WebCore/rendering/RenderScrollbarPart.cpp >index 9093aeda087415817e2125a622b65c9f13dc5148..2e8ca1a07f99de1a85684a3f48891dbaa7ef282a 100644 >--- a/Source/WebCore/rendering/RenderScrollbarPart.cpp >+++ b/Source/WebCore/rendering/RenderScrollbarPart.cpp >@@ -48,6 +48,7 @@ RenderScrollbarPart::~RenderScrollbarPart() = default; > > void RenderScrollbarPart::layout() > { >+ LayerPositionChange renderLayerNeedsUpdate(*this); > StackStats::LayoutCheckPoint layoutCheckPoint; > setLocation(LayoutPoint()); // We don't worry about positioning ourselves. We're just determining our minimum width/height. > if (m_scrollbar->orientation() == HorizontalScrollbar) >diff --git a/Source/WebCore/rendering/RenderTable.cpp b/Source/WebCore/rendering/RenderTable.cpp >index 4e3866d59f2225178f9caeef45ab97b949410436..ca58a8bfc4060cecc032c459d359e81a6cf9032a 100644 >--- a/Source/WebCore/rendering/RenderTable.cpp >+++ b/Source/WebCore/rendering/RenderTable.cpp >@@ -390,6 +390,7 @@ void RenderTable::simplifiedNormalFlowLayout() > void RenderTable::layout() > { > StackStats::LayoutCheckPoint layoutCheckPoint; >+ LayerPositionChange renderLayerNeedsUpdate(*this); > ASSERT(needsLayout()); > > if (simplifiedLayout()) >diff --git a/Source/WebCore/rendering/RenderTableCell.cpp b/Source/WebCore/rendering/RenderTableCell.cpp >index d339c8d6e13583bef24b827bf91861682abd5567..2b57e5efc1095fddff5cf33ddb52451651e523a7 100644 >--- a/Source/WebCore/rendering/RenderTableCell.cpp >+++ b/Source/WebCore/rendering/RenderTableCell.cpp >@@ -265,6 +265,7 @@ void RenderTableCell::setCellLogicalWidth(LayoutUnit tableLayoutLogicalWidth) > void RenderTableCell::layout() > { > StackStats::LayoutCheckPoint layoutCheckPoint; >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > int oldCellBaseline = cellBaselinePosition(); > layoutBlock(cellWidthChanged()); >diff --git a/Source/WebCore/rendering/RenderTableRow.cpp b/Source/WebCore/rendering/RenderTableRow.cpp >index 3c67936d5cc32f9917e78207823306fba36cfafb..3d2b1b2becece482c579991b2dfd2a25e8df8bce 100644 >--- a/Source/WebCore/rendering/RenderTableRow.cpp >+++ b/Source/WebCore/rendering/RenderTableRow.cpp >@@ -127,6 +127,7 @@ void RenderTableRow::layout() > { > StackStats::LayoutCheckPoint layoutCheckPoint; > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > // Table rows do not add translation. > LayoutStateMaintainer statePusher(*this, LayoutSize(), hasTransform() || hasReflection() || style().isFlippedBlocksWritingMode()); >diff --git a/Source/WebCore/rendering/RenderTableSection.cpp b/Source/WebCore/rendering/RenderTableSection.cpp >index 604fb7491b7642269211ce8fbe135ad288f3e034..3fa6138be10cbd0779d328c268c5ae7515e5f02c 100644 >--- a/Source/WebCore/rendering/RenderTableSection.cpp >+++ b/Source/WebCore/rendering/RenderTableSection.cpp >@@ -333,6 +333,7 @@ void RenderTableSection::layout() > ASSERT(needsLayout()); > ASSERT(!needsCellRecalc()); > ASSERT(!table()->needsSectionRecalc()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > m_forceSlowPaintPathWithOverflowingCell = false; > // addChild may over-grow m_grid but we don't want to throw away the memory too early as addChild >diff --git a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp >index 939429a52c6d562b8cc97c3c8eb6bd663a641d38..ed19a8abbf9b63981448e59293a7d013f3a14875 100644 >--- a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp >+++ b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp >@@ -86,6 +86,7 @@ static void resetOverriddenHeight(RenderBox* box, const RenderObject* ancestor) > void RenderTextControlSingleLine::layout() > { > StackStats::LayoutCheckPoint layoutCheckPoint; >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > // FIXME: We should remove the height-related hacks in layout() and > // styleDidChange(). We need them because we want to: >diff --git a/Source/WebCore/rendering/RenderVTTCue.cpp b/Source/WebCore/rendering/RenderVTTCue.cpp >index cc056c9de2b8edd6ddc34530c74dc1f6c71f3961..f603424782f3770c431a0d535eb79f3091b7421b 100644 >--- a/Source/WebCore/rendering/RenderVTTCue.cpp >+++ b/Source/WebCore/rendering/RenderVTTCue.cpp >@@ -60,6 +60,7 @@ void RenderVTTCue::layout() > return; > > LayoutStateMaintainer statePusher(*this, locationOffset(), hasTransform() || hasReflection() || style().isFlippedBlocksWritingMode()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (m_cue->cueType()== TextTrackCue::WebVTT) { > if (toVTTCue(m_cue)->snapToLines()) >diff --git a/Source/WebCore/rendering/RenderVideo.cpp b/Source/WebCore/rendering/RenderVideo.cpp >index 731cb63436c47862d4acbeda279baaa37250a7e1..b7dd28a3a59e0589e0172a4a01603193783ccd21 100644 >--- a/Source/WebCore/rendering/RenderVideo.cpp >+++ b/Source/WebCore/rendering/RenderVideo.cpp >@@ -213,6 +213,7 @@ void RenderVideo::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& paintOf > > void RenderVideo::layout() > { >+ LayerPositionChange renderLayerNeedsUpdate(*this); > StackStats::LayoutCheckPoint layoutCheckPoint; > updateIntrinsicSize(); > RenderMedia::layout(); >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp b/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp >index 3cf53047212363d70ca6cb52c4440b59e1bc10ab..560ca5c9bb049ddf566eef638175b8af23589598 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp >@@ -234,6 +234,8 @@ void RenderMathMLBlock::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); > >+ LayerPositionChange renderLayerNeedsUpdate(*this); >+ > if (!relayoutChildren && simplifiedLayout()) > return; > >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp b/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp >index d930a4ac1d21537ffa60b1c1cda296e1bb8d8f4d..204de128aec646a40e4664a33ccb286b79a647ac 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp >@@ -210,6 +210,7 @@ LayoutUnit RenderMathMLFraction::ascentOverHorizontalAxis() const > void RenderMathMLFraction::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp b/Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp >index 6a675aeb6e3e897da10f5cff32a4ac7442613a19..163c2289d8cd1b2a68b7b4c44f2d516a5bebfcd7 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp >@@ -169,6 +169,7 @@ void RenderMathMLMenclose::computePreferredLogicalWidths() > void RenderMathMLMenclose::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp b/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp >index 98f38f9f0df3e8fb25facc86b7f02e0b1dc5e951..0d3da819d631dce342311c786249de05d0701ece 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp >@@ -217,6 +217,7 @@ void RenderMathMLOperator::computePreferredLogicalWidths() > void RenderMathMLOperator::layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLPadded.cpp b/Source/WebCore/rendering/mathml/RenderMathMLPadded.cpp >index 94f8eb22a1c9626a036613d716f7f329432aefa5..f5002516c3c5c66dd3fe49239f6617e4b29ae9e4 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLPadded.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLPadded.cpp >@@ -85,6 +85,7 @@ void RenderMathMLPadded::computePreferredLogicalWidths() > void RenderMathMLPadded::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp b/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp >index 8de700199785ea72b186e8543dc730ee6caed007..e482dff3ddb232aead86c31850061a429c7b06fa 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp >@@ -184,6 +184,7 @@ void RenderMathMLRoot::computePreferredLogicalWidths() > void RenderMathMLRoot::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp b/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp >index 0505ef0aee2d7143d6fe4adc229663b39ad2e5d4..2f2391259782ebbd4288c2199e250f4465041e48 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp >@@ -160,6 +160,7 @@ void RenderMathMLRow::layoutRowItems(LayoutUnit width, LayoutUnit ascent) > void RenderMathMLRow::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp b/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp >index 0251423721db70936e8c08fc16ba3b8e59a58dc2..366ee71e9910f73c161b1ce272e0ea46879f8f38 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp >@@ -348,6 +348,7 @@ RenderMathMLScripts::VerticalMetrics RenderMathMLScripts::verticalMetrics(const > void RenderMathMLScripts::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLSpace.cpp b/Source/WebCore/rendering/mathml/RenderMathMLSpace.cpp >index b64517684ed0cf9d4b23021332911def95ebc415..69622ae188726203f36e0d81231dfabae10c72e3 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLSpace.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLSpace.cpp >@@ -72,6 +72,7 @@ void RenderMathMLSpace::getSpaceHeightAndDepth(LayoutUnit& height, LayoutUnit& d > void RenderMathMLSpace::layoutBlock(bool relayoutChildren, LayoutUnit) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLToken.cpp b/Source/WebCore/rendering/mathml/RenderMathMLToken.cpp >index 38af4c7bec0f081bfa1ea54cab939bc1cd4aa6b7..aac66f2599c9a1f318cf592dc336c9ce43e9ff94 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLToken.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLToken.cpp >@@ -567,6 +567,7 @@ std::optional<int> RenderMathMLToken::firstLineBaseline() const > void RenderMathMLToken::layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return; >diff --git a/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp b/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp >index 4a7969a2c985073efe3a3a762bb71b0ebe806f77..c3ecc84c2f99c166a28504c9797bff05db88573f 100644 >--- a/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp >+++ b/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp >@@ -287,6 +287,7 @@ RenderMathMLUnderOver::VerticalParameters RenderMathMLUnderOver::verticalParamet > void RenderMathMLUnderOver::layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight) > { > ASSERT(needsLayout()); >+ LayerPositionChange renderLayerNeedsUpdate(*this); > > if (!relayoutChildren && simplifiedLayout()) > return;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
ews-watchlist
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 189630
: 349806 |
349816
|
349820
|
349821
|
349842
|
349848