Files
tubestation/js/src/jit-test/tests/saved-stacks/gc-frame-cache.js

77 lines
1.8 KiB
JavaScript

// Test that SavedFrame instances get removed from the SavedStacks frames cache
// after a GC.
const FUZZ_FACTOR = 3;
function assertAboutEq(actual, expected) {
if (Math.abs(actual - expected) > FUZZ_FACTOR)
throw new Error("Assertion failed: expected about " + expected + ", got " + actual +
". FUZZ_FACTOR = " + FUZZ_FACTOR);
}
const stacks = [];
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
stacks.push(saveStack());
assertAboutEq(getSavedFrameCount(), 50);
while (stacks.length) {
stacks.pop();
}
gc();
stacks = null;
gc();
assertAboutEq(getSavedFrameCount(), 0);