Changeset 195069 in webkit


Ignore:
Timestamp:
Jan 14, 2016 12:09:51 PM (8 years ago)
Author:
Alan Bujtas
Message:
ASSERTION FAILED: !newRelayoutRoot.container()
!newRelayoutRoot.container()->needsLayout() in WebCore::FrameView::scheduleRelayoutOfSubtree

https://bugs.webkit.org/show_bug.cgi?id=151605#c1

Reviewed by David Hyatt.

Do not let RenderMultiColumnSet/RenderFlowThread mark ancestors dirty while updating scrollbars
for overflow content. While updating scrollbars, we only layout descendants so marking parents dirty
is unnecessary and could lead to an invalid dirty state.

Source/WebCore:

Test: fast/multicol/body-stuck-with-dirty-bit-with-columns.html

  • rendering/RenderBlockFlow.cpp:

(WebCore::RenderBlockFlow::layoutSpecialExcludedChild):

  • rendering/RenderFlowThread.cpp:

(WebCore::RenderFlowThread::invalidateRegions):

  • rendering/RenderFlowThread.h:
  • rendering/RenderMultiColumnSet.cpp:

(WebCore::RenderMultiColumnSet::prepareForLayout):

LayoutTests:

  • fast/multicol/body-stuck-with-dirty-bit-with-columns-expected.txt: Added.
  • fast/multicol/body-stuck-with-dirty-bit-with-columns.html: Added.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r195064 r195069  
     12016-01-14  Zalan Bujtas  <zalan@apple.com>
     2
     3        ASSERTION FAILED: !newRelayoutRoot.container() || !newRelayoutRoot.container()->needsLayout() in WebCore::FrameView::scheduleRelayoutOfSubtree
     4        https://bugs.webkit.org/show_bug.cgi?id=151605#c1
     5
     6        Reviewed by David Hyatt.
     7
     8        Do not let RenderMultiColumnSet/RenderFlowThread mark ancestors dirty while updating scrollbars
     9        for overflow content. While updating scrollbars, we only layout descendants so marking parents dirty
     10        is unnecessary and could lead to an invalid dirty state.
     11
     12        * fast/multicol/body-stuck-with-dirty-bit-with-columns-expected.txt: Added.
     13        * fast/multicol/body-stuck-with-dirty-bit-with-columns.html: Added.
     14
    1152016-01-14  Dave Hyatt  <hyatt@apple.com>
    216
  • trunk/Source/WebCore/ChangeLog

    r195064 r195069  
     12016-01-14  Zalan Bujtas  <zalan@apple.com>
     2
     3        ASSERTION FAILED: !newRelayoutRoot.container() || !newRelayoutRoot.container()->needsLayout() in WebCore::FrameView::scheduleRelayoutOfSubtree
     4        https://bugs.webkit.org/show_bug.cgi?id=151605#c1
     5
     6        Reviewed by David Hyatt.
     7
     8        Do not let RenderMultiColumnSet/RenderFlowThread mark ancestors dirty while updating scrollbars
     9        for overflow content. While updating scrollbars, we only layout descendants so marking parents dirty
     10        is unnecessary and could lead to an invalid dirty state.
     11
     12        Test: fast/multicol/body-stuck-with-dirty-bit-with-columns.html
     13
     14        * rendering/RenderBlockFlow.cpp:
     15        (WebCore::RenderBlockFlow::layoutSpecialExcludedChild):
     16        * rendering/RenderFlowThread.cpp:
     17        (WebCore::RenderFlowThread::invalidateRegions):
     18        * rendering/RenderFlowThread.h:
     19        * rendering/RenderMultiColumnSet.cpp:
     20        (WebCore::RenderMultiColumnSet::prepareForLayout):
     21
    1222016-01-14  Dave Hyatt  <hyatt@apple.com>
    223
  • trunk/Source/WebCore/rendering/RenderBlockFlow.cpp

    r194496 r195069  
    37673767            columnSet->prepareForLayout(!flowThread->inBalancingPass());
    37683768
    3769         flowThread->invalidateRegions();
     3769        flowThread->invalidateRegions(MarkOnlyThis);
    37703770        flowThread->setNeedsHeightsRecalculation(true);
    37713771        flowThread->layout();
  • trunk/Source/WebCore/rendering/RenderFlowThread.cpp

    r194496 r195069  
    107107}
    108108
    109 void RenderFlowThread::invalidateRegions()
     109void RenderFlowThread::invalidateRegions(MarkingBehavior markingParents)
    110110{
    111111    ASSERT(!inFinalLayoutPhase());
     
    126126        m_lineToRegionMap->clear();
    127127    m_layersToRegionMappingsDirty = true;
    128     setNeedsLayout();
     128    setNeedsLayout(markingParents);
    129129
    130130    m_regionsInvalidated = true;
  • trunk/Source/WebCore/rendering/RenderFlowThread.h

    r184394 r195069  
    8686
    8787    void validateRegions();
    88     void invalidateRegions();
     88    void invalidateRegions(MarkingBehavior = MarkContainingBlockChain);
    8989    bool hasValidRegionInfo() const { return !m_regionsInvalidated && !m_regionList.isEmpty(); }
    9090
  • trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp

    r194496 r195069  
    363363    setLogicalBottomInFlowThread(RenderFlowThread::maxLogicalHeight());
    364364
    365     setNeedsLayout();
     365    setNeedsLayout(MarkOnlyThis);
    366366}
    367367
Note: See TracChangeset for help on using the changeset viewer.