Adds a way to tune the optimization level in steps from
draft optimize to full optimization (the current default)
Preliminary testing shows that optimization level '3'
can give almost as good code size results (within 5%)
as full optimization, with about 20% reduction in compile time.
Review at http://gwt-code-reviews.appspot.com/915802
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8887 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java b/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
index 7f9e17d..dae93ae 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
@@ -18,8 +18,8 @@
import com.google.gwt.dev.util.arg.OptionAggressivelyOptimize;
import com.google.gwt.dev.util.arg.OptionDisableCastChecking;
import com.google.gwt.dev.util.arg.OptionDisableClassMetadata;
-import com.google.gwt.dev.util.arg.OptionDraftCompile;
import com.google.gwt.dev.util.arg.OptionEnableAssertions;
+import com.google.gwt.dev.util.arg.OptionOptimize;
import com.google.gwt.dev.util.arg.OptionOptimizePrecompile;
import com.google.gwt.dev.util.arg.OptionRunAsyncEnabled;
import com.google.gwt.dev.util.arg.OptionScriptStyle;
@@ -30,8 +30,8 @@
/**
* Controls options for the {@link JavaToJavaScriptCompiler}.
*/
-public interface JJSOptions extends OptionAggressivelyOptimize,
- OptionDisableClassMetadata, OptionDisableCastChecking, OptionDraftCompile,
+public interface JJSOptions extends OptionOptimize, OptionAggressivelyOptimize,
+ OptionDisableClassMetadata, OptionDisableCastChecking,
OptionEnableAssertions, OptionRunAsyncEnabled, OptionScriptStyle,
OptionSoycEnabled, OptionSoycDetailed, OptionOptimizePrecompile,
OptionStrict {
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDraftCompile.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDraftCompile.java
index 20d40cd..03bb01c 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDraftCompile.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDraftCompile.java
@@ -22,12 +22,12 @@
*/
public class ArgHandlerDraftCompile extends ArgHandlerFlag {
- private final OptionAggressivelyOptimize optimizeOption;
- private final OptionDraftCompile draftOption;
+ private final OptionAggressivelyOptimize aggressivelyOptimizeOption;
+ private final OptionOptimize optimizeOption;
- public <T extends OptionDraftCompile & OptionAggressivelyOptimize> ArgHandlerDraftCompile(T option) {
+ public <T extends OptionOptimize & OptionAggressivelyOptimize> ArgHandlerDraftCompile(T option) {
this.optimizeOption = option;
- this.draftOption = option;
+ this.aggressivelyOptimizeOption = option;
}
@Override
@@ -42,8 +42,8 @@
@Override
public boolean setFlag() {
- draftOption.setDraftCompile(true);
- optimizeOption.setAggressivelyOptimize(false);
+ optimizeOption.setOptimizationLevel(OptionOptimize.OPTIMIZE_LEVEL_DRAFT);
+ aggressivelyOptimizeOption.setAggressivelyOptimize(false);
return true;
}
}
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOptimize.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOptimize.java
new file mode 100644
index 0000000..48cc787
--- /dev/null
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOptimize.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.dev.util.arg;
+
+import com.google.gwt.util.tools.ArgHandlerInt;
+
+/**
+ * Set the optimization level from the command line. For now, level 1 is the same
+ * as draft compile, and level 9 is the same as the default (maximium optimization).
+ *
+ * TODO(zundel): In theory, a level 0 should be possible, where all optimizers
+ * are eliminated for the fastest possible compile. In practice, code generation
+ * depends on some optimizers being run.
+ */
+public class ArgHandlerOptimize extends ArgHandlerInt {
+
+ private final OptionOptimize options;
+
+ public ArgHandlerOptimize(OptionOptimize options) {
+ this.options = options;
+ }
+
+ @Override
+ public String getPurpose() {
+ return "Sets the optimization level used by the compiler. 0=none 9=maximum.";
+ }
+
+ @Override
+ public String getTag() {
+ return "-optimize";
+ }
+
+ @Override
+ public String[] getTagArgs() {
+ return new String[] {"level"};
+ }
+
+ @Override
+ public void setInt(int level) {
+ if (level <= OptionOptimize.OPTIMIZE_LEVEL_MAX) {
+ options.setOptimizationLevel(Math.max(level, OptionOptimize.OPTIMIZE_LEVEL_DRAFT));
+ } else {
+ options.setOptimizationLevel(OptionOptimize.OPTIMIZE_LEVEL_MAX);
+ }
+ }
+}
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/OptionDraftCompile.java b/dev/core/src/com/google/gwt/dev/util/arg/OptionOptimize.java
similarity index 67%
rename from dev/core/src/com/google/gwt/dev/util/arg/OptionDraftCompile.java
rename to dev/core/src/com/google/gwt/dev/util/arg/OptionOptimize.java
index 8c425e3..4cae224 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/OptionDraftCompile.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/OptionOptimize.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2009 Google Inc.
+ * Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -16,11 +16,14 @@
package com.google.gwt.dev.util.arg;
/**
- * An option that indicates that the majority of optimizations are skipped in
- * favor of a faster compile time.
+ * An option that can indicates to restrict optimization in favor of a
+ * faster compile time.
*/
-public interface OptionDraftCompile {
- boolean isDraftCompile();
+public interface OptionOptimize {
+ int OPTIMIZE_LEVEL_DRAFT = 0;
+ int OPTIMIZE_LEVEL_MAX = 9;
- void setDraftCompile(boolean draft);
+ int getOptimizationLevel();
+
+ void setOptimizationLevel(int level);
}