summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/gc/incremental-compacting.js
blob: f051cf60ea971114e3fabcadfc0667587b2829ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// |jit-test| skip-if: !("gcstate" in this && "gczeal" in this)

// Exercise incremental compacting GC
// Run with MOZ_GCTIMER to see the timings

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() !== "NotActive")
        gc();

    startgc(sliceCount, "shrinking");
    while (gcstate() !== "NotActive") {
        gcslice(sliceCount);
    }

    return zones;
}

testCompacting(1, 100000, 100000);
testCompacting(2, 100000, 100000);
testCompacting(4, 50000,  100000);
testCompacting(2, 100000, 50000);