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
|
||||
|
||||
#ifdef DEBUG
|
||||
JS_FRIEND_API JS::Zone* js::GetObjectZoneFromAnyThread(JSObject* obj) {
|
||||
return MaybeForwarded(obj)->zoneFromAnyThread();
|
||||
}
|
||||
#endif
|
||||
|
@ -2693,9 +2693,7 @@ extern JS_FRIEND_API void SetPerformanceHint(JSContext* cx,
|
||||
|
||||
} /* namespace gc */
|
||||
|
||||
#ifdef DEBUG
|
||||
extern JS_FRIEND_API JS::Zone* GetObjectZoneFromAnyThread(JSObject* obj);
|
||||
#endif
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
|
@ -1070,7 +1070,11 @@ void mozilla::TraceScriptHolder(nsISupports* aHolder, JSTracer* 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
|
||||
// JS::Zone.
|
||||
@ -1177,6 +1181,15 @@ static inline void CheckHolderIsSingleZone(
|
||||
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
|
||||
|
||||
void CycleCollectedJSRuntime::TraceNativeGrayRoots(JSTracer* aTracer) {
|
||||
@ -1184,9 +1197,14 @@ void CycleCollectedJSRuntime::TraceNativeGrayRoots(JSTracer* aTracer) {
|
||||
// would hurt to do this after the JS holders.
|
||||
TraceAdditionalNativeGrayRoots(aTracer);
|
||||
|
||||
mJSHolders.ForEach([aTracer](void* holder, nsScriptObjectTracer* tracer) {
|
||||
#ifdef DEBUG
|
||||
if (!tracer->IsMultiZoneJSHolder()) {
|
||||
#ifdef CHECK_SINGLE_ZONE_JS_HOLDERS
|
||||
bool checkSingleZoneHolders = ShouldCheckSingleZoneHolders();
|
||||
#endif
|
||||
|
||||
mJSHolders.ForEach([aTracer, checkSingleZoneHolders](
|
||||
void* holder, nsScriptObjectTracer* tracer) {
|
||||
#ifdef CHECK_SINGLE_ZONE_JS_HOLDERS
|
||||
if (checkSingleZoneHolders && !tracer->IsMultiZoneJSHolder()) {
|
||||
CheckHolderIsSingleZone(holder, tracer);
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user