26 * @test
27 * @bug 8031320
28 * @summary Verify that rtm locking is used for inflated 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 compiler.rtm.locking.TestUseRTMForInflatedLocks
37 */
38
39 package compiler.rtm.locking;
40
41 import compiler.testlibrary.rtm.AbortProvoker;
42 import compiler.testlibrary.rtm.AbortType;
43 import compiler.testlibrary.rtm.RTMLockingStatistics;
44 import compiler.testlibrary.rtm.RTMTestBase;
45 import compiler.testlibrary.rtm.predicate.SupportedCPU;
46 import compiler.testlibrary.rtm.predicate.SupportedVM;
47 import jdk.test.lib.Asserts;
48 import jdk.test.lib.process.OutputAnalyzer;
49 import jdk.test.lib.cli.CommandLineOptionTest;
50 import jdk.test.lib.cli.predicate.AndPredicate;
51
52 import java.util.List;
53
54 /**
55 * Test verifies that RTM-based lock elision could be used for inflated locks
56 * by calling compiled method that use RTM-based lock elision and using
57 * manually inflated lock.
58 * Compiled method invoked {@code AbortProvoker.DEFAULT_ITERATIONS} times,
59 * so total locks count should be the same.
60 * This test could also be affected by retriable aborts, so -XX:RTMRetryCount=0
61 * is used. For more information abort that issue see
62 * {@link TestUseRTMAfterLockInflation}.
63 */
64 public class TestUseRTMForInflatedLocks extends CommandLineOptionTest {
65 private TestUseRTMForInflatedLocks() {
66 super(new AndPredicate(new SupportedCPU(), new SupportedVM()));
67 }
68
69 @Override
70 protected void runTestCases() throws Throwable {
71 AbortProvoker provoker = AbortType.XABORT.provoker();
72 RTMLockingStatistics lock;
73
74 OutputAnalyzer outputAnalyzer = RTMTestBase.executeRTMTest(
75 provoker,
76 "-XX:-UseRTMForStackLocks",
77 "-XX:RTMTotalCountIncrRate=1",
78 "-XX:RTMRetryCount=0",
79 "-XX:+PrintPreciseRTMLockingStatistics",
80 AbortProvoker.class.getName(),
81 AbortType.XABORT.toString());
82
83 outputAnalyzer.shouldHaveExitValue(0);
84
85 List<RTMLockingStatistics> statistics = RTMLockingStatistics.fromString(
86 provoker.getMethodWithLockName(), outputAnalyzer.getOutput());
|
26 * @test
27 * @bug 8031320
28 * @summary Verify that rtm locking is used for inflated 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 compiler.rtm.locking.TestUseRTMForInflatedLocks
37 */
38
39 package compiler.rtm.locking;
40
41 import compiler.testlibrary.rtm.AbortProvoker;
42 import compiler.testlibrary.rtm.AbortType;
43 import compiler.testlibrary.rtm.RTMLockingStatistics;
44 import compiler.testlibrary.rtm.RTMTestBase;
45 import compiler.testlibrary.rtm.predicate.SupportedCPU;
46 import compiler.testlibrary.rtm.predicate.SupportedOS;
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 inflated locks
57 * by calling compiled method that use RTM-based lock elision and using
58 * manually inflated 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 TestUseRTMForInflatedLocks extends CommandLineOptionTest {
66 private TestUseRTMForInflatedLocks() {
67 super(new AndPredicate(new SupportedCPU(), new SupportedOS(), new SupportedVM()));
68 }
69
70 @Override
71 protected void runTestCases() throws Throwable {
72 AbortProvoker provoker = AbortType.XABORT.provoker();
73 RTMLockingStatistics lock;
74
75 OutputAnalyzer outputAnalyzer = RTMTestBase.executeRTMTest(
76 provoker,
77 "-XX:-UseRTMForStackLocks",
78 "-XX:RTMTotalCountIncrRate=1",
79 "-XX:RTMRetryCount=0",
80 "-XX:+PrintPreciseRTMLockingStatistics",
81 AbortProvoker.class.getName(),
82 AbortType.XABORT.toString());
83
84 outputAnalyzer.shouldHaveExitValue(0);
85
86 List<RTMLockingStatistics> statistics = RTMLockingStatistics.fromString(
87 provoker.getMethodWithLockName(), outputAnalyzer.getOutput());
|