mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-15 08:53:07 +09:00
Issue #2678 - Avoid QIing for NoteXPCOMRoot.
This callback is only used in very limited ways, so just require that the caller passes in the canonical supports pointer plus the participant. This probably won't affect performance much.
This commit is contained in:
parent
0121aefb61
commit
38daeffb9b
3 changed files with 13 additions and 9 deletions
|
|
@ -629,11 +629,12 @@ XPCJSContext::TraverseAdditionalNativeRoots(nsCycleCollectionNoteRootCallback& c
|
|||
if (val.isObject() && !JS::ObjectIsMarkedGray(&val.toObject()))
|
||||
continue;
|
||||
}
|
||||
cb.NoteXPCOMRoot(v);
|
||||
cb.NoteXPCOMRoot(v, XPCTraceableVariant::NS_CYCLE_COLLECTION_INNERCLASS::GetParticipant());
|
||||
}
|
||||
|
||||
for (XPCRootSetElem* e = mWrappedJSRoots; e ; e = e->GetNextRoot()) {
|
||||
cb.NoteXPCOMRoot(ToSupports(static_cast<nsXPCWrappedJS*>(e)));
|
||||
cb.NoteXPCOMRoot(ToSupports(static_cast<nsXPCWrappedJS*>(e)),
|
||||
nsXPCWrappedJS::NS_CYCLE_COLLECTION_INNERCLASS::GetParticipant());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2088,7 +2088,7 @@ private:
|
|||
|
||||
public:
|
||||
// nsCycleCollectionNoteRootCallback methods.
|
||||
NS_IMETHOD_(void) NoteXPCOMRoot(nsISupports* aRoot);
|
||||
NS_IMETHOD_(void) NoteXPCOMRoot(nsISupports* aRoot, nsCycleCollectionParticipant* aParticipant);
|
||||
NS_IMETHOD_(void) NoteJSRoot(JSObject* aRoot);
|
||||
NS_IMETHOD_(void) NoteNativeRoot(void* aRoot,
|
||||
nsCycleCollectionParticipant* aParticipant);
|
||||
|
|
@ -2281,16 +2281,17 @@ CCGraphBuilder::BuildGraph(SliceBudget& aBudget)
|
|||
}
|
||||
|
||||
NS_IMETHODIMP_(void)
|
||||
CCGraphBuilder::NoteXPCOMRoot(nsISupports* aRoot)
|
||||
CCGraphBuilder::NoteXPCOMRoot(nsISupports* aRoot, nsCycleCollectionParticipant* aParticipant)
|
||||
{
|
||||
aRoot = CanonicalizeXPCOMParticipant(aRoot);
|
||||
NS_ASSERTION(aRoot,
|
||||
"Don't add objects that don't participate in collection!");
|
||||
MOZ_ASSERT(aRoot == CanonicalizeXPCOMParticipant(aRoot));
|
||||
|
||||
#ifdef DEBUG
|
||||
nsXPCOMCycleCollectionParticipant* cp;
|
||||
ToParticipant(aRoot, &cp);
|
||||
MOZ_ASSERT(aParticipant == cp);
|
||||
#endif
|
||||
|
||||
NoteRoot(aRoot, cp);
|
||||
NoteRoot(aRoot, aParticipant);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(void)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,9 @@ class nsISupports;
|
|||
class nsCycleCollectionNoteRootCallback
|
||||
{
|
||||
public:
|
||||
NS_IMETHOD_(void) NoteXPCOMRoot(nsISupports* aRoot) = 0;
|
||||
// aRoot must be canonical (ie the result of QIing to nsCycleCollectionISupports).
|
||||
NS_IMETHOD_(void) NoteXPCOMRoot(nsISupports* aRoot,
|
||||
nsCycleCollectionParticipant* aParticipant) = 0;
|
||||
NS_IMETHOD_(void) NoteJSRoot(JSObject* aRoot) = 0;
|
||||
NS_IMETHOD_(void) NoteNativeRoot(void* aRoot,
|
||||
nsCycleCollectionParticipant* aParticipant) = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue