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

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: Tidy up rare data creation Created 6 years, 7 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..8d3cb74b95d525c2638c5d367556aa5070209657 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,32 @@ NodeRareData& Node::ensureRareData()
if (hasRareData())
return *rareData();
- NodeRareData* data;
if (isElementNode())
- data = ElementRareData::create(m_data.m_renderer).leakPtr();
+ m_data.m_rareData = ElementRareData::create(m_data.m_renderer);
else
- data = NodeRareData::create(m_data.m_renderer).leakPtr();
- ASSERT(data);
+ m_data.m_rareData = NodeRareData::create(m_data.m_renderer);
+
+ ASSERT(m_data.m_rareData);
- m_data.m_rareData = data;
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 +2571,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