Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(696)

Unified Diff: Source/core/dom/Node.cpp

Issue 265793017: Oilpan: move node/element rare data objects to the heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased + assert for Nodes having no renderer on destruction. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/dom/Node.cpp
diff --git a/Source/core/dom/Node.cpp b/Source/core/dom/Node.cpp
index 0798dda6c5b079fdd35680c844fb3a3dd533d867..1fe3197c7e1c419b2a478832e7cd38b93e97b590 100644
--- a/Source/core/dom/Node.cpp
+++ b/Source/core/dom/Node.cpp
@@ -266,14 +266,18 @@ Node::~Node()
liveNodeSet.remove(this);
#endif
+#if !ENABLE(OILPAN)
if (hasRareData())
clearRareData();
RELEASE_ASSERT(!renderer());
-#if !ENABLE(OILPAN)
if (!isContainerNode())
willBeDeletedFromDocument();
+#else
+ // With Oilpan, the rare data finalizer also asserts for
+ // this condition (we cannot directly access it here.)
+ RELEASE_ASSERT(hasRareData() || !renderer());
#endif
if (m_previous)
@@ -326,36 +330,38 @@ NodeRareData& Node::ensureRareData()
if (hasRareData())
return *rareData();
- NodeRareData* data;
+ OwnPtrWillBeRawPtr<NodeRareData> data;
Erik Corry 2014/05/05 09:31:27 I can't see the point of this OwnPtr. Things woul
sof 2014/05/05 09:41:38 It minimized the #if'ery required, but I'll take a
sof 2014/05/05 13:38:58 Jumped ahead a bit and made the create() return a
if (isElementNode())
- data = ElementRareData::create(m_data.m_renderer).leakPtr();
+ data = ElementRareData::create(m_data.m_renderer);
else
- data = NodeRareData::create(m_data.m_renderer).leakPtr();
+ data = NodeRareData::create(m_data.m_renderer);
+
ASSERT(data);
+#if ENABLE(OILPAN)
m_data.m_rareData = data;
+#else
+ m_data.m_rareData = data.leakPtr();
+#endif
setFlag(HasRareDataFlag);
- return *data;
+ return *rareData();
}
+#if !ENABLE(OILPAN)
void Node::clearRareData()
{
ASSERT(hasRareData());
ASSERT(!transientMutationObserverRegistry() || transientMutationObserverRegistry()->isEmpty());
RenderObject* renderer = m_data.m_rareData->renderer();
- if (isElementNode()) {
- ElementRareData* rareData = static_cast<ElementRareData*>(m_data.m_rareData);
- rareData->dispose();
- delete rareData;
- } else {
- NodeRareData* rareData = static_cast<NodeRareData*>(m_data.m_rareData);
- rareData->dispose();
- delete rareData;
- }
+ if (isElementNode())
+ delete static_cast<ElementRareData*>(m_data.m_rareData);
+ else
+ delete static_cast<NodeRareData*>(m_data.m_rareData);
m_data.m_renderer = renderer;
clearFlag(HasRareDataFlag);
}
+#endif
Node* Node::toNode()
{
@@ -2571,6 +2577,9 @@ void Node::setCustomElementState(CustomElementState newState)
void Node::trace(Visitor* visitor)
{
+ if (hasRareData())
+ visitor->trace(rareData());
+
visitor->trace(m_treeScope);
}

Powered by Google App Engine
This is Rietveld 408576698