33 public abstract class CompilerWhiteBoxTest { |
33 public abstract class CompilerWhiteBoxTest { |
34 protected static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox(); |
34 protected static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox(); |
35 protected static final Method METHOD = getMethod("method"); |
35 protected static final Method METHOD = getMethod("method"); |
36 protected static final int COMPILE_THRESHOLD |
36 protected static final int COMPILE_THRESHOLD |
37 = Integer.parseInt(getVMOption("CompileThreshold", "10000")); |
37 = Integer.parseInt(getVMOption("CompileThreshold", "10000")); |
|
38 protected static final boolean BACKGROUND_COMPILATION |
|
39 = Boolean.valueOf(getVMOption("BackgroundCompilation", "true")); |
38 |
40 |
39 protected static Method getMethod(String name) { |
41 protected static Method getMethod(String name) { |
40 try { |
42 try { |
41 return CompilerWhiteBoxTest.class.getDeclaredMethod(name); |
43 return CompilerWhiteBoxTest.class.getDeclaredMethod(name); |
42 } catch (NoSuchMethodException | SecurityException e) { |
44 } catch (NoSuchMethodException | SecurityException e) { |
43 throw new RuntimeException( |
45 throw new RuntimeException( |
44 "exception on getting method " + name, e); |
46 "exception on getting method " + name, e); |
45 } |
47 } |
46 } |
48 } |
47 |
49 |
48 protected static String getVMOption(String name, String defaultValue) { |
50 protected static String getVMOption(String name) { |
49 String result; |
51 String result; |
50 HotSpotDiagnosticMXBean diagnostic |
52 HotSpotDiagnosticMXBean diagnostic |
51 = ManagementFactoryHelper.getDiagnosticMXBean(); |
53 = ManagementFactoryHelper.getDiagnosticMXBean(); |
52 result = diagnostic.getVMOption(name).getValue(); |
54 result = diagnostic.getVMOption(name).getValue(); |
|
55 return result; |
|
56 } |
|
57 |
|
58 protected static String getVMOption(String name, String defaultValue) { |
|
59 String result = getVMOption(name); |
53 return result == null ? defaultValue : result; |
60 return result == null ? defaultValue : result; |
54 } |
61 } |
55 |
62 |
56 protected final void runTest() throws RuntimeException { |
63 protected final void runTest() throws RuntimeException { |
57 if (ManagementFactoryHelper.getCompilationMXBean() == null) { |
64 if (ManagementFactoryHelper.getCompilationMXBean() == null) { |
98 } |
106 } |
99 } |
107 } |
100 |
108 |
101 protected static void waitBackgroundCompilation(Method method) |
109 protected static void waitBackgroundCompilation(Method method) |
102 throws InterruptedException { |
110 throws InterruptedException { |
|
111 if (!BACKGROUND_COMPILATION) { |
|
112 return; |
|
113 } |
103 final Object obj = new Object(); |
114 final Object obj = new Object(); |
104 synchronized (obj) { |
115 synchronized (obj) { |
105 for (int i = 0; i < 10; ++i) { |
116 for (int i = 0; i < 10; ++i) { |
106 if (!WHITE_BOX.isMethodQueuedForCompilation(method)) { |
117 if (!WHITE_BOX.isMethodQueuedForCompilation(method)) { |
107 break; |
118 break; |
127 |
138 |
128 protected abstract void test() throws Exception; |
139 protected abstract void test() throws Exception; |
129 |
140 |
130 protected final int compile() { |
141 protected final int compile() { |
131 int result = 0; |
142 int result = 0; |
132 for (int i = 0; i < COMPILE_THRESHOLD; ++i) { |
143 int count = Math.max(COMPILE_THRESHOLD, 150000); |
|
144 for (int i = 0; i < count; ++i) { |
133 result += method(); |
145 result += method(); |
134 } |
146 } |
|
147 System.out.println("method was invoked " + count + " times"); |
135 return result; |
148 return result; |
136 } |
149 } |
137 |
|
138 |
150 |
139 protected int method() { |
151 protected int method() { |
140 return 42; |
152 return 42; |
141 } |
153 } |
142 } |
154 } |