14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package java.lang.invoke; 26 27 import java.lang.reflect.Method; 28 import java.util.Properties; 29 import sun.hotspot.WhiteBox; 30 31 public class StableConfiguration { 32 static final WhiteBox WB = WhiteBox.getWhiteBox(); 33 static final boolean isStableEnabled; 34 static final boolean isServerWithStable; 35 36 static { 37 Boolean value = WB.getBooleanVMFlag("FoldStableValues"); 38 isStableEnabled = (value == null ? false : value); 39 isServerWithStable = isStableEnabled && get(); 40 System.out.println("@Stable: " + (isStableEnabled ? "enabled" : "disabled")); 41 System.out.println("Server Compiler: " + get()); 42 } 43 44 // The method 'get' below returns true if the method is server compiled 45 // and is used by the Stable tests to determine whether methods in 46 // general are being server compiled or not as the -XX:+FoldStableValues 47 // option is only applicable to -server. 48 // 49 // On aarch64 we DeOptimize when patching. This means that when the 50 // method is compiled as a result of -Xcomp it DeOptimizes immediately. 51 // The result is that getMethodCompilationLevel returns 0. This means 52 // the method returns true based on java.vm.name. 53 // 54 // However when the tests are run with -XX:+TieredCompilation and 55 // -XX:TieredStopAtLevel=1 this fails because methods will always 56 // be client compiled. 57 // 58 // Solution is to add a simple method 'get1' which should never be 59 // DeOpted and use that to determine the compilation level instead. 60 static void get1() { 61 } 62 63 64 65 // ::get() is among immediately compiled methods. 66 static boolean get() { 67 try { 68 get1(); 69 Method m = StableConfiguration.class.getDeclaredMethod("get1"); 70 int level = WB.getMethodCompilationLevel(m); 71 if (level > 0) { 72 return (level == 4); 73 } else { 74 String javaVM = System.getProperty("java.vm.name", ""); 75 if (javaVM.contains("Server")) return true; 76 if (javaVM.contains("Client")) return false; 77 throw new Error("Unknown VM type: "+javaVM); 78 } 79 } catch (NoSuchMethodException e) { 80 throw new Error(e); 81 } 82 } 83 84 } | 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package java.lang.invoke; 26 27 import java.lang.reflect.Method; 28 import java.util.Properties; 29 import sun.hotspot.WhiteBox; 30 31 public class StableConfiguration { 32 static final WhiteBox WB = WhiteBox.getWhiteBox(); 33 static final boolean isStableEnabled; 34 35 static { 36 Boolean value = WB.getBooleanVMFlag("FoldStableValues"); 37 isStableEnabled = (value == null ? false : value); 38 System.out.println("@Stable: " + (isStableEnabled ? "enabled" : "disabled")); 39 } 40 } |