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 +}