Example #1
0
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;
}
Example #2
0
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;
}