blob: bb367b0f8bf3711f902e6964a9177940f6e6405d [file] [log] [blame]
// Exercise incremental compacting GC
// Run with MOZ_GCTIMER to see the timings
if (!("gcstate" in this && "gczeal" in this))
quit();
gczeal(0);
function testCompacting(zoneCount, objectCount, sliceCount)
{
// Allocate objectCount objects in zoneCount zones
// On linux64 debug builds we will move them all
// Run compacting GC with multiple slices
var zones = [];
for (var i = 0; i < zoneCount; i++) {
var zone = newGlobal();
evaluate("var objects; " +
"function makeObjectGraph(objectCount) { " +
" objects = []; " +
" for (var i = 0; i < objectCount; i++) " +
" objects.push({ serial: i }); " +
"}",
{ global: zone });
zone.makeObjectGraph(objectCount);
zones.push(zone);
}
// Finish any alloc-triggered incremental GC
if (gcstate() !== "none")
gc();
startgc(sliceCount, "shrinking");
while (gcstate() !== "none") {
gcslice(sliceCount);
}
return zones;
}
testCompacting(1, 100000, 100000);
testCompacting(2, 100000, 100000);
testCompacting(4, 50000, 100000);
testCompacting(2, 100000, 50000);