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
-~----------~----~----~----~------~----~------~--~---

Reply via email to