27 * @bug 8031320
28 * @summary Verify that rtm locking is used for stack locks.
29 * @library /test/lib /
30 * @modules java.base/jdk.internal.misc
31 * java.management
32 * @build sun.hotspot.WhiteBox
33 * @run driver ClassFileInstaller sun.hotspot.WhiteBox
34 * sun.hotspot.WhiteBox$WhiteBoxPermission
35 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
36 * -XX:+WhiteBoxAPI
37 * compiler.rtm.locking.TestUseRTMForStackLocks
38 */
39
40 package compiler.rtm.locking;
41
42 import compiler.testlibrary.rtm.AbortProvoker;
43 import compiler.testlibrary.rtm.AbortType;
44 import compiler.testlibrary.rtm.RTMLockingStatistics;
45 import compiler.testlibrary.rtm.RTMTestBase;
46 import compiler.testlibrary.rtm.predicate.SupportedCPU;
47 import compiler.testlibrary.rtm.predicate.SupportedVM;
48 import jdk.test.lib.Asserts;
49 import jdk.test.lib.process.OutputAnalyzer;
50 import jdk.test.lib.cli.CommandLineOptionTest;
51 import jdk.test.lib.cli.predicate.AndPredicate;
52
53 import java.util.List;
54
55 /**
56 * Test verifies that RTM-based lock elision could be used for stack locks
57 * by calling compiled method that use RTM-based lock elision and using
58 * stack lock.
59 * Compiled method invoked {@code AbortProvoker.DEFAULT_ITERATIONS} times,
60 * so total locks count should be the same.
61 * This test could also be affected by retriable aborts, so -XX:RTMRetryCount=0
62 * is used. For more information abort that issue see
63 * {@link TestUseRTMAfterLockInflation}.
64 */
65 public class TestUseRTMForStackLocks extends CommandLineOptionTest {
66 private static final boolean INFLATE_MONITOR = false;
67
68 private TestUseRTMForStackLocks() {
69 super(new AndPredicate(new SupportedCPU(), new SupportedVM()));
70 }
71
72 @Override
73 protected void runTestCases() throws Throwable {
74 AbortProvoker provoker = AbortType.XABORT.provoker();
75 RTMLockingStatistics lock;
76
77 OutputAnalyzer outputAnalyzer = RTMTestBase.executeRTMTest(
78 provoker,
79 "-XX:+UseRTMForStackLocks",
80 "-XX:RTMTotalCountIncrRate=1",
81 "-XX:RTMRetryCount=0",
82 "-XX:+PrintPreciseRTMLockingStatistics",
83 AbortProvoker.class.getName(),
84 AbortType.XABORT.toString(),
85 Boolean.toString(TestUseRTMForStackLocks.INFLATE_MONITOR));
86
87 outputAnalyzer.shouldHaveExitValue(0);
88
89 List<RTMLockingStatistics> statistics = RTMLockingStatistics.fromString(
|
27 * @bug 8031320
28 * @summary Verify that rtm locking is used for stack locks.
29 * @library /test/lib /
30 * @modules java.base/jdk.internal.misc
31 * java.management
32 * @build sun.hotspot.WhiteBox
33 * @run driver ClassFileInstaller sun.hotspot.WhiteBox
34 * sun.hotspot.WhiteBox$WhiteBoxPermission
35 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
36 * -XX:+WhiteBoxAPI
37 * compiler.rtm.locking.TestUseRTMForStackLocks
38 */
39
40 package compiler.rtm.locking;
41
42 import compiler.testlibrary.rtm.AbortProvoker;
43 import compiler.testlibrary.rtm.AbortType;
44 import compiler.testlibrary.rtm.RTMLockingStatistics;
45 import compiler.testlibrary.rtm.RTMTestBase;
46 import compiler.testlibrary.rtm.predicate.SupportedCPU;
47 import compiler.testlibrary.rtm.predicate.SupportedOS;
48 import compiler.testlibrary.rtm.predicate.SupportedVM;
49 import jdk.test.lib.Asserts;
50 import jdk.test.lib.process.OutputAnalyzer;
51 import jdk.test.lib.cli.CommandLineOptionTest;
52 import jdk.test.lib.cli.predicate.AndPredicate;
53
54 import java.util.List;
55
56 /**
57 * Test verifies that RTM-based lock elision could be used for stack locks
58 * by calling compiled method that use RTM-based lock elision and using
59 * stack lock.
60 * Compiled method invoked {@code AbortProvoker.DEFAULT_ITERATIONS} times,
61 * so total locks count should be the same.
62 * This test could also be affected by retriable aborts, so -XX:RTMRetryCount=0
63 * is used. For more information abort that issue see
64 * {@link TestUseRTMAfterLockInflation}.
65 */
66 public class TestUseRTMForStackLocks extends CommandLineOptionTest {
67 private static final boolean INFLATE_MONITOR = false;
68
69 private TestUseRTMForStackLocks() {
70 super(new AndPredicate(new SupportedCPU(), new SupportedOS(), new SupportedVM()));
71 }
72
73 @Override
74 protected void runTestCases() throws Throwable {
75 AbortProvoker provoker = AbortType.XABORT.provoker();
76 RTMLockingStatistics lock;
77
78 OutputAnalyzer outputAnalyzer = RTMTestBase.executeRTMTest(
79 provoker,
80 "-XX:+UseRTMForStackLocks",
81 "-XX:RTMTotalCountIncrRate=1",
82 "-XX:RTMRetryCount=0",
83 "-XX:+PrintPreciseRTMLockingStatistics",
84 AbortProvoker.class.getName(),
85 AbortType.XABORT.toString(),
86 Boolean.toString(TestUseRTMForStackLocks.INFLATE_MONITOR));
87
88 outputAnalyzer.shouldHaveExitValue(0);
89
90 List<RTMLockingStatistics> statistics = RTMLockingStatistics.fromString(
|