void SamplerApollo::unregisterNode(WTF::PassRefPtr<BaseSamplerNode> node) { ASSERT(node.get()); // invalidate the cached node if it is going to be deleted if (m_cachedSearchNode.get() == node.get()) m_cachedSearchNode.clear(); m_liveNodes.remove(node->ptr()); m_liveNodesByIdentifier.remove(node->identifier()); #if !ENABLE(JIT) // the references from RefPtr ASSERT(node->hasOneRef()); #endif // when sampling is stopped don't bother to keep the dead object. if (samplerWillDeallocate(node.get())) { WTF::PassRefPtr<DeadSamplerNode> deadNode = DeadSamplerNode::createWithDataFrom(node.get()); ASSERT(deadNode->hasOneRef()); m_deadNodesByIdentifier.add(node->identifier(), deadNode.get()); } #if ENABLE(JIT) node->clearPtr(); #endif }
bool SamplerApollo::registerNode(WTF::PassRefPtr<BaseSamplerNode> node) { if (UNLIKELY(!samplingNow)) return false; // check if the object was allocated earlier or if maybe the old object // didn't trigger deallocation ASSERT(getSamplerNodeFor(node->ptr()) == 0); const uint64_t identifier = samplerDidAllocate(node.get()); if (identifier) { node->setIdentifier(identifier); m_liveNodes.add(node->ptr(), node.get()); m_liveNodesByIdentifier.add(node->identifier(), node.get()); // the references from liveNodes maps + pass ref ptr ASSERT(node->refCount() == 3); return true; } return false; }