6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test LockCompilationTest
26 * @bug 8059624
27 * @library /testlibrary /test/lib /
28 * @modules java.management
29 * @build LockCompilationTest
30 * @run main ClassFileInstaller sun.hotspot.WhiteBox
31 * sun.hotspot.WhiteBox$WhiteBoxPermission
32 * @run main/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI LockCompilationTest
33 * @summary testing of WB::lock/unlockCompilation()
34 */
35
36 import java.io.OutputStream;
37 import java.io.PrintWriter;
38 import java.util.concurrent.BrokenBarrierException;
39 import java.util.concurrent.CyclicBarrier;
40
41 import compiler.whitebox.CompilerWhiteBoxTest;
42 import jdk.test.lib.Asserts;
43
44 public class LockCompilationTest extends CompilerWhiteBoxTest {
45 public static void main(String[] args) throws Exception {
46 // This case waits for 10 seconds and verifies that the method hasn't been
47 // compiled during that time. Only do that for one of the test cases.
48 CompilerWhiteBoxTest.main(LockCompilationTest::new, new String[] {"METHOD_TEST"});
49 }
50
51 private LockCompilationTest(TestCase testCase) {
52 super(testCase);
53 // to prevent inlining of #method
54 WHITE_BOX.testSetDontInlineMethod(method, true);
55 }
56
57 protected void test() throws Exception {
58 checkNotCompiled();
59
60 System.out.println("locking compilation");
61 WHITE_BOX.lockCompilation();
62
63 try {
64 System.out.println("trying to compile");
65 compile();
66 // to check if it works correctly w/ safepoints
67 System.out.println("going to safepoint");
68 WHITE_BOX.fullGC();
69 waitBackgroundCompilation();
70 Asserts.assertTrue(
71 WHITE_BOX.isMethodQueuedForCompilation(method),
72 method + " must be in queue");
73 Asserts.assertFalse(
74 WHITE_BOX.isMethodCompiled(method, false),
75 method + " must be not compiled");
76 Asserts.assertEQ(
77 WHITE_BOX.getMethodCompilationLevel(method, false), 0,
78 method + " comp_level must be == 0");
79 Asserts.assertFalse(
80 WHITE_BOX.isMethodCompiled(method, true),
81 method + " must be not osr_compiled");
82 Asserts.assertEQ(
83 WHITE_BOX.getMethodCompilationLevel(method, true), 0,
84 method + " osr_comp_level must be == 0");
85 } finally {
86 System.out.println("unlocking compilation");
87 WHITE_BOX.unlockCompilation();
88 }
89 waitBackgroundCompilation();
|
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test LockCompilationTest
26 * @bug 8059624 8152169
27 * @library /testlibrary /test/lib /
28 * @modules java.management
29 * @build LockCompilationTest
30 * @run driver ClassFileInstaller sun.hotspot.WhiteBox
31 * sun.hotspot.WhiteBox$WhiteBoxPermission
32 * @run main/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI LockCompilationTest
33 * @summary testing of WB::lock/unlockCompilation()
34 */
35
36 import java.io.OutputStream;
37 import java.io.PrintWriter;
38 import java.util.concurrent.BrokenBarrierException;
39 import java.util.concurrent.CyclicBarrier;
40
41 import compiler.whitebox.CompilerWhiteBoxTest;
42 import jdk.test.lib.Asserts;
43
44 public class LockCompilationTest extends CompilerWhiteBoxTest {
45
46 public static void main(String[] args) throws Exception {
47 // This case waits for 5 seconds and verifies that the method hasn't been
48 // compiled during that time. Only do that for one of the test cases.
49
50 // Only compile SimpleTestCase$Helper.method and exclude all other to ensure no
51 // contention on the compile queue causes problems.
52 String directive =
53 "[{ match:\"*SimpleTestCase$Helper.method\", Exclude:false}, " +
54 " { match:\"*.*\", Exclude:true}]";
55 if (WHITE_BOX.addCompilerDirective(directive) != 2) {
56 throw new RuntimeException("Could not add directive");
57 }
58 try {
59 CompilerWhiteBoxTest.main(LockCompilationTest::new, new String[] {"METHOD_TEST"});
60 } finally {
61 WHITE_BOX.removeCompilerDirective(2);
62 }
63
64 }
65
66 private LockCompilationTest(TestCase testCase) {
67 super(testCase);
68 // to prevent inlining of #method
69 WHITE_BOX.testSetDontInlineMethod(method, true);
70 }
71
72 protected void test() throws Exception {
73 checkNotCompiled();
74
75 System.out.println("locking compilation");
76 WHITE_BOX.lockCompilation();
77
78 try {
79 System.out.println("trying to compile");
80 compile();
81 // to check if it works correctly w/ safepoints
82 System.out.println("going to safepoint");
83 WHITE_BOX.fullGC();
84 // Sleep a while and then make sure the compile is still waiting
85 try {
86 Thread.sleep(5000);
87 } catch (Exception e) {
88 throw new RuntimeException("Sleep should not be interrupted");
89 }
90 Asserts.assertTrue(
91 WHITE_BOX.isMethodQueuedForCompilation(method),
92 method + " must be in queue");
93 Asserts.assertFalse(
94 WHITE_BOX.isMethodCompiled(method, false),
95 method + " must be not compiled");
96 Asserts.assertEQ(
97 WHITE_BOX.getMethodCompilationLevel(method, false), 0,
98 method + " comp_level must be == 0");
99 Asserts.assertFalse(
100 WHITE_BOX.isMethodCompiled(method, true),
101 method + " must be not osr_compiled");
102 Asserts.assertEQ(
103 WHITE_BOX.getMethodCompilationLevel(method, true), 0,
104 method + " osr_comp_level must be == 0");
105 } finally {
106 System.out.println("unlocking compilation");
107 WHITE_BOX.unlockCompilation();
108 }
109 waitBackgroundCompilation();
|