Introduce -XfragmentCount to replace -XfragmentMerge Review at http://gwt-code-reviews.appspot.com/1739804 Review by: cromwellian@google.com git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11066 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java index d1edc94..cbc6657 100644 --- a/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java +++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java
@@ -48,8 +48,13 @@ } @Override + public int getFragmentCount() { + return -1; + } + + @Override public int getFragmentsMerge() { - return 0; + return -1; } @Override
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/UnmodifiableCompilerOptions.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/UnmodifiableCompilerOptions.java index 6c8563a..ce9e13d 100644 --- a/dev/codeserver/java/com/google/gwt/dev/codeserver/UnmodifiableCompilerOptions.java +++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/UnmodifiableCompilerOptions.java
@@ -86,6 +86,11 @@ } @Override + public void setFragmentCount(int numFragments) { + throw new UnsupportedOperationException(); + } + + @Override public void setFragmentsMerge(int numFragments) { throw new UnsupportedOperationException(); }
diff --git a/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java b/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java index 1a3ab05..7ab0c83 100644 --- a/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java +++ b/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java
@@ -49,6 +49,11 @@ } @Override + public int getFragmentCount() { + return jjsOptions.getFragmentCount(); + } + + @Override public int getFragmentsMerge() { return jjsOptions.getFragmentsMerge(); } @@ -193,6 +198,11 @@ } @Override + public void setFragmentCount(int numFragments) { + jjsOptions.setFragmentCount(numFragments); + } + + @Override public void setFragmentsMerge(int numFragments) { jjsOptions.setFragmentsMerge(numFragments); }
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 18fa84a..f636798 100644 --- a/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java +++ b/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
@@ -20,6 +20,7 @@ import com.google.gwt.dev.util.arg.OptionDisableClassMetadata; import com.google.gwt.dev.util.arg.OptionEnableAssertions; import com.google.gwt.dev.util.arg.OptionEnableClosureCompiler; +import com.google.gwt.dev.util.arg.OptionFragmentCount; import com.google.gwt.dev.util.arg.OptionFragmentsMerge; import com.google.gwt.dev.util.arg.OptionOptimize; import com.google.gwt.dev.util.arg.OptionOptimizePrecompile; @@ -37,6 +38,6 @@ OptionDisableClassMetadata, OptionDisableCastChecking, OptionEnableAssertions, OptionRunAsyncEnabled, OptionScriptStyle, OptionSoycEnabled, OptionSoycDetailed, OptionOptimizePrecompile, OptionStrict, OptionSoycHtmlDisabled, - OptionEnableClosureCompiler, OptionFragmentsMerge { + OptionEnableClosureCompiler, OptionFragmentsMerge, OptionFragmentCount { }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java b/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java index 173df6f..f034bec 100644 --- a/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java +++ b/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
@@ -38,6 +38,7 @@ private boolean soycHtmlDisabled = false; private boolean strict = false; private boolean closureCompilerEnabled; + private int fragmentCount = -1; private int fragmentsMerge = -1; public JJSOptionsImpl() { @@ -62,6 +63,12 @@ setStrict(other.isStrict()); setClosureCompilerEnabled(other.isClosureCompilerEnabled()); setFragmentsMerge(other.getFragmentsMerge()); + setFragmentCount(other.getFragmentCount()); + } + + @Override + public int getFragmentCount() { + return fragmentCount; } @Override @@ -172,6 +179,11 @@ public void setEnableAssertions(boolean enableAssertions) { this.enableAssertions = enableAssertions; } + + @Override + public void setFragmentCount(int numFragments) { + this.fragmentCount = numFragments; + } @Override public void setFragmentsMerge(int numFragments) {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java index 6465f88..231d823 100644 --- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java +++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -359,7 +359,17 @@ if (options.isRunAsyncEnabled()) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - int fragmentsMerge = options.getFragmentsMerge(); + + int fragmentsMerge = 0; + + int expectedFragmentCount = options.getFragmentCount(); + if (expectedFragmentCount > 0) { + // + 1 for left over, + 1 for initial gave us the total number + // of fragments without splitting. + fragmentsMerge = jprogram.getRunAsyncs().size() + 2 - expectedFragmentCount; + } else { + fragmentsMerge = options.getFragmentsMerge(); + } // Pick and choose which code splitter to use. Only use the experimental // one when the user explicitly decides the project needs fragment
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerFragmentCount.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerFragmentCount.java new file mode 100644 index 0000000..56ab559 --- /dev/null +++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerFragmentCount.java
@@ -0,0 +1,51 @@ +/* + * Copyright 2011 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; + +/** + * An ArgHandler to provide the -XfragmentMerge flag. + */ +public class ArgHandlerFragmentCount extends ArgHandlerInt { + + private final OptionFragmentCount option; + + public ArgHandlerFragmentCount(OptionFragmentCount option) { + this.option = option; + } + + @Override + public String getPurpose() { + return "EXPERIMENTAL: " + + "Limits of number of fragments using a code splitter that merges split points."; + } + + @Override + public String getTag() { + return "-XfragmentCount"; + } + + @Override + public String[] getTagArgs() { + return new String[] {"numFragments"}; + } + + @Override + public void setInt(int value) { + option.setFragmentCount(value); + } +}
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerFragmentMerge.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerFragmentMerge.java index fde83e1..41c1870 100644 --- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerFragmentMerge.java +++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerFragmentMerge.java
@@ -30,7 +30,8 @@ @Override public String getPurpose() { - return "EXPERIMENTAL: Enables Fragment merging code splitter."; + return "DEPRECATED (use -XfragmentMerge instead): " + + "Enables Fragment merging code splitter."; } @Override
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/OptionFragmentCount.java b/dev/core/src/com/google/gwt/dev/util/arg/OptionFragmentCount.java new file mode 100644 index 0000000..1a07c04 --- /dev/null +++ b/dev/core/src/com/google/gwt/dev/util/arg/OptionFragmentCount.java
@@ -0,0 +1,25 @@ +/* + * Copyright 2012 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; + +/** + * Option to try keeping the number of fragments below certain number. + */ +public interface OptionFragmentCount { + int getFragmentCount(); + + void setFragmentCount(int numFragments); +}
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/OptionFragmentsMerge.java b/dev/core/src/com/google/gwt/dev/util/arg/OptionFragmentsMerge.java index 42d4ab1..be71212 100644 --- a/dev/core/src/com/google/gwt/dev/util/arg/OptionFragmentsMerge.java +++ b/dev/core/src/com/google/gwt/dev/util/arg/OptionFragmentsMerge.java
@@ -19,6 +19,7 @@ * Enable the new code splitter that auto-partitions. */ public interface OptionFragmentsMerge { + // TODO(acleung): Delete this in favor of -XfragmentCount // TODO(acleung): This is currently an experimental frag. We should find a // use case new splitter. Some possible approache: