diff -r 000000000000 -r 6474c204b198 js/src/jit-test/tests/saved-stacks/gc-frame-cache.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/js/src/jit-test/tests/saved-stacks/gc-frame-cache.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,76 @@ +// 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);