Mercurial > hg > truffle
diff graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java @ 20967:f61ff7f01bc2
Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target.
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Wed, 15 Apr 2015 16:30:45 +0200 |
parents | 5a97208e1824 |
children | 3ceda1f37dcc |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java Wed Apr 15 13:49:38 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java Wed Apr 15 16:30:45 2015 +0200 @@ -70,6 +70,8 @@ public static final OptionValue<Integer> CompileTheWorldIterations = new OptionValue<>(1); @Option(help = "Only compile methods matching this filter", type = OptionType.Debug) public static final OptionValue<String> CompileTheWorldMethodFilter = new OptionValue<>(null); + @Option(help = "Exclude methods matching this filter from compilation", type = OptionType.Debug) + public static final OptionValue<String> CompileTheWorldExcludeMethodFilter = new OptionValue<>(null); @Option(help = "First class to consider when using -XX:+CompileTheWorld", type = OptionType.Debug) public static final OptionValue<Integer> CompileTheWorldStartAt = new OptionValue<>(1); @Option(help = "Last class to consider when using -XX:+CompileTheWorld", type = OptionType.Debug) @@ -158,6 +160,9 @@ /** Only compile methods matching one of the filters in this array if the array is non-null. */ private final MethodFilter[] methodFilters; + /** Exclude methods matching one of the filters in this array if the array is non-null. */ + private final MethodFilter[] excludeMethodFilters; + // Counters private int classFileCounter = 0; private AtomicLong compiledMethodsCounter = new AtomicLong(); @@ -180,12 +185,15 @@ * @param files {@link File#pathSeparator} separated list of Zip/Jar files to compile * @param startAt index of the class file to start compilation at * @param stopAt index of the class file to stop compilation at + * @param methodFilters + * @param excludeMethodFilters */ - public CompileTheWorld(String files, Config config, int startAt, int stopAt, String methodFilters, boolean verbose) { + public CompileTheWorld(String files, Config config, int startAt, int stopAt, String methodFilters, String excludeMethodFilters, boolean verbose) { this.files = files; this.startAt = startAt; this.stopAt = stopAt; this.methodFilters = methodFilters == null || methodFilters.isEmpty() ? null : MethodFilter.parse(methodFilters); + this.excludeMethodFilters = excludeMethodFilters == null || excludeMethodFilters.isEmpty() ? null : MethodFilter.parse(excludeMethodFilters); this.verbose = verbose; this.config = config; @@ -292,8 +300,12 @@ if (methodFilters == null || methodFilters.length == 0) { println("CompileTheWorld : Compiling all classes in " + entry); } else { - println("CompileTheWorld : Compiling all methods in " + entry + " matching one of the following filters: " + - Arrays.asList(methodFilters).stream().map(MethodFilter::toString).collect(Collectors.joining(", "))); + String include = Arrays.asList(methodFilters).stream().map(MethodFilter::toString).collect(Collectors.joining(", ")); + println("CompileTheWorld : Compiling all methods in " + entry + " matching one of the following filters: " + include); + } + if (excludeMethodFilters != null && excludeMethodFilters.length > 0) { + String exclude = Arrays.asList(excludeMethodFilters).stream().map(MethodFilter::toString).collect(Collectors.joining(", ")); + println("CompileTheWorld : Excluding all methods matching one of the follwing filters: " + exclude); } println(); @@ -321,6 +333,9 @@ if (methodFilters != null && !MethodFilter.matchesClassName(methodFilters, dottedClassName)) { continue; } + if (excludeMethodFilters != null && MethodFilter.matchesClassName(excludeMethodFilters, dottedClassName)) { + continue; + } if (dottedClassName.startsWith("jdk.management.") || dottedClassName.startsWith("jdk.internal.cmm.*")) { continue; @@ -427,6 +442,9 @@ if (methodFilters != null && !MethodFilter.matches(methodFilters, method)) { return; } + if (excludeMethodFilters != null && MethodFilter.matches(excludeMethodFilters, method)) { + return; + } Future<?> task = threadPool.submit(new Runnable() { public void run() { waitToRun();