Title: [139833] trunk/Source/WebCore
Revision
139833
Author
rn...@webkit.org
Date
2013-01-15 21:23:04 -0800 (Tue, 15 Jan 2013)

Log 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.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (139832 => 139833)


--- trunk/Source/WebCore/ChangeLog	2013-01-16 05:10:13 UTC (rev 139832)
+++ trunk/Source/WebCore/ChangeLog	2013-01-16 05:23:04 UTC (rev 139833)
@@ -1,3 +1,29 @@
+2013-01-15  Ryosuke Niwa  <rn...@webkit.org>
+
+        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.
+
 2013-01-15  Ian Vollick  <voll...@chromium.org>
 
         [chromium] Create GraphicsLayerChromiums using a factory

Modified: trunk/Source/WebCore/dom/ElementRareData.cpp (139832 => 139833)


--- trunk/Source/WebCore/dom/ElementRareData.cpp	2013-01-16 05:10:13 UTC (rev 139832)
+++ trunk/Source/WebCore/dom/ElementRareData.cpp	2013-01-16 05:23:04 UTC (rev 139833)
@@ -36,6 +36,16 @@
 
 namespace WebCore {
 
+struct SameSizeAsElementRareData : NodeRareData {
+    short indices[2];
+    unsigned bitfields;
+    LayoutSize sizeForResizing;
+    IntSize scrollOffset;
+    void* pointers[7];
+};
+
+COMPILE_ASSERT(sizeof(ElementRareData) == sizeof(SameSizeAsElementRareData), ElementRareDataShouldStaySmall);
+
 void ElementRareData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
     MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);

Modified: trunk/Source/WebCore/dom/ElementRareData.h (139832 => 139833)


--- trunk/Source/WebCore/dom/ElementRareData.h	2013-01-16 05:10:13 UTC (rev 139832)
+++ trunk/Source/WebCore/dom/ElementRareData.h	2013-01-16 05:23:04 UTC (rev 139833)
@@ -36,7 +36,7 @@
 class ElementRareData : public NodeRareData {
 public:
     ElementRareData();
-    virtual ~ElementRareData();
+    ~ElementRareData();
 
     void setPseudoElement(PseudoId, PassRefPtr<PseudoElement>);
     PseudoElement* pseudoElement(PseudoId) const;
@@ -94,7 +94,8 @@
     unsigned childIndex() const { return m_childIndex; }
     void setChildIndex(unsigned index) { m_childIndex = index; }
 
-    virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+    // Manually called by Node::reportMemoryUsage.
+    void reportMemoryUsage(MemoryObjectInfo*) const;
 
     ElementShadow* shadow() const { return m_shadow.get(); }
     void setShadow(PassOwnPtr<ElementShadow> shadow) { m_shadow = shadow; }
@@ -160,6 +161,7 @@
 #endif
 
     LayoutSize m_minimumSizeForResizing;
+    IntSize m_savedLayerScrollOffset;
     RefPtr<RenderStyle> m_computedStyle;
 
     OwnPtr<DatasetDOMStringMap> m_dataset;
@@ -170,9 +172,6 @@
     RefPtr<PseudoElement> m_generatedBefore;
     RefPtr<PseudoElement> m_generatedAfter;
 
-    IntSize m_savedLayerScrollOffset;
-
-private:
     void releasePseudoElement(PseudoElement*);
 };
 

Modified: trunk/Source/WebCore/dom/Node.cpp (139832 => 139833)


--- trunk/Source/WebCore/dom/Node.cpp	2013-01-16 05:10:13 UTC (rev 139832)
+++ trunk/Source/WebCore/dom/Node.cpp	2013-01-16 05:23:04 UTC (rev 139833)
@@ -471,7 +471,10 @@
     ASSERT(!transientMutationObserverRegistry() || transientMutationObserverRegistry()->isEmpty());
 
     RenderObject* renderer = m_data.m_rareData->renderer();
-    delete m_data.m_rareData;
+    if (isElementNode())
+        delete static_cast<ElementRareData*>(m_data.m_rareData);
+    else
+        delete m_data.m_rareData;
     m_data.m_renderer = renderer;
     clearFlag(HasRareDataFlag);
 }
@@ -2581,8 +2584,12 @@
     info.addMember(m_next);
     info.addMember(m_previous);
     info.addMember(this->renderer());
-    if (hasRareData())
-        info.addMember(rareData());
+    if (hasRareData()) {
+        if (isElementNode())
+            info.addMember(static_cast<ElementRareData*>(rareData()));
+        else
+            info.addMember(rareData());
+    }
 }
 
 void Node::textRects(Vector<IntRect>& rects) const

Modified: trunk/Source/WebCore/dom/Node.h (139832 => 139833)


--- trunk/Source/WebCore/dom/Node.h	2013-01-16 05:10:13 UTC (rev 139832)
+++ trunk/Source/WebCore/dom/Node.h	2013-01-16 05:23:04 UTC (rev 139833)
@@ -115,9 +115,9 @@
     RenderObject* renderer() const { return m_renderer; }
     void setRenderer(RenderObject* renderer) { m_renderer = renderer; }
 
-    virtual ~NodeRareDataBase() { }
 protected:
     NodeRareDataBase() { }
+
 private:
     RenderObject* m_renderer;
 };

Modified: trunk/Source/WebCore/dom/NodeRareData.cpp (139832 => 139833)


--- trunk/Source/WebCore/dom/NodeRareData.cpp	2013-01-16 05:10:13 UTC (rev 139832)
+++ trunk/Source/WebCore/dom/NodeRareData.cpp	2013-01-16 05:23:04 UTC (rev 139833)
@@ -39,7 +39,7 @@
 namespace WebCore {
 
 struct SameSizeAsNodeRareData {
-    void* m_pointer[4];
+    void* m_pointer[3];
 #if ENABLE(MICRODATA)
     void* m_microData;
 #endif

Modified: trunk/Source/WebCore/dom/NodeRareData.h (139832 => 139833)


--- trunk/Source/WebCore/dom/NodeRareData.h	2013-01-16 05:10:13 UTC (rev 139832)
+++ trunk/Source/WebCore/dom/NodeRareData.h	2013-01-16 05:23:04 UTC (rev 139833)
@@ -280,9 +280,6 @@
     NodeRareData()
     { }
 
-    virtual ~NodeRareData()
-    { }
-
     void clearNodeLists() { m_nodeLists.clear(); }
     NodeListsNodeData* nodeLists() const { return m_nodeLists.get(); }
     NodeListsNodeData* ensureNodeLists()
@@ -309,7 +306,8 @@
     }
 #endif
 
-    virtual void reportMemoryUsage(MemoryObjectInfo*) const;
+    // This member function is intentionially not virtual to avoid adding a vtable pointer.
+    void reportMemoryUsage(MemoryObjectInfo*) const;
 
 private:
     OwnPtr<NodeListsNodeData> m_nodeLists;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to