Changeset 230392 in webkit
- Timestamp:
- Apr 9, 2018 3:52:15 AM (6 years ago)
- Location:
- releases/WebKitGTK/webkit-2.20
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
releases/WebKitGTK/webkit-2.20/LayoutTests/ChangeLog
r229280 r230392 1 2018-03-03 Zalan Bujtas <zalan@apple.com> 2 3 [RenderTreeBuilder] Move styleDidChange mutation logic to RenderTreeUpdater 4 https://bugs.webkit.org/show_bug.cgi?id=183273 5 <rdar://problem/38054892> 6 7 Reviewed by Antti Koivisto. 8 9 This is just a different repaint order. 10 11 * fast/repaint/absolute-position-change-containing-block-expected.txt: 12 1 13 2018-03-02 Claudio Saavedra <csaavedra@igalia.com> 2 14 -
releases/WebKitGTK/webkit-2.20/LayoutTests/fast/repaint/absolute-position-change-containing-block-expected.txt
r190658 r230392 2 2 (rect 8 5000 100 100) 3 3 (rect 108 5100 100 100) 4 (rect 8 8 784 2000)5 4 (rect 8 5000 100 100) 6 5 (rect 108 5100 100 100) 7 6 (rect 100 100 100 100) 7 (rect 8 8 784 2000) 8 8 (rect 16 5008 100 100) 9 9 (rect 16 5008 100 100) -
releases/WebKitGTK/webkit-2.20/Source/WebCore/ChangeLog
r229526 r230392 1 2018-03-03 Zalan Bujtas <zalan@apple.com> 2 3 [RenderTreeBuilder] Move styleDidChange mutation logic to RenderTreeUpdater 4 https://bugs.webkit.org/show_bug.cgi?id=183273 5 <rdar://problem/38054892> 6 7 Reviewed by Antti Koivisto. 8 9 Covered by existing tests. 10 11 * rendering/RenderBlockFlow.cpp: 12 (WebCore::RenderBlockFlow::styleDidChange): 13 * rendering/RenderElement.cpp: 14 (WebCore::RenderElement::styleDidChange): 15 (WebCore::RenderElement::noLongerAffectsParentBlock const): Deleted. 16 * rendering/RenderElement.h: 17 * rendering/updating/RenderTreeUpdater.cpp: 18 (WebCore::RenderTreeUpdater::updateElementRenderer): 19 1 20 2018-03-12 Michael Catanzaro <mcatanzaro@igalia.com> 2 21 -
releases/WebKitGTK/webkit-2.20/Source/WebCore/rendering/RenderBlockFlow.cpp
r229268 r230392 2021 2021 parentBlock->markSiblingsWithFloatsForLayout(); 2022 2022 } 2023 // Fresh floats need to be reparented if they actually belong to the previous anonymous block.2024 // It copies the logic of RenderBlock::addChildIgnoringContinuation2025 if (oldStyle && noLongerAffectsParentBlock(*oldStyle) && style().isFloating() && previousSibling() && previousSibling()->isAnonymousBlock())2026 RenderTreeBuilder::current()->move(downcast<RenderBoxModelObject>(*parent()), downcast<RenderBoxModelObject>(*previousSibling()), *this, RenderTreeBuilder::NormalizeAfterInsertion::No);2027 2023 2028 2024 if (diff >= StyleDifferenceRepaint) { -
releases/WebKitGTK/webkit-2.20/Source/WebCore/rendering/RenderElement.cpp
r229268 r230392 793 793 #endif 794 794 795 bool RenderElement::noLongerAffectsParentBlock(const RenderStyle& oldStyle) const796 {797 return parent() && parent()->isRenderBlock()798 && ((!oldStyle.isFloating() && style().isFloating()) || (!oldStyle.hasOutOfFlowPosition() && style().hasOutOfFlowPosition()));799 }800 801 795 void RenderElement::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) 802 796 { … … 806 800 updateImage(oldStyle ? oldStyle->maskBoxImage().image() : nullptr, m_style.maskBoxImage().image()); 807 801 updateShapeImage(oldStyle ? oldStyle->shapeOutside() : nullptr, m_style.shapeOutside()); 808 809 bool affectsParentBlock = oldStyle && (oldStyle->isFloating() || oldStyle->hasOutOfFlowPosition())810 && !style().isFloating() && !style().hasOutOfFlowPosition()811 && parent() && (parent()->isRenderBlockFlow() || parent()->isRenderInline());812 if (affectsParentBlock) {813 // We have gone from not affecting the inline status of the parent flow to suddenly814 // having an impact. See if there is a mismatch between the parent flow's815 // childrenInline() state and our state.816 setInline(style().isDisplayInlineType());817 if (isInline() != parent()->childrenInline())818 RenderTreeBuilder::current()->childFlowStateChangesAndAffectsParentBlock(*this);819 }820 821 if (oldStyle && noLongerAffectsParentBlock(*oldStyle))822 RenderTreeBuilder::current()->childFlowStateChangesAndNoLongerAffectsParentBlock(*this);823 802 824 803 SVGRenderSupport::styleChanged(*this, oldStyle); -
releases/WebKitGTK/webkit-2.20/Source/WebCore/rendering/RenderElement.h
r229268 r230392 283 283 bool isVisibleInViewport() const; 284 284 285 bool noLongerAffectsParentBlock(const RenderStyle& oldStyle) const;286 287 285 private: 288 286 RenderElement(ContainerNode&, RenderStyle&&, BaseTypeFlags); -
releases/WebKitGTK/webkit-2.20/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp
r229232 r230392 514 514 } 515 515 516 void RenderTreeBuilder::normalizeTreeAfterStyleChange(RenderElement& renderer, RenderStyle& oldStyle) 517 { 518 if (!renderer.parent()) 519 return; 520 521 auto& parent = *renderer.parent(); 522 523 bool wasFloating = oldStyle.isFloating(); 524 bool wasOufOfFlowPositioned = oldStyle.hasOutOfFlowPosition(); 525 bool isFloating = renderer.style().isFloating(); 526 bool isOutOfFlowPositioned = renderer.style().hasOutOfFlowPosition(); 527 bool startsAffectingParent = false; 528 bool noLongerAffectsParent = false; 529 530 if (is<RenderBlock>(parent)) 531 noLongerAffectsParent = (!wasFloating && isFloating) || (!wasOufOfFlowPositioned && isOutOfFlowPositioned); 532 533 if (is<RenderBlockFlow>(parent) || is<RenderInline>(parent)) { 534 startsAffectingParent = (wasFloating || wasOufOfFlowPositioned) && !isFloating && !isOutOfFlowPositioned; 535 ASSERT(!startsAffectingParent || !noLongerAffectsParent); 536 } 537 538 if (startsAffectingParent) { 539 // We have gone from not affecting the inline status of the parent flow to suddenly 540 // having an impact. See if there is a mismatch between the parent flow's 541 // childrenInline() state and our state. 542 renderer.setInline(renderer.style().isDisplayInlineType()); 543 if (renderer.isInline() != renderer.parent()->childrenInline()) 544 childFlowStateChangesAndAffectsParentBlock(renderer); 545 return; 546 } 547 548 if (noLongerAffectsParent) { 549 childFlowStateChangesAndNoLongerAffectsParentBlock(renderer); 550 551 if (is<RenderBlockFlow>(renderer)) { 552 // Fresh floats need to be reparented if they actually belong to the previous anonymous block. 553 // It copies the logic of RenderBlock::addChildIgnoringContinuation 554 if (isFloating && renderer.previousSibling() && renderer.previousSibling()->isAnonymousBlock()) 555 move(downcast<RenderBoxModelObject>(parent), downcast<RenderBoxModelObject>(*renderer.previousSibling()), renderer, RenderTreeBuilder::NormalizeAfterInsertion::No); 556 } 557 } 558 } 559 516 560 void RenderTreeBuilder::makeChildrenNonInline(RenderBlock& parent, RenderObject* insertionPoint) 517 561 { -
releases/WebKitGTK/webkit-2.20/Source/WebCore/rendering/updating/RenderTreeBuilder.h
r229232 r230392 55 55 void updateAfterDescendants(RenderElement&); 56 56 void destroyAndCleanUpAnonymousWrappers(RenderObject& child); 57 void normalizeTreeAfterStyleChange(RenderElement&, RenderStyle& oldStyle); 57 58 58 59 #if ENABLE(FULLSCREEN_API) … … 60 61 #endif 61 62 63 private: 62 64 void childFlowStateChangesAndAffectsParentBlock(RenderElement& child); 63 65 void childFlowStateChangesAndNoLongerAffectsParentBlock(RenderElement& child); 64 65 private:66 66 void attachIgnoringContinuation(RenderElement& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr); 67 67 void attachToRenderGrid(RenderGrid& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr); -
releases/WebKitGTK/webkit-2.20/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp
r229225 r230392 295 295 } 296 296 297 void RenderTreeUpdater::updateRendererStyle(RenderElement& renderer, RenderStyle&& newStyle, StyleDifference minimalStyleDifference) 298 { 299 auto oldStyle = RenderStyle::clone(renderer.style()); 300 renderer.setStyle(WTFMove(newStyle), minimalStyleDifference); 301 m_builder.normalizeTreeAfterStyleChange(renderer, oldStyle); 302 } 303 297 304 void RenderTreeUpdater::updateElementRenderer(Element& element, const Style::ElementUpdate& update) 298 305 { … … 336 343 337 344 if (update.recompositeLayer) { 338 renderer.setStyle(RenderStyle::clone(*update.style), StyleDifferenceRecompositeLayer);345 updateRendererStyle(renderer, RenderStyle::clone(*update.style), StyleDifferenceRecompositeLayer); 339 346 return; 340 347 } … … 342 349 if (update.change == Style::NoChange) { 343 350 if (pseudoStyleCacheIsInvalid(&renderer, update.style.get())) { 344 renderer.setStyle(RenderStyle::clone(*update.style), StyleDifferenceEqual);351 updateRendererStyle(renderer, RenderStyle::clone(*update.style), StyleDifferenceEqual); 345 352 return; 346 353 } … … 348 355 } 349 356 350 renderer.setStyle(RenderStyle::clone(*update.style), StyleDifferenceEqual);357 updateRendererStyle(renderer, RenderStyle::clone(*update.style), StyleDifferenceEqual); 351 358 } 352 359 -
releases/WebKitGTK/webkit-2.20/Source/WebCore/rendering/updating/RenderTreeUpdater.h
r228655 r230392 59 59 void createTextRenderer(Text&, const Style::TextUpdate*); 60 60 void updateElementRenderer(Element&, const Style::ElementUpdate&); 61 void updateRendererStyle(RenderElement&, RenderStyle&&, StyleDifference); 61 62 void createRenderer(Element&, RenderStyle&&); 62 63 void updateBeforeDescendants(Element&, const Style::ElementUpdates*);
Note: See TracChangeset
for help on using the changeset viewer.