Changeset 139833 in webkit


Ignore:
Timestamp:
Jan 15, 2013 9:23:04 PM (11 years ago)
Author:
rniwa@webkit.org
Message:

NodeRareData doesn't need to have a vtable pointer
https://bugs.webkit.org/show_bug.cgi?id=106965

Reviewed by Benjamin Poulain.

Made the destructor and reportMemoryUsage of NodeRareDataBase and NodeRareData
respectively and their subclasses non-virtual.

  • dom/ElementRareData.cpp:

(SameSizeAsElementRareData): Added.
(WebCore): Added a compile assertion for the size of ElementRareData.

  • dom/ElementRareData.h:

(ElementRareData):

  • dom/Node.cpp:

(WebCore::Node::clearRareData): Explicitely delete NodeRareData or ElementRareData.
(WebCore::Node::reportMemoryUsage): Explicitely add NodeRareData or ElementRareData.

  • dom/Node.h:

(NodeRareDataBase): Deleted the virtual destructor.

  • dom/NodeRareData.cpp:

(SameSizeAsNodeRareData): Removed one pointer.

  • dom/NodeRareData.h:

(NodeRareData): Removed the virtual destructor.
(NodeRareData::reportMemoryUsage): Made non-virtual.

Location:
trunk/Source/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r139829 r139833  
     12013-01-15  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        NodeRareData doesn't need to have a vtable pointer
     4        https://bugs.webkit.org/show_bug.cgi?id=106965
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Made the destructor and reportMemoryUsage of NodeRareDataBase and NodeRareData
     9        respectively and their subclasses non-virtual.
     10
     11        * dom/ElementRareData.cpp:
     12        (SameSizeAsElementRareData): Added.
     13        (WebCore): Added a compile assertion for the size of ElementRareData.
     14        * dom/ElementRareData.h:
     15        (ElementRareData):
     16        * dom/Node.cpp:
     17        (WebCore::Node::clearRareData): Explicitely delete NodeRareData or ElementRareData.
     18        (WebCore::Node::reportMemoryUsage): Explicitely add NodeRareData or ElementRareData.
     19        * dom/Node.h:
     20        (NodeRareDataBase): Deleted the virtual destructor.
     21        * dom/NodeRareData.cpp:
     22        (SameSizeAsNodeRareData): Removed one pointer.
     23        * dom/NodeRareData.h:
     24        (NodeRareData): Removed the virtual destructor.
     25        (NodeRareData::reportMemoryUsage): Made non-virtual.
     26
    1272013-01-15  Ian Vollick  <vollick@chromium.org>
    228
  • trunk/Source/WebCore/dom/ElementRareData.cpp

    r139192 r139833  
    3737namespace WebCore {
    3838
     39struct SameSizeAsElementRareData : NodeRareData {
     40    short indices[2];
     41    unsigned bitfields;
     42    LayoutSize sizeForResizing;
     43    IntSize scrollOffset;
     44    void* pointers[7];
     45};
     46
     47COMPILE_ASSERT(sizeof(ElementRareData) == sizeof(SameSizeAsElementRareData), ElementRareDataShouldStaySmall);
     48
    3949void ElementRareData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
    4050{
  • trunk/Source/WebCore/dom/ElementRareData.h

    r139681 r139833  
    3737public:
    3838    ElementRareData();
    39     virtual ~ElementRareData();
     39    ~ElementRareData();
    4040
    4141    void setPseudoElement(PseudoId, PassRefPtr<PseudoElement>);
     
    9595    void setChildIndex(unsigned index) { m_childIndex = index; }
    9696
    97     virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
     97    // Manually called by Node::reportMemoryUsage.
     98    void reportMemoryUsage(MemoryObjectInfo*) const;
    9899
    99100    ElementShadow* shadow() const { return m_shadow.get(); }
     
    161162
    162163    LayoutSize m_minimumSizeForResizing;
     164    IntSize m_savedLayerScrollOffset;
    163165    RefPtr<RenderStyle> m_computedStyle;
    164166
     
    171173    RefPtr<PseudoElement> m_generatedAfter;
    172174
    173     IntSize m_savedLayerScrollOffset;
    174 
    175 private:
    176175    void releasePseudoElement(PseudoElement*);
    177176};
  • trunk/Source/WebCore/dom/Node.cpp

    r139806 r139833  
    472472
    473473    RenderObject* renderer = m_data.m_rareData->renderer();
    474     delete m_data.m_rareData;
     474    if (isElementNode())
     475        delete static_cast<ElementRareData*>(m_data.m_rareData);
     476    else
     477        delete m_data.m_rareData;
    475478    m_data.m_renderer = renderer;
    476479    clearFlag(HasRareDataFlag);
     
    25822585    info.addMember(m_previous);
    25832586    info.addMember(this->renderer());
    2584     if (hasRareData())
    2585         info.addMember(rareData());
     2587    if (hasRareData()) {
     2588        if (isElementNode())
     2589            info.addMember(static_cast<ElementRareData*>(rareData()));
     2590        else
     2591            info.addMember(rareData());
     2592    }
    25862593}
    25872594
  • trunk/Source/WebCore/dom/Node.h

    r139751 r139833  
    116116    void setRenderer(RenderObject* renderer) { m_renderer = renderer; }
    117117
    118     virtual ~NodeRareDataBase() { }
    119118protected:
    120119    NodeRareDataBase() { }
     120
    121121private:
    122122    RenderObject* m_renderer;
  • trunk/Source/WebCore/dom/NodeRareData.cpp

    r139681 r139833  
    4040
    4141struct SameSizeAsNodeRareData {
    42     void* m_pointer[4];
     42    void* m_pointer[3];
    4343#if ENABLE(MICRODATA)
    4444    void* m_microData;
  • trunk/Source/WebCore/dom/NodeRareData.h

    r139690 r139833  
    281281    { }
    282282
    283     virtual ~NodeRareData()
    284     { }
    285 
    286283    void clearNodeLists() { m_nodeLists.clear(); }
    287284    NodeListsNodeData* nodeLists() const { return m_nodeLists.get(); }
     
    310307#endif
    311308
    312     virtual void reportMemoryUsage(MemoryObjectInfo*) const;
     309    // This member function is intentionially not virtual to avoid adding a vtable pointer.
     310    void reportMemoryUsage(MemoryObjectInfo*) const;
    313311
    314312private:
Note: See TracChangeset for help on using the changeset viewer.