Author: sco...@google.com Date: Mon May 11 17:09:29 2009 New Revision: 5344
Modified: trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java trunk/dev/core/src/com/google/gwt/dev/PermutationResult.java trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java Log: Optimize Linker performance handling of JavaScript. By converting the script to bytes early, we can do less wasted work in Link. Review by: spoon Modified: trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java ============================================================================== --- trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java (original) +++ trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java Mon May 11 17:09:29 2009 @@ -69,7 +69,7 @@ private static final DiskCache diskCache = new DiskCache(); - private final long jsToken; + private final long jsToken[]; private final SortedSet<SortedMap<SelectionProperty, String>> propertyValues = new TreeSet<SortedMap<SelectionProperty, String>>( MAP_COMPARATOR); @@ -78,11 +78,14 @@ private final long symbolToken; - public StandardCompilationResult(String strongName, String[] js, + public StandardCompilationResult(String strongName, byte[][] js, byte[] serializedSymbolMap) { super(StandardLinkerContext.class); this.strongName = strongName; - jsToken = diskCache.writeObject(js); + jsToken = new long[js.length]; + for (int i = 0; i < jsToken.length; ++i) { + jsToken[i] = diskCache.writeByteArray(js[i]); + } symbolToken = diskCache.writeByteArray(serializedSymbolMap); } @@ -99,7 +102,11 @@ @Override public String[] getJavaScript() { - return diskCache.readObject(jsToken, String[].class); + String[] js = new String[jsToken.length]; + for (int i = 0; i < jsToken.length; ++i) { + js[i] = diskCache.readString(jsToken[i]); + } + return js; } @Override Modified: trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java ============================================================================== --- trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java (original) +++ trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java Mon May 11 17:09:29 2009 @@ -292,8 +292,8 @@ throws UnableToCompleteException { PermutationResult permutationResult = resultFile.newInstance(logger); - String[] js = permutationResult.getJs(); - String strongName = Util.computeStrongName(Util.getBytes(js)); + byte[][] js = permutationResult.getJs(); + String strongName = Util.computeStrongName(js); StandardCompilationResult result = resultsByStrongName.get(strongName); if (result == null) { result = new StandardCompilationResult(strongName, js, Modified: trunk/dev/core/src/com/google/gwt/dev/PermutationResult.java ============================================================================== --- trunk/dev/core/src/com/google/gwt/dev/PermutationResult.java (original) +++ trunk/dev/core/src/com/google/gwt/dev/PermutationResult.java Mon May 11 17:09:29 2009 @@ -30,9 +30,9 @@ ArtifactSet getArtifacts(); /** - * The compiled JavaScript code. + * The compiled JavaScript code as UTF8 bytes. */ - String[] getJs(); + byte[][] getJs(); /** * The symbol map for the permutation. Modified: trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java ============================================================================== --- trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java (original) +++ trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java Mon May 11 17:09:29 2009 @@ -135,11 +135,15 @@ private static class PermutationResultImpl implements PermutationResult { private final ArtifactSet artifacts = new ArtifactSet(); - private final String[] js; + private final byte[][] js; private final byte[] serializedSymbolMap; public PermutationResultImpl(String[] js, SymbolData[] symbolMap) { - this.js = js; + byte[][] bytes = new byte[js.length][]; + for (int i = 0; i < js.length; ++i) { + bytes[i] = Util.getBytes(js[i]); + } + this.js = bytes; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); Util.writeObjectToStream(baos, (Object) symbolMap); @@ -154,7 +158,7 @@ return artifacts; } - public String[] getJs() { + public byte[][] getJs() { return js; } --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---