Changeset 144461 in webkit


Ignore:
Timestamp:
Mar 1, 2013 8:58:25 AM (11 years ago)
Author:
hyatt@apple.com
Message:

[New Multicolumn] Change flow thread containment to be a state.
https://bugs.webkit.org/show_bug.cgi?id=111110

Change m_inRenderFlowThread from a single bit to an actual state. This
will let us track whether we're inside a multicolumn (in-flow) flow thread
or a named (out-of-flow) flow thread. In the former case, we're going to have
to do more work to maintain this state, but for now I've kept all the logic
the same just for the initial landing.

Reviewed by Andreas Kling.

  • dom/NodeRenderingContext.cpp:

(WebCore::NodeRenderingContext::createRendererForElementIfNeeded):
(WebCore::NodeRenderingContext::createRendererForTextIfNeeded):

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::clone):

  • rendering/RenderFlowThread.cpp:

(WebCore::RenderFlowThread::RenderFlowThread):

  • rendering/RenderInline.cpp:

(WebCore::RenderInline::clone):

  • rendering/RenderMultiColumnFlowThread.cpp:

(WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):

  • rendering/RenderObject.cpp:

(WebCore::RenderObject::setFlowThreadStateIncludingDescendants):
(WebCore::RenderObject::removeFromRenderFlowThreadRecursive):

  • rendering/RenderObject.h:

(WebCore::RenderObject::setParent):
(RenderObject):
(WebCore::RenderObject::inRenderFlowThread):
(WebCore::RenderObject::flowThreadState):
(WebCore::RenderObject::setFlowThreadState):
(WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
(RenderObjectBitfields):
(WebCore::RenderObject::RenderObjectBitfields::flowThreadState):
(WebCore::RenderObject::RenderObjectBitfields::setFlowThreadState):

  • rendering/RenderView.cpp:

(WebCore::RenderView::addChild):

Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r144460 r144461  
     12013-03-01  David Hyatt  <hyatt@apple.com>
     2
     3        [New Multicolumn] Change flow thread containment to be a state.
     4        https://bugs.webkit.org/show_bug.cgi?id=111110
     5
     6        Change m_inRenderFlowThread from a single bit to an actual state. This
     7        will let us track whether we're inside a multicolumn (in-flow) flow thread
     8        or a named (out-of-flow) flow thread. In the former case, we're going to have
     9        to do more work to maintain this state, but for now I've kept all the logic
     10        the same just for the initial landing.
     11
     12        Reviewed by Andreas Kling.
     13
     14        * dom/NodeRenderingContext.cpp:
     15        (WebCore::NodeRenderingContext::createRendererForElementIfNeeded):
     16        (WebCore::NodeRenderingContext::createRendererForTextIfNeeded):
     17        * rendering/RenderBlock.cpp:
     18        (WebCore::RenderBlock::clone):
     19        * rendering/RenderFlowThread.cpp:
     20        (WebCore::RenderFlowThread::RenderFlowThread):
     21        * rendering/RenderInline.cpp:
     22        (WebCore::RenderInline::clone):
     23        * rendering/RenderMultiColumnFlowThread.cpp:
     24        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
     25        * rendering/RenderObject.cpp:
     26        (WebCore::RenderObject::setFlowThreadStateIncludingDescendants):
     27        (WebCore::RenderObject::removeFromRenderFlowThreadRecursive):
     28        * rendering/RenderObject.h:
     29        (WebCore::RenderObject::setParent):
     30        (RenderObject):
     31        (WebCore::RenderObject::inRenderFlowThread):
     32        (WebCore::RenderObject::flowThreadState):
     33        (WebCore::RenderObject::setFlowThreadState):
     34        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
     35        (RenderObjectBitfields):
     36        (WebCore::RenderObject::RenderObjectBitfields::flowThreadState):
     37        (WebCore::RenderObject::RenderObjectBitfields::setFlowThreadState):
     38        * rendering/RenderView.cpp:
     39        (WebCore::RenderView::addChild):
     40       
    1412013-03-01  Jessie Berlin  <jberlin@apple.com>
    242
     
    13281368        calls to m_boundFBO, m_boundTexture0 and m_activeTexture to m_state
    13291369        respectives.
    1330 
     1370       
    133113712013-02-28  David Hyatt  <hyatt@apple.com>
    13321372
  • trunk/Source/WebCore/dom/NodeRenderingContext.cpp

    r140546 r144461  
    269269    // Make sure the RenderObject already knows it is going to be added to a RenderFlowThread before we set the style
    270270    // for the first time. Otherwise code using inRenderFlowThread() in the styleWillChange and styleDidChange will fail.
    271     newRenderer->setInRenderFlowThread(parentRenderer->inRenderFlowThread());
     271    newRenderer->setFlowThreadState(parentRenderer->flowThreadState());
    272272
    273273    element->setRenderer(newRenderer);
     
    315315    // Make sure the RenderObject already knows it is going to be added to a RenderFlowThread before we set the style
    316316    // for the first time. Otherwise code using inRenderFlowThread() in the styleWillChange and styleDidChange will fail.
    317     newRenderer->setInRenderFlowThread(parentRenderer->inRenderFlowThread());
     317    newRenderer->setFlowThreadState(parentRenderer->flowThreadState());
    318318
    319319    RenderObject* nextRenderer = this->nextRenderer();
  • trunk/Source/WebCore/rendering/RenderBlock.cpp

    r144350 r144461  
    592592        cloneBlock->setChildrenInline(cloneBlock->firstChild() ? cloneBlock->firstChild()->isInline() : childrenInline());
    593593    }
    594     cloneBlock->setInRenderFlowThread(inRenderFlowThread());
     594    cloneBlock->setFlowThreadState(flowThreadState());
    595595    return cloneBlock;
    596596}
  • trunk/Source/WebCore/rendering/RenderFlowThread.cpp

    r144318 r144461  
    6060{
    6161    ASSERT(document->cssRegionsEnabled());
    62     setInRenderFlowThread();
     62    setFlowThreadState(InsideOutOfFlowThread);
    6363}
    6464
  • trunk/Source/WebCore/rendering/RenderInline.cpp

    r144350 r144461  
    336336    RenderInline* cloneInline = new (renderArena()) RenderInline(node());
    337337    cloneInline->setStyle(style());
    338     cloneInline->setInRenderFlowThread(inRenderFlowThread());
     338    cloneInline->setFlowThreadState(flowThreadState());
    339339    return cloneInline;
    340340}
  • trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp

    r143606 r144461  
    3434    : RenderFlowThread(document)
    3535{
     36    setFlowThreadState(InsideInFlowThread);
    3637}
    3738
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r144350 r144461  
    277277}
    278278
    279 void RenderObject::setInRenderFlowThreadIncludingDescendants(bool b)
    280 {
    281     setInRenderFlowThread(b);
     279void RenderObject::setFlowThreadStateIncludingDescendants(FlowThreadState state)
     280{
     281    setFlowThreadState(state);
    282282
    283283    for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
    284         ASSERT(b != child->inRenderFlowThread());
    285         child->setInRenderFlowThreadIncludingDescendants(b);
     284        ASSERT(state != child->flowThreadState());
     285        child->setFlowThreadStateIncludingDescendants(state);
    286286    }
    287287}
     
    25082508    }
    25092509    renderFlowThread->removeFlowChildInfo(this);
    2510     setInRenderFlowThread(false);
     2510    setFlowThreadState(NotInsideFlowThread);
    25112511}
    25122512
  • trunk/Source/WebCore/rendering/RenderObject.h

    r144350 r144461  
    265265    {
    266266        m_parent = parent;
    267         if (parent && parent->inRenderFlowThread() && !inRenderFlowThread())
    268             setInRenderFlowThreadIncludingDescendants(true);
    269         else if (!parent && inRenderFlowThread())
    270             setInRenderFlowThreadIncludingDescendants(false);
    271     }
     267       
     268        // Only update if our flow thread state is different from our new parent and if we're not a RenderFlowThread.
     269        // A RenderFlowThread is always considered to be inside itself, so it never has to change its state
     270        // in response to parent changes.
     271        FlowThreadState newState = parent ? parent->flowThreadState() : NotInsideFlowThread;
     272        if (newState != flowThreadState() && !isRenderFlowThread())
     273            setFlowThreadStateIncludingDescendants(newState);
     274    }
     275
    272276    //////////////////////////////////////////
    273277private:
     
    433437    }
    434438
    435     bool inRenderFlowThread() const { return m_bitfields.inRenderFlowThread(); }
    436     void setInRenderFlowThread(bool b = true) { m_bitfields.setInRenderFlowThread(b); }
    437 
    438     void setInRenderFlowThreadIncludingDescendants(bool = true);
     439    enum FlowThreadState {
     440        NotInsideFlowThread = 0,
     441        InsideOutOfFlowThread = 1,
     442        InsideInFlowThread = 2,
     443    };
     444
     445    bool inRenderFlowThread() const
     446    {
     447        FlowThreadState state = flowThreadState();
     448        return state != NotInsideFlowThread;
     449    }
     450
     451    void setFlowThreadStateIncludingDescendants(FlowThreadState);
     452
     453    FlowThreadState flowThreadState() const { return m_bitfields.flowThreadState(); }
     454    void setFlowThreadState(FlowThreadState state) { m_bitfields.setFlowThreadState(state); }
    439455
    440456    virtual bool requiresForcedStyleRecalcPropagation() const { return false; }
     
    10441060            IsStickyPositioned = 3
    10451061        };
     1062
    10461063    public:
    10471064        RenderObjectBitfields(Node* node)
     
    10671084            , m_hasCounterNodeMap(false)
    10681085            , m_everHadLayout(false)
    1069             , m_inRenderFlowThread(false)
    10701086            , m_childrenInline(false)
    10711087            , m_hasColumns(false)
    10721088            , m_positionedState(IsStaticlyPositioned)
    10731089            , m_selectionState(SelectionNone)
     1090            , m_flowThreadState(NotInsideFlowThread)
    10741091        {
    10751092        }
    10761093       
    1077         // 29 bits have been used here. There are three bits available.
     1094        // 30 bits have been used here. There are two bits available.
    10781095        ADD_BOOLEAN_BITFIELD(needsLayout, NeedsLayout);
    10791096        ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, NeedsPositionedMovementLayout);
     
    11031120        ADD_BOOLEAN_BITFIELD(everHadLayout, EverHadLayout);
    11041121
    1105         // These bitfields are moved here from subclasses to pack them together.
    1106         // from RenderFlowThread
    1107         ADD_BOOLEAN_BITFIELD(inRenderFlowThread, InRenderFlowThread);
    1108 
    11091122        // from RenderBlock
    11101123        ADD_BOOLEAN_BITFIELD(childrenInline, ChildrenInline);
     
    11141127        unsigned m_positionedState : 2; // PositionedState
    11151128        unsigned m_selectionState : 3; // SelectionState
     1129        unsigned m_flowThreadState : 2; // FlowThreadState
    11161130
    11171131    public:
     
    11301144        ALWAYS_INLINE SelectionState selectionState() const { return static_cast<SelectionState>(m_selectionState); }
    11311145        ALWAYS_INLINE void setSelectionState(SelectionState selectionState) { m_selectionState = selectionState; }
     1146       
     1147        ALWAYS_INLINE FlowThreadState flowThreadState() const { return static_cast<FlowThreadState>(m_flowThreadState); }
     1148        ALWAYS_INLINE void setFlowThreadState(FlowThreadState flowThreadState) { m_flowThreadState = flowThreadState; }
    11321149    };
    11331150
  • trunk/Source/WebCore/rendering/RenderView.cpp

    r143428 r144461  
    164164        RenderBox* seamlessBox = enclosingSeamlessRenderer(document());
    165165        if (seamlessBox && seamlessBox->inRenderFlowThread())
    166             newChild->setInRenderFlowThread();
     166            newChild->setFlowThreadState(seamlessBox->flowThreadState());
    167167    }
    168168    RenderBlock::addChild(newChild, beforeChild);
Note: See TracChangeset for help on using the changeset viewer.