⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 275126 in webkit


Ignore:
Timestamp:
Mar 26, 2021, 6:37:26 PM (5 years ago)
Author:
Alan Bujtas
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:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r275121 r275126  
     12021-03-26  Zalan Bujtas  <zalan@apple.com>
     2
     3        [RenderTreeBuilder] No need to update the counters when the renderer is moved internally
     4        https://bugs.webkit.org/show_bug.cgi?id=223801
     5        <rdar://75835208>
     6
     7        Reviewed by Ryosuke Niwa.
     8
     9        When the renderer re-parenting is initiated by an "internal move" (e.g. anonymous block parent is not needed anymore so all the descendants
     10        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.
     11
     12        * rendering/updating/RenderTreeBuilder.cpp:
     13        (WebCore::RenderTreeBuilder::attachToRenderElementInternal):
     14        (WebCore::RenderTreeBuilder::move):
     15        * rendering/updating/RenderTreeBuilder.h:
     16
    1172021-03-26  Chris Fleizach  <cfleizach@apple.com>
    218
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp

    r275067 r275126  
    428428}
    429429
    430 void RenderTreeBuilder::attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
     430void RenderTreeBuilder::attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild, ReinsertAfterMove reinsertAfterMove)
    431431{
    432432    RELEASE_ASSERT_WITH_MESSAGE(!parent.view().frameView().layoutContext().layoutState(), "Layout must not mutate render tree");
     
    452452            multiColumnBuilder().multiColumnDescendantInserted(downcast<RenderMultiColumnFlow>(*fragmentedFlow), *newChild);
    453453
    454         if (is<RenderElement>(*newChild))
     454        // FIXME: needsStateReset could probably be used for multicolumn as well.
     455        auto needsStateReset = reinsertAfterMove == ReinsertAfterMove::No;
     456        if (needsStateReset && is<RenderElement>(*newChild))
    455457            RenderCounter::rendererSubtreeAttached(downcast<RenderElement>(*newChild));
    456458    }
     
    483485    } else {
    484486        auto childToMove = detachFromRenderElement(from, child);
    485         attachToRenderElementInternal(to, WTFMove(childToMove), beforeChild);
     487        attachToRenderElementInternal(to, WTFMove(childToMove), beforeChild, ReinsertAfterMove::Yes);
    486488    }
    487489}
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h

    r275067 r275126  
    7171    void attachToRenderGrid(RenderGrid& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
    7272    void attachToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
    73     void attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
     73    enum class ReinsertAfterMove { No, Yes };
     74    void attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr, ReinsertAfterMove = ReinsertAfterMove::No);
    7475
    7576    enum class WillBeDestroyed { No, Yes };
Note: See TracChangeset for help on using the changeset viewer.