void Statistics::beginSlice(JSCompartment *comp, gcreason::Reason reason) { compartment = comp; bool first = runtime->gcIncrementalState == gc::NO_INCREMENTAL; if (first) beginGC(); SliceData data(reason, PRMJ_Now()); (void) slices.append(data); /* Ignore any OOMs here. */ if (JSAccumulateTelemetryDataCallback cb = runtime->telemetryCallback) (*cb)(JS_TELEMETRY_GC_REASON, reason); if (GCSliceCallback cb = runtime->gcSliceCallback) (*cb)(runtime, first ? GC_CYCLE_BEGIN : GC_SLICE_BEGIN, GCDescription(!!compartment)); }
void Statistics::beginSlice(int collectedCount, int compartmentCount, gcreason::Reason reason) { this->collectedCount = collectedCount; this->compartmentCount = compartmentCount; bool first = runtime->gcIncrementalState == gc::NO_INCREMENTAL; if (first) beginGC(); SliceData data(reason, PRMJ_Now(), gc::GetPageFaultCount()); (void) slices.append(data); /* Ignore any OOMs here. */ if (JSAccumulateTelemetryDataCallback cb = runtime->telemetryCallback) (*cb)(JS_TELEMETRY_GC_REASON, reason); // Slice callbacks should only fire for the outermost level if (++gcDepth == 1) { bool wasFullGC = collectedCount == compartmentCount; if (GCSliceCallback cb = runtime->gcSliceCallback) (*cb)(runtime, first ? GC_CYCLE_BEGIN : GC_SLICE_BEGIN, GCDescription(!wasFullGC)); } }