js/src/jit-test/tests/gc/incremental-state.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/jit-test/tests/gc/incremental-state.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,47 @@
     1.4 +/*
     1.5 + * Test expected state changes during collection.
     1.6 + */
     1.7 +
     1.8 +if ("gcstate" in this) {
     1.9 +    assertEq(gcstate(), "none");
    1.10 +
    1.11 +    /* Non-incremental GC. */
    1.12 +    gc();
    1.13 +    assertEq(gcstate(), "none");
    1.14 +
    1.15 +    /* Incremental GC in one slice. */
    1.16 +    gcslice(1000000);
    1.17 +    assertEq(gcstate(), "none");
    1.18 +
    1.19 +    /* 
    1.20 +     * Incremental GC in multiple slices: if marking takes more than one slice,
    1.21 +     * we yield before we start sweeping.
    1.22 +     */
    1.23 +    gcslice(1);
    1.24 +    assertEq(gcstate(), "mark");
    1.25 +    gcslice(1000000);
    1.26 +    assertEq(gcstate(), "mark");
    1.27 +    gcslice(1000000);
    1.28 +    assertEq(gcstate(), "none");
    1.29 +
    1.30 +    /* Zeal mode 8: Incremental GC in two slices: 1) mark roots 2) finish collection. */
    1.31 +    gczeal(8);
    1.32 +    gcslice(1);
    1.33 +    assertEq(gcstate(), "mark");
    1.34 +    gcslice(1);
    1.35 +    assertEq(gcstate(), "none");
    1.36 +
    1.37 +    /* Zeal mode 9: Incremental GC in two slices: 1) mark all 2) new marking and finish. */
    1.38 +    gczeal(9);
    1.39 +    gcslice(1);
    1.40 +    assertEq(gcstate(), "mark");
    1.41 +    gcslice(1);
    1.42 +    assertEq(gcstate(), "none");
    1.43 +
    1.44 +    /* Zeal mode 10: Incremental GC in multiple slices (always yeilds before sweeping). */
    1.45 +    gczeal(10);
    1.46 +    gcslice(1000000);
    1.47 +    assertEq(gcstate(), "sweep");
    1.48 +    gcslice(1000000);
    1.49 +    assertEq(gcstate(), "none");
    1.50 +}

mercurial