test/compiler/rtm/method_options/TestNoRTMLockElidingOption.java

Wed, 21 Jan 2015 12:38:11 +0100

author
goetz
date
Wed, 21 Jan 2015 12:38:11 +0100
changeset 7574
a51071796915
parent 0
f90c822e73f8
permissions
-rw-r--r--

8068013: [TESTBUG] Aix support in hotspot jtreg tests
Reviewed-by: ctornqvi, fzhinkin, farvidsson

     1 /*
     2  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     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  */
    25 /**
    26  * @test
    27  * @bug 8031320
    28  * @summary Verify that NoRTMLockEliding option could be applied to
    29  *          specified method and that such method will not use rtm.
    30  * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary
    31  * @build TestNoRTMLockElidingOption
    32  * @run main ClassFileInstaller sun.hotspot.WhiteBox
    33  * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
    34  *                   -XX:+WhiteBoxAPI TestNoRTMLockElidingOption
    35  */
    37 import java.util.List;
    38 import com.oracle.java.testlibrary.*;
    39 import com.oracle.java.testlibrary.cli.CommandLineOptionTest;
    40 import com.oracle.java.testlibrary.cli.predicate.AndPredicate;
    41 import rtm.*;
    42 import rtm.predicate.SupportedCPU;
    43 import rtm.predicate.SupportedVM;
    45 /**
    46  * Test verifies that method tagged with option <i>NoRTMLockElidingOption</i>
    47  * will not use RTM-based lock elision.
    48  * Test invokes compiled method and checks that no deoptimization with
    49  * <i>rtm_state_change</i> reason had happened and that that VM output
    50  * does not contain RTM locking statistics for compiled method.
    51  */
    52 public class TestNoRTMLockElidingOption extends CommandLineOptionTest {
    53     private TestNoRTMLockElidingOption() {
    54         super(new AndPredicate(new SupportedCPU(), new SupportedVM()));
    55     }
    57     @Override
    58     public void runTestCases() throws Throwable {
    59         verifyOption(false);
    60         verifyOption(true);
    61     }
    63     public void verifyOption(boolean useStackLock) throws Throwable {
    64         AbortProvoker provoker = AbortType.XABORT.provoker();
    65         String logFileName = String.format("rtm_deopt_%s_stack_lock.xml",
    66                 (useStackLock ? "use" : "no"));
    67         String methodOption = String.format("-XX:CompileCommand=option," +
    68                 "%s,NoRTMLockEliding", provoker.getMethodWithLockName());
    70         OutputAnalyzer outputAnalyzer = RTMTestBase.executeRTMTest(
    71                 logFileName,
    72                 provoker,
    73                 CommandLineOptionTest.prepareBooleanFlag("UseRTMForStackLocks",
    74                         useStackLock),
    75                 methodOption,
    76                 "-XX:RTMTotalCountIncrRate=1",
    77                 "-XX:+UseRTMDeopt",
    78                 "-XX:+PrintPreciseRTMLockingStatistics",
    79                 AbortProvoker.class.getName(),
    80                 AbortType.XABORT.toString(),
    81                 Boolean.toString(!useStackLock)
    82         );
    84         outputAnalyzer.shouldHaveExitValue(0);
    86         int firedTraps = RTMTestBase.firedRTMStateChangeTraps(logFileName);
    88         Asserts.assertEQ(firedTraps, 0,
    89                 "No deoptimizations with rtm_state_change reason are expected");
    91         List<RTMLockingStatistics> statistics = RTMLockingStatistics.fromString(
    92                 provoker.getMethodWithLockName(), outputAnalyzer.getOutput());
    94         Asserts.assertEQ(statistics.size(), 0,
    95                 "VM output should not contain RTM locking statistics entries "
    96                 + "for method " + provoker.getMethodWithLockName());
    97     }
    99     public static void main(String args[]) throws Throwable {
   100         new TestNoRTMLockElidingOption().test();
   101     }
   102 }

mercurial