< prev index next >

test/compiler/stable/StableConfiguration.java

Print this page




  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     // ::get() is among immediately compiled methods.
  45     static boolean get() {
  46         try {
  47             Method m = StableConfiguration.class.getDeclaredMethod("get");

  48             int level = WB.getMethodCompilationLevel(m);
  49             if (level > 0) {
  50               return (level == 4);
  51             } else {
  52               String javaVM = System.getProperty("java.vm.name", "");
  53               if (javaVM.contains("Server")) return true;
  54               if (javaVM.contains("Client")) return false;
  55               throw new Error("Unknown VM type: "+javaVM);
  56             }
  57         } catch (NoSuchMethodException e) {
  58             throw new Error(e);
  59         }
  60     }
  61 
  62 }


  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 immiediately.
  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     // ::get() is among immediately compiled methods.
  64     static boolean get() {
  65         try {
  66             get1();
  67             Method m = StableConfiguration.class.getDeclaredMethod("get1");
  68             int level = WB.getMethodCompilationLevel(m);
  69             if (level > 0) {
  70               return (level == 4);
  71             } else {
  72               String javaVM = System.getProperty("java.vm.name", "");
  73               if (javaVM.contains("Server")) return true;
  74               if (javaVM.contains("Client")) return false;
  75               throw new Error("Unknown VM type: "+javaVM);
  76             }
  77         } catch (NoSuchMethodException e) {
  78             throw new Error(e);
  79         }
  80     }
  81 
  82 }
< prev index next >