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
24
25 package org.graalvm.compiler.hotspot.test;
26
27 import static java.util.Collections.singletonList;
28 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.Print;
29 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationBailoutAction;
30 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationFailureAction;
31 import static org.graalvm.compiler.core.test.ReflectionOptionDescriptors.extractEntries;
32 import static org.graalvm.compiler.debug.MemUseTrackerKey.getCurrentThreadAllocatedBytes;
33 import static org.graalvm.compiler.hotspot.test.CompileTheWorld.Options.DESCRIPTORS;
34 import static org.graalvm.compiler.serviceprovider.JavaVersionUtil.Java8OrEarlier;
35
36 import java.io.Closeable;
37 import java.io.File;
38 import java.io.IOException;
39 import java.lang.annotation.Annotation;
40 import java.lang.reflect.Constructor;
41 import java.lang.reflect.Method;
42 import java.lang.reflect.Modifier;
43 import java.net.URI;
44 import java.net.URL;
45 import java.net.URLClassLoader;
46 import java.nio.file.FileSystem;
47 import java.nio.file.FileSystems;
48 import java.nio.file.FileVisitResult;
49 import java.nio.file.Files;
198 * @param methodFilters
199 * @param excludeMethodFilters
200 */
201 public CompileTheWorld(HotSpotJVMCIRuntime jvmciRuntime, HotSpotGraalCompiler compiler, String files, int startAt, int stopAt, String methodFilters, String excludeMethodFilters,
202 boolean verbose, OptionValues initialOptions, EconomicMap<OptionKey<?>, Object> compilationOptions) {
203 this.jvmciRuntime = jvmciRuntime;
204 this.compiler = compiler;
205 this.inputClassPath = files;
206 this.startAt = startAt;
207 this.stopAt = stopAt;
208 this.methodFilters = methodFilters == null || methodFilters.isEmpty() ? null : MethodFilter.parse(methodFilters);
209 this.excludeMethodFilters = excludeMethodFilters == null || excludeMethodFilters.isEmpty() ? null : MethodFilter.parse(excludeMethodFilters);
210 this.verbose = verbose;
211 this.currentOptions = initialOptions;
212
213 // Copy the initial options and add in any extra options
214 EconomicMap<OptionKey<?>, Object> compilationOptionsCopy = EconomicMap.create(initialOptions.getMap());
215 compilationOptionsCopy.putAll(compilationOptions);
216
217 // We want to see stack traces when a method fails to compile
218 CompilationBailoutAction.putIfAbsent(compilationOptionsCopy, Print);
219 CompilationFailureAction.putIfAbsent(compilationOptionsCopy, Print);
220
221 // By default only report statistics for the CTW threads themselves
222 DebugOptions.MetricsThreadFilter.putIfAbsent(compilationOptionsCopy, "^CompileTheWorld");
223 this.compilationOptions = compilationOptionsCopy;
224 }
225
226 public CompileTheWorld(HotSpotJVMCIRuntime jvmciRuntime, HotSpotGraalCompiler compiler, OptionValues options) {
227 this(jvmciRuntime, compiler, Options.Classpath.getValue(options),
228 Options.StartAt.getValue(options),
229 Options.StopAt.getValue(options),
230 Options.MethodFilter.getValue(options),
231 Options.ExcludeMethodFilter.getValue(options),
232 Options.Verbose.getValue(options),
233 options,
234 parseOptions(Options.Config.getValue(options)));
235 }
236
237 /**
238 * Compiles all methods in all classes in {@link #inputClassPath}. If {@link #inputClassPath}
|
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
24
25 package org.graalvm.compiler.hotspot.test;
26
27 import static java.util.Collections.singletonList;
28 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.Print;
29 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationBailoutAsFailure;
30 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationFailureAction;
31 import static org.graalvm.compiler.core.test.ReflectionOptionDescriptors.extractEntries;
32 import static org.graalvm.compiler.debug.MemUseTrackerKey.getCurrentThreadAllocatedBytes;
33 import static org.graalvm.compiler.hotspot.test.CompileTheWorld.Options.DESCRIPTORS;
34 import static org.graalvm.compiler.serviceprovider.JavaVersionUtil.Java8OrEarlier;
35
36 import java.io.Closeable;
37 import java.io.File;
38 import java.io.IOException;
39 import java.lang.annotation.Annotation;
40 import java.lang.reflect.Constructor;
41 import java.lang.reflect.Method;
42 import java.lang.reflect.Modifier;
43 import java.net.URI;
44 import java.net.URL;
45 import java.net.URLClassLoader;
46 import java.nio.file.FileSystem;
47 import java.nio.file.FileSystems;
48 import java.nio.file.FileVisitResult;
49 import java.nio.file.Files;
198 * @param methodFilters
199 * @param excludeMethodFilters
200 */
201 public CompileTheWorld(HotSpotJVMCIRuntime jvmciRuntime, HotSpotGraalCompiler compiler, String files, int startAt, int stopAt, String methodFilters, String excludeMethodFilters,
202 boolean verbose, OptionValues initialOptions, EconomicMap<OptionKey<?>, Object> compilationOptions) {
203 this.jvmciRuntime = jvmciRuntime;
204 this.compiler = compiler;
205 this.inputClassPath = files;
206 this.startAt = startAt;
207 this.stopAt = stopAt;
208 this.methodFilters = methodFilters == null || methodFilters.isEmpty() ? null : MethodFilter.parse(methodFilters);
209 this.excludeMethodFilters = excludeMethodFilters == null || excludeMethodFilters.isEmpty() ? null : MethodFilter.parse(excludeMethodFilters);
210 this.verbose = verbose;
211 this.currentOptions = initialOptions;
212
213 // Copy the initial options and add in any extra options
214 EconomicMap<OptionKey<?>, Object> compilationOptionsCopy = EconomicMap.create(initialOptions.getMap());
215 compilationOptionsCopy.putAll(compilationOptions);
216
217 // We want to see stack traces when a method fails to compile
218 CompilationBailoutAsFailure.putIfAbsent(compilationOptionsCopy, true);
219 CompilationFailureAction.putIfAbsent(compilationOptionsCopy, Print);
220
221 // By default only report statistics for the CTW threads themselves
222 DebugOptions.MetricsThreadFilter.putIfAbsent(compilationOptionsCopy, "^CompileTheWorld");
223 this.compilationOptions = compilationOptionsCopy;
224 }
225
226 public CompileTheWorld(HotSpotJVMCIRuntime jvmciRuntime, HotSpotGraalCompiler compiler, OptionValues options) {
227 this(jvmciRuntime, compiler, Options.Classpath.getValue(options),
228 Options.StartAt.getValue(options),
229 Options.StopAt.getValue(options),
230 Options.MethodFilter.getValue(options),
231 Options.ExcludeMethodFilter.getValue(options),
232 Options.Verbose.getValue(options),
233 options,
234 parseOptions(Options.Config.getValue(options)));
235 }
236
237 /**
238 * Compiles all methods in all classes in {@link #inputClassPath}. If {@link #inputClassPath}
|