- 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;