27 * @bug 8031320
28 * @summary Verify that on low abort ratio method will be recompiled.
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.TestRTMDeoptOnLowAbortRatio
38 */
39
40 package compiler.rtm.locking;
41
42 import compiler.testlibrary.rtm.AbortProvoker;
43 import compiler.testlibrary.rtm.CompilableTest;
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.internal.misc.Unsafe;
49 import jdk.test.lib.Asserts;
50 import jdk.test.lib.process.OutputAnalyzer;
51 import jdk.test.lib.unsafe.UnsafeHelper;
52 import jdk.test.lib.cli.CommandLineOptionTest;
53 import jdk.test.lib.cli.predicate.AndPredicate;
54
55 import java.util.List;
56
57 /**
58 * Test verifies that low abort ratio method will be deoptimized with
59 * <i>rtm_state_change</i> reason and will continue to use RTM-based lock
60 * elision after that.
61 * This test make asserts on total locks count done by compiled method,
62 * so in order to avoid issue with retriable locks -XX:RTMRetryCount=0 is used.
63 * For more details on that issue see {@link TestUseRTMAfterLockInflation}.
64 */
65 public class TestRTMDeoptOnLowAbortRatio extends CommandLineOptionTest {
66 private static final long LOCKING_THRESHOLD = 100L;
67 private static final long ABORT_THRESHOLD = LOCKING_THRESHOLD / 2L;
68
69 private TestRTMDeoptOnLowAbortRatio() {
70 super(new AndPredicate(new SupportedCPU(), new SupportedVM()));
71 }
72
73 @Override
74 protected void runTestCases() throws Throwable {
75 verifyRTMDeopt(false);
76 verifyRTMDeopt(true);
77 }
78
79 private void verifyRTMDeopt(boolean useStackLock) throws Throwable {
80 CompilableTest test = new Test();
81 String logFileName = String.format("rtm_deopt_%s_stack_lock.xml",
82 useStackLock ? "use" : "no");
83
84 OutputAnalyzer outputAnalyzer = RTMTestBase.executeRTMTest(
85 logFileName,
86 test,
87 "-XX:+UseRTMDeopt",
88 CommandLineOptionTest.prepareBooleanFlag("UseRTMForStackLocks",
89 useStackLock),
90 CommandLineOptionTest.prepareNumericFlag("RTMLockingThreshold",
|
27 * @bug 8031320
28 * @summary Verify that on low abort ratio method will be recompiled.
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.TestRTMDeoptOnLowAbortRatio
38 */
39
40 package compiler.rtm.locking;
41
42 import compiler.testlibrary.rtm.AbortProvoker;
43 import compiler.testlibrary.rtm.CompilableTest;
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.internal.misc.Unsafe;
50 import jdk.test.lib.Asserts;
51 import jdk.test.lib.process.OutputAnalyzer;
52 import jdk.test.lib.unsafe.UnsafeHelper;
53 import jdk.test.lib.cli.CommandLineOptionTest;
54 import jdk.test.lib.cli.predicate.AndPredicate;
55
56 import java.util.List;
57
58 /**
59 * Test verifies that low abort ratio method will be deoptimized with
60 * <i>rtm_state_change</i> reason and will continue to use RTM-based lock
61 * elision after that.
62 * This test make asserts on total locks count done by compiled method,
63 * so in order to avoid issue with retriable locks -XX:RTMRetryCount=0 is used.
64 * For more details on that issue see {@link TestUseRTMAfterLockInflation}.
65 */
66 public class TestRTMDeoptOnLowAbortRatio extends CommandLineOptionTest {
67 private static final long LOCKING_THRESHOLD = 100L;
68 private static final long ABORT_THRESHOLD = LOCKING_THRESHOLD / 2L;
69
70 private TestRTMDeoptOnLowAbortRatio() {
71 super(new AndPredicate(new SupportedCPU(), new SupportedOS(), new SupportedVM()));
72 }
73
74 @Override
75 protected void runTestCases() throws Throwable {
76 verifyRTMDeopt(false);
77 verifyRTMDeopt(true);
78 }
79
80 private void verifyRTMDeopt(boolean useStackLock) throws Throwable {
81 CompilableTest test = new Test();
82 String logFileName = String.format("rtm_deopt_%s_stack_lock.xml",
83 useStackLock ? "use" : "no");
84
85 OutputAnalyzer outputAnalyzer = RTMTestBase.executeRTMTest(
86 logFileName,
87 test,
88 "-XX:+UseRTMDeopt",
89 CommandLineOptionTest.prepareBooleanFlag("UseRTMForStackLocks",
90 useStackLock),
91 CommandLineOptionTest.prepareNumericFlag("RTMLockingThreshold",
|