mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 15:25:52 +00:00
Bug 1628371 - Check whether JS holders are single-zone in nightly builds too r=mccr8
Differential Revision: https://phabricator.services.mozilla.com/D70220 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
11b739d096
commit
11fc44d6aa
@ -1465,8 +1465,6 @@ bool js::AddListFormatConstructor(JSContext* cx, JS::HandleObject intl) {
|
|||||||
|
|
||||||
#endif // !JS_HAS_INTL_API
|
#endif // !JS_HAS_INTL_API
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
JS_FRIEND_API JS::Zone* js::GetObjectZoneFromAnyThread(JSObject* obj) {
|
JS_FRIEND_API JS::Zone* js::GetObjectZoneFromAnyThread(JSObject* obj) {
|
||||||
return MaybeForwarded(obj)->zoneFromAnyThread();
|
return MaybeForwarded(obj)->zoneFromAnyThread();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
@ -2693,9 +2693,7 @@ extern JS_FRIEND_API void SetPerformanceHint(JSContext* cx,
|
|||||||
|
|
||||||
} /* namespace gc */
|
} /* namespace gc */
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
extern JS_FRIEND_API JS::Zone* GetObjectZoneFromAnyThread(JSObject* obj);
|
extern JS_FRIEND_API JS::Zone* GetObjectZoneFromAnyThread(JSObject* obj);
|
||||||
#endif
|
|
||||||
|
|
||||||
} /* namespace js */
|
} /* namespace js */
|
||||||
|
|
||||||
|
@ -1070,7 +1070,11 @@ void mozilla::TraceScriptHolder(nsISupports* aHolder, JSTracer* aTracer) {
|
|||||||
participant->Trace(aHolder, JsGcTracer(), aTracer);
|
participant->Trace(aHolder, JsGcTracer(), aTracer);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#if defined(NIGHTLY_BUILD) || defined(MOZ_DEV_EDITION) || defined(DEBUG)
|
||||||
|
# define CHECK_SINGLE_ZONE_JS_HOLDERS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CHECK_SINGLE_ZONE_JS_HOLDERS
|
||||||
|
|
||||||
// A tracer that checks that a JS holder only holds JS GC things in a single
|
// A tracer that checks that a JS holder only holds JS GC things in a single
|
||||||
// JS::Zone.
|
// JS::Zone.
|
||||||
@ -1177,6 +1181,15 @@ static inline void CheckHolderIsSingleZone(
|
|||||||
aParticipant->Trace(aHolder, tracer, nullptr);
|
aParticipant->Trace(aHolder, tracer, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool ShouldCheckSingleZoneHolders() {
|
||||||
|
# ifdef DEBUG
|
||||||
|
return true;
|
||||||
|
# else
|
||||||
|
// Don't check every time to avoid performance impact.
|
||||||
|
return rand() % 256 == 0;
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void CycleCollectedJSRuntime::TraceNativeGrayRoots(JSTracer* aTracer) {
|
void CycleCollectedJSRuntime::TraceNativeGrayRoots(JSTracer* aTracer) {
|
||||||
@ -1184,9 +1197,14 @@ void CycleCollectedJSRuntime::TraceNativeGrayRoots(JSTracer* aTracer) {
|
|||||||
// would hurt to do this after the JS holders.
|
// would hurt to do this after the JS holders.
|
||||||
TraceAdditionalNativeGrayRoots(aTracer);
|
TraceAdditionalNativeGrayRoots(aTracer);
|
||||||
|
|
||||||
mJSHolders.ForEach([aTracer](void* holder, nsScriptObjectTracer* tracer) {
|
#ifdef CHECK_SINGLE_ZONE_JS_HOLDERS
|
||||||
#ifdef DEBUG
|
bool checkSingleZoneHolders = ShouldCheckSingleZoneHolders();
|
||||||
if (!tracer->IsMultiZoneJSHolder()) {
|
#endif
|
||||||
|
|
||||||
|
mJSHolders.ForEach([aTracer, checkSingleZoneHolders](
|
||||||
|
void* holder, nsScriptObjectTracer* tracer) {
|
||||||
|
#ifdef CHECK_SINGLE_ZONE_JS_HOLDERS
|
||||||
|
if (checkSingleZoneHolders && !tracer->IsMultiZoneJSHolder()) {
|
||||||
CheckHolderIsSingleZone(holder, tracer);
|
CheckHolderIsSingleZone(holder, tracer);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user