void XPCJSRuntime::TraceXPConnectRoots(JSTracer *trc) { if(mClearedGlobalObjects.ops) { JSContext *iter = nsnull, *acx; while((acx = JS_ContextIterator(GetJSRuntime(), &iter))) { JSDHashEntryHdr* entry = JS_DHashTableOperate(&mClearedGlobalObjects, acx, JS_DHASH_LOOKUP); if(JS_DHASH_ENTRY_IS_BUSY(entry)) { ClearedGlobalObject* clearedGlobal = reinterpret_cast<ClearedGlobalObject*>(entry); JS_CALL_OBJECT_TRACER(trc, clearedGlobal->mGlobalObject, "global object"); } } } XPCWrappedNativeScope::TraceJS(trc, this); for(XPCRootSetElem *e = mVariantRoots; e ; e = e->GetNextRoot()) static_cast<XPCTraceableVariant*>(e)->TraceJS(trc); for(XPCRootSetElem *e = mWrappedJSRoots; e ; e = e->GetNextRoot()) static_cast<nsXPCWrappedJS*>(e)->TraceJS(trc); if(mJSHolders.ops) JS_DHashTableEnumerate(&mJSHolders, TraceJSHolder, trc); }
static PLDHashOperator TraceDOMPrototype(const char* aKey, JSObject* aData, void* aClosure) { JSTracer *trc = static_cast<JSTracer*>(aClosure); JS_CALL_OBJECT_TRACER(trc, aData, "DOM prototype"); return PL_DHASH_NEXT; }
void AutoGCRooter::Trace(JSTracer* trc) { if (m_Previous) m_Previous->Trace(trc); for (size_t i = 0; i < m_Objects.size(); ++i) { JS_CALL_OBJECT_TRACER(trc, m_Objects[i], "AutoGCRooter object"); } for (size_t i = 0; i < m_Vals.size(); ++i) { JS_CALL_VALUE_TRACER(trc, m_Vals[i], "AutoGCRooter val"); } for (size_t i = 0; i < m_IdArrays.size(); ++i) { for (jsint j = 0; j < m_IdArrays[i]->length; ++j) { jsval val = JSVAL_VOID; JS_IdToValue(m_ScriptInterface.GetContext(), m_IdArrays[i]->vector[j], &val); JS_CALL_VALUE_TRACER(trc, val, "AutoGCRooter id array"); } } }
void XMLHttpRequestUpload::_Trace(JSTracer* aTrc) { if (mXHR) { JS_CALL_OBJECT_TRACER(aTrc, mXHR->GetJSObject(), "mXHR"); } XMLHttpRequestEventTarget::_Trace(aTrc); }
static PLDHashOperator TraceActiveWindowGlobal(const uint64_t& aId, nsGlobalWindow*& aWindow, void* aClosure) { if (aWindow->GetDocShell() && aWindow->IsOuterWindow()) { if (JSObject* global = aWindow->FastGetGlobalJSObject()) { JSTracer* trc = static_cast<JSTracer *>(aClosure); JS_CALL_OBJECT_TRACER(trc, global, "active window global"); } } return PL_DHASH_NEXT; }
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY NS_INTERFACE_MAP_END void DOMBindingBase::_trace(JSTracer* aTrc) { JSObject* obj = GetJSObject(); if (obj) { JS_CALL_OBJECT_TRACER(aTrc, obj, "cached wrapper"); } }
static JSDHashOperator WrappedNativeJSGCThingTracer(JSDHashTable *table, JSDHashEntryHdr *hdr, uint32_t number, void *arg) { XPCWrappedNative* wrapper = ((Native2WrappedNativeMap::Entry*)hdr)->value; if (wrapper->HasExternalReference() && !wrapper->IsWrapperExpired()) { JSTracer* trc = (JSTracer *)arg; JS_CALL_OBJECT_TRACER(trc, wrapper->GetFlatJSObjectPreserveColor(), "XPCWrappedNative::mFlatJSObject"); } return JS_DHASH_NEXT; }
void gjs_closure_trace(GClosure *closure, JSTracer *tracer) { Closure *c; c = (Closure*) closure; if (c->obj == NULL) return; JS_CALL_OBJECT_TRACER(tracer, c->obj, "signal connection"); }
void XPCJSRuntime::TraceXPConnectRoots(JSTracer *trc) { JSContext *iter = nsnull, *acx; while ((acx = JS_ContextIterator(GetJSRuntime(), &iter))) { JS_ASSERT(JS_HAS_OPTION(acx, JSOPTION_UNROOTED_GLOBAL)); if (acx->globalObject) JS_CALL_OBJECT_TRACER(trc, acx->globalObject, "global object"); } XPCWrappedNativeScope::TraceJS(trc, this); for(XPCRootSetElem *e = mVariantRoots; e ; e = e->GetNextRoot()) static_cast<XPCTraceableVariant*>(e)->TraceJS(trc); for(XPCRootSetElem *e = mWrappedJSRoots; e ; e = e->GetNextRoot()) static_cast<nsXPCWrappedJS*>(e)->TraceJS(trc); if(mJSHolders.ops) JS_DHashTableEnumerate(&mJSHolders, TraceJSHolder, trc); }
void XPCJSRuntime::TraceXPConnectRoots(JSTracer *trc, JSBool rootGlobals) { if(mUnrootedGlobalCount != 0) { JSContext *iter = nsnull, *acx; while((acx = JS_ContextIterator(GetJSRuntime(), &iter))) { if(JS_HAS_OPTION(acx, JSOPTION_UNROOTED_GLOBAL)) { NS_ASSERTION(nsXPConnect::GetXPConnect()->GetRequestDepth(acx) == 0, "active cx must be always rooted"); NS_ASSERTION(acx->globalObject, "bad state"); JS_CALL_OBJECT_TRACER(trc, acx->globalObject, "global object"); if(rootGlobals) { NS_ASSERTION(mUnrootedGlobalCount != 0, "bad state"); NS_ASSERTION(trc == acx->runtime->gcMarkingTracer, "bad tracer"); JS_ToggleOptions(acx, JSOPTION_UNROOTED_GLOBAL); --mUnrootedGlobalCount; } } } } XPCWrappedNativeScope::TraceJS(trc, this); for(XPCRootSetElem *e = mVariantRoots; e ; e = e->GetNextRoot()) static_cast<XPCTraceableVariant*>(e)->TraceJS(trc); for(XPCRootSetElem *e = mWrappedJSRoots; e ; e = e->GetNextRoot()) static_cast<nsXPCWrappedJS*>(e)->TraceJS(trc); if(mJSHolders.ops) JS_DHashTableEnumerate(&mJSHolders, TraceJSHolder, trc); }