void nsReferencedElement::Traverse(nsCycleCollectionTraversalCallback* aCB) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*aCB, "mWatchDocument"); aCB->NoteXPCOMChild(mWatchDocument); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*aCB, "mContent"); aCB->NoteXPCOMChild(mElement); }
static PLDHashOperator TraverseRuleToBindingsMap(nsISupports* aKey, nsXMLBindingSet* aMatch, void* aContext) { nsCycleCollectionTraversalCallback *cb = static_cast<nsCycleCollectionTraversalCallback*>(aContext); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*cb, "mRuleToBindingsMap key"); cb->NoteXPCOMChild(aKey); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*cb, "mRuleToBindingsMap value"); cb->NoteNativeChild(aMatch, &NS_CYCLE_COLLECTION_NAME(nsXMLBindingSet)); return PL_DHASH_NEXT; }
void nsSelectionState::DoTraverse(nsCycleCollectionTraversalCallback &cb) { for (PRUint32 i = 0, iEnd = mArray.Length(); i < iEnd; ++i) { nsRangeStore &item = mArray[i]; NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "selection state mArray[i].startNode"); cb.NoteXPCOMChild(item.startNode); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "selection state mArray[i].endNode"); cb.NoteXPCOMChild(item.endNode); } }
NS_CYCLE_COLLECTION_CLASSNAME(nsXPCWrappedJS)::Traverse (void *p, nsCycleCollectionTraversalCallback &cb) { nsISupports *s = static_cast<nsISupports*>(p); NS_ASSERTION(CheckForRightISupports(s), "not the nsISupports pointer we expect"); nsXPCWrappedJS *tmp = Downcast(s); nsrefcnt refcnt = tmp->mRefCnt.get(); if (cb.WantDebugInfo()) { char name[72]; if (tmp->GetClass()) JS_snprintf(name, sizeof(name), "nsXPCWrappedJS (%s)", tmp->GetClass()->GetInterfaceName()); else JS_snprintf(name, sizeof(name), "nsXPCWrappedJS"); cb.DescribeRefCountedNode(refcnt, sizeof(nsXPCWrappedJS), name); } else { NS_IMPL_CYCLE_COLLECTION_DESCRIBE(nsXPCWrappedJS, refcnt) } // nsXPCWrappedJS keeps its own refcount artificially at or above 1, see the // comment above nsXPCWrappedJS::AddRef. NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "self"); cb.NoteXPCOMChild(s); if (refcnt > 1) { // nsXPCWrappedJS roots its mJSObj when its refcount is > 1, see // the comment above nsXPCWrappedJS::AddRef. NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mJSObj"); cb.NoteScriptChild(nsIProgrammingLanguage::JAVASCRIPT, tmp->GetJSObjectPreserveColor()); } nsXPCWrappedJS* root = tmp->GetRootWrapper(); if (root == tmp) { // The root wrapper keeps the aggregated native object alive. NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "aggregated native"); cb.NoteXPCOMChild(tmp->GetAggregatedNativeObject()); } else { // Non-root wrappers keep their root alive. NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "root"); cb.NoteXPCOMChild(static_cast<nsIXPConnectWrappedJS*>(root)); } return NS_OK; }
static void NoteChild(void *aScriptThing, const char *name, void *aClosure) { nsCycleCollectionTraversalCallback *cb = static_cast<nsCycleCollectionTraversalCallback*>(aClosure); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*cb, name); cb->NoteJSChild(aScriptThing); }
// Cycle-collection support void nsSMILCompositor::Traverse(nsCycleCollectionTraversalCallback* aCallback) { if (!mKey.mElement) return; NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*aCallback, "Compositor mKey.mElement"); aCallback->NoteXPCOMChild(mKey.mElement); }
void nsSMILTimeContainer::Traverse(nsCycleCollectionTraversalCallback* aCallback) { const MilestoneEntry* p = mMilestoneEntries.Elements(); while (p < mMilestoneEntries.Elements() + mMilestoneEntries.Length()) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*aCallback, "mTimebase"); aCallback->NoteXPCOMChild(p->mTimebase.get()); ++p; } }
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(HTMLOptionsCollection) { uint32_t i; for (i = 0; i < tmp->mElements.Length(); ++i) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mElements[i]"); cb.NoteXPCOMChild(static_cast<Element*>(tmp->mElements[i])); } }
static void TraverseElements(nsCycleCollectionTraversalCallback& cb, const nsTArray<T>& array, const char* name) { for (uint32_t i = 0, length = array.Length(); i < length; ++i) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, name); AudioNode* node = array[i].get(); cb.NoteXPCOMChild(node); } }
void nsTransactionStack::DoTraverse(nsCycleCollectionTraversalCallback &cb) { for (PRInt32 i = 0, qcount = mQue.GetSize(); i < qcount; ++i) { nsTransactionItem *item = static_cast<nsTransactionItem*>(mQue.ObjectAt(i)); if (item) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "transaction stack mQue[i]"); cb.NoteNativeChild(item, &NS_CYCLE_COLLECTION_NAME(nsTransactionItem)); } } }
void nsTransactionStack::DoTraverse(nsCycleCollectionTraversalCallback &cb) { int32_t size = GetSize(); for (int32_t i = 0; i < size; ++i) { nsTransactionItem* item = static_cast<nsTransactionItem*>(nsDeque::ObjectAt(i)); if (item) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "transaction stack mDeque[i]"); cb.NoteNativeChild(item, NS_CYCLE_COLLECTION_PARTICIPANT(nsTransactionItem)); } } }
void nsSMILTimeContainer::Traverse(nsCycleCollectionTraversalCallback* aCallback) { AutoRestore<bool> saveHolding(mHoldingEntries); mHoldingEntries = true; const MilestoneEntry* p = mMilestoneEntries.Elements(); while (p < mMilestoneEntries.Elements() + mMilestoneEntries.Length()) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*aCallback, "mTimebase"); aCallback->NoteXPCOMChild(static_cast<nsIContent*>(p->mTimebase.get())); ++p; } }
static PLDHashOperator TraverseKey(nsISupports* aKey, nsInsertionPointList* aData, void* aClosure) { nsCycleCollectionTraversalCallback &cb = *static_cast<nsCycleCollectionTraversalCallback*>(aClosure); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mInsertionPointTable key"); cb.NoteXPCOMChild(aKey); if (aData) { NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSTARRAY(*aData, nsXBLInsertionPoint, "mInsertionPointTable value") } return PL_DHASH_NEXT; }
void CustomElementData::Traverse(nsCycleCollectionTraversalCallback& aCb) const { for (uint32_t i = 0; i < mReactionQueue.Length(); i++) { if (mReactionQueue[i]) { mReactionQueue[i]->Traverse(aCb); } } if (mCustomElementDefinition) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(aCb, "mCustomElementDefinition"); aCb.NoteNativeChild(mCustomElementDefinition, NS_CYCLE_COLLECTION_PARTICIPANT(CustomElementDefinition)); } }
void nsScriptObjectTracer::NoteJSChild(JS::GCCellPtr aGCThing, const char* aName, void* aClosure) { nsCycleCollectionTraversalCallback* cb = static_cast<nsCycleCollectionTraversalCallback*>(aClosure); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*cb, aName); if (aGCThing.is<JSObject>()) { cb->NoteJSObject(&aGCThing.as<JSObject>()); } else if (aGCThing.is<JSScript>()) { cb->NoteJSScript(&aGCThing.as<JSScript>()); } else { MOZ_ASSERT(!mozilla::AddToCCKind(aGCThing.kind())); } }
void nsHostObjectProtocolHandler::Traverse(const nsACString& aUri, nsCycleCollectionTraversalCallback& aCallback) { if (!gDataTable) { return; } DataInfo* res; gDataTable->Get(aUri, &res); if (!res) { return; } NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(aCallback, "HostObjectProtocolHandler DataInfo.mObject"); aCallback.NoteXPCOMChild(res->mObject); }