Ignore:
Timestamp:
Oct 1, 2013, 3:29:34 PM (12 years ago)
Author:
Antti Koivisto
Message:

Make tests for renderer base types non-virtual
https://bugs.webkit.org/show_bug.cgi?id=122185

Reviewed by Dave Hyatt.

Make isRenderFoo() functions for commonly tested base types use bit flags instead of virtual calls.
This is faster and we have space in RenderElement.

These bits are not mutully exclusive. For testing leaf types we can add an enum.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/rendering/RenderElement.h

    r156639 r156738  
    5151    RenderObject* lastChild() const { return m_lastChild; }
    5252
     53    // FIXME: Make these standalone and move to relevant files.
     54    bool isRenderLayerModelObject() const;
     55    bool isBoxModelObject() const;
     56    bool isRenderBlock() const;
     57    bool isRenderBlockFlow() const;
     58    bool isRenderReplaced() const;
     59    bool isRenderInline() const;
     60
    5361    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; }
    5462    virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
     
    8795
    8896protected:
    89     explicit RenderElement(Element*);
     97    enum BaseTypeFlags {
     98        RenderLayerModelObjectFlag = 1 << 0,
     99        RenderBoxModelObjectFlag = 1 << 1,
     100        RenderInlineFlag = 1 << 2,
     101        RenderReplacedFlag = 1 << 3,
     102        RenderBlockFlag = 1 << 4,
     103        RenderBlockFlowFlag = 1 << 5,
     104    };
     105
     106    explicit RenderElement(Element*, unsigned baseTypeFlags);
    90107
    91108    bool layerCreationAllowedForSubtree() const;
     
    130147    RenderStyle* cachedFirstLineStyle() const;
    131148
     149    unsigned m_baseTypeFlags : 6;
    132150    bool m_ancestorLineBoxDirty : 1;
    133151
     
    165183}
    166184
     185inline bool RenderElement::isRenderLayerModelObject() const
     186{
     187    return m_baseTypeFlags & RenderLayerModelObjectFlag;
     188}
     189
     190inline bool RenderElement::isBoxModelObject() const
     191{
     192    return m_baseTypeFlags & RenderBoxModelObjectFlag;
     193}
     194
     195inline bool RenderElement::isRenderBlock() const
     196{
     197    return m_baseTypeFlags & RenderBlockFlag;
     198}
     199
     200inline bool RenderElement::isRenderBlockFlow() const
     201{
     202    return m_baseTypeFlags & RenderBlockFlowFlag;
     203}
     204
     205inline bool RenderElement::isRenderReplaced() const
     206{
     207    return m_baseTypeFlags & RenderReplacedFlag;
     208}
     209
     210inline bool RenderElement::isRenderInline() const
     211{
     212    return m_baseTypeFlags & RenderInlineFlag;
     213}
     214
    167215inline RenderElement& toRenderElement(RenderObject& object)
    168216{
     
    192240void toRenderElement(const RenderElement*);
    193241void toRenderElement(const RenderElement&);
     242
     243inline bool RenderObject::isRenderLayerModelObject() const
     244{
     245    return isRenderElement() && toRenderElement(this)->isRenderLayerModelObject();
     246}
     247
     248inline bool RenderObject::isBoxModelObject() const
     249{
     250    return isRenderElement() && toRenderElement(this)->isBoxModelObject();
     251}
     252
     253inline bool RenderObject::isRenderBlock() const
     254{
     255    return isRenderElement() && toRenderElement(this)->isRenderBlock();
     256}
     257
     258inline bool RenderObject::isRenderBlockFlow() const
     259{
     260    return isRenderElement() && toRenderElement(this)->isRenderBlockFlow();
     261}
     262
     263inline bool RenderObject::isRenderReplaced() const
     264{
     265    return isRenderElement() && toRenderElement(this)->isRenderReplaced();
     266}
     267
     268inline bool RenderObject::isRenderInline() const
     269{
     270    return isRenderElement() && toRenderElement(this)->isRenderInline();
     271}
    194272
    195273inline RenderStyle* RenderObject::style() const
Note: See TracChangeset for help on using the changeset viewer.