bool SweepCacheAndFinishGC(JSContext* cx, const Cache& cache) { CHECK(IsIncrementalGCInProgress(cx)); PrepareForIncrementalGC(cx); IncrementalGCSlice(cx, JS::gcreason::API); JS::Zone* zone = JS::GetObjectZone(global); CHECK(!IsIncrementalGCInProgress(cx)); CHECK(!zone->isCollecting()); CHECK(!cache.needsIncrementalBarrier()); return true; }
bool GCUntilCacheSweep(JSContext *cx, const Cache& cache) { CHECK(!IsIncrementalGCInProgress(cx)); JS::Zone* zone = JS::GetObjectZone(global); JS::PrepareZoneForGC(zone); SliceBudget budget(WorkBudget(1)); cx->runtime()->gc.startDebugGC(GC_NORMAL, budget); CHECK(IsIncrementalGCInProgress(cx)); CHECK(zone->isGCSweeping()); CHECK(cache.needsIncrementalBarrier()); return true; }