Revision: 10192
Author:   [email protected]
Date:     Wed May 18 09:39:13 2011
Log: Changed formatting of SOYC compiler report to use large number grouping (ex: 7,923,764),
change milliseconds to decimal seconds, and use better column alignment.

Review at http://gwt-code-reviews.appspot.com/1449803

Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=10192

Modified:
 /trunk/dev/core/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java
 /trunk/dev/core/src/com/google/gwt/soyc/resources/soyc.css

=======================================
--- /trunk/dev/core/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java Mon Mar 21 12:22:19 2011 +++ /trunk/dev/core/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java Wed May 18 09:39:13 2011
@@ -29,7 +29,7 @@
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
-import java.text.DecimalFormat;
+import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -691,24 +691,38 @@
       outFile.println("</colgroup>");
       outFile.println("<thead>");
       outFile.println("<th>Code type</th>");
- outFile.println("<th>Size <span class=\"soyc-th-units\">(Bytes)</span></th>");
+      outFile.println("<th>");
+      outFile.println("<th class=\"soyc-numerical-col-header\">");
+      outFile.println("Size <span class=\"soyc-th-units\">(Bytes)</span>");
+      outFile.println("</th>");
+ outFile.println("<th class=\"soyc-numerical-col-header\">% of total</th>");
       outFile.println("</thead>");
+
+      NumberFormat bytesFormatter = NumberFormat.getInstance();
+      bytesFormatter.setGroupingUsed(true);
+
+      NumberFormat percentFormatter = NumberFormat.getPercentInstance();
+      percentFormatter.setMinimumFractionDigits(1);
+      percentFormatter.setMaximumFractionDigits(1);

       for (Integer size : sortedClasses.keySet()) {
         Set<String> classNames = sortedClasses.get(size);
         for (String className : classNames) {
-          float perc = ((float) size / sumSize) * 100;
+          float perc = (float) size / sumSize;
           outFile.println("<tr>");
           outFile.println("<td>" + className + "</a></td>");
-          outFile.println("<td>");
+          outFile.println("<td class=\"soyc-bargraph-col\">");
outFile.println("<div class=\"soyc-bar-graph goog-inline-block\">");
           // CHECKSTYLE_OFF
           outFile.println("<div style=\"width:" + perc
+ "%;\" class=\"soyc-bar-graph-fill goog-inline-block\"></div>");
           // CHECKSTYLE_ON
           outFile.println("</div>");
-          outFile.println(size + " (" + formatNumber(perc) + "%)");
           outFile.println("</td>");
+          outFile.println("<td class=\"soyc-numerical-col\">");
+          outFile.println(bytesFormatter.format(size));
+          outFile.println("</td>");
+ outFile.println("<td class=\"soyc-percent-col\">" + percentFormatter.format(perc) + "</td>");
           outFile.println("</tr>");
         }
       }
@@ -726,7 +740,12 @@
     String title = "Compiler Metrics for Permutation "
         + compilationMetrics.getPermuationId();
     addStandardHtmlProlog(outFile, title, title, "Build Time Metrics");
-
+
+    NumberFormat elapsedFormatter = NumberFormat.getInstance();
+    elapsedFormatter.setGroupingUsed(true);
+    elapsedFormatter.setMinimumFractionDigits(3);
+    elapsedFormatter.setMaximumFractionDigits(3);
+
     outFile.println("<div id=\"bd\">");
     int permutationId = compilationMetrics.getPermuationId();

@@ -738,14 +757,15 @@
     outFile.println("</colgroup>");
     outFile.println("<thead>");
     outFile.println("<th>Phase</th>");
-    outFile.println("<th>Elapsed Time</th>");
+ outFile.println("<th class=\"soyc-numerical-col-header\">Elapsed Time</th>");
     outFile.println("</thead>");

     outFile.println("<tr>");
     outFile.println("<td>");
     outFile.println("Module Analysis");
     outFile.println("</td>");
- outFile.println("<td>" + moduleMetrics.getElapsedMilliseconds() + " ms");
+    outFile.println("<td class=\"soyc-numerical-col\">"
+ + elapsedFormatter.format(moduleMetrics.getElapsedMilliseconds() / 1000.0) + " s");
     outFile.println("</td>");
     outFile.println("</tr>");

@@ -753,8 +773,9 @@
     outFile.println("<td>");
     outFile.println("Precompile (may include Module Analysis)");
     outFile.println("</td>");
-    outFile.println("<td>" + precompilationMetrics.getElapsedMilliseconds()
-        + " ms");
+    outFile.println("<td class=\"soyc-numerical-col\">"
+ + elapsedFormatter.format(precompilationMetrics.getElapsedMilliseconds() / 1000.0)
+        + " s");
     outFile.println("</td>");
     outFile.println("</tr>");

@@ -762,11 +783,15 @@
     outFile.println("<td>");
     outFile.println("Compile");
     outFile.println("</td>");
-    outFile.println("<td>" + compilationMetrics.getElapsedMilliseconds()
-        + " ms");
+    outFile.println("<td class=\"soyc-numerical-col\">"
+ + elapsedFormatter.format(compilationMetrics.getElapsedMilliseconds() / 1000.0)
+        + " s");
     outFile.println("</td>");
     outFile.println("</tr>");
     outFile.println("</table>");
+
+    NumberFormat referencesFormatter = NumberFormat.getInstance();
+    referencesFormatter.setGroupingUsed(true);

     outFile.println("<p></p>");
     outFile.println("<h2>Source/Type Metrics</h2>");
@@ -778,7 +803,7 @@
     outFile.println("</colgroup>");
     outFile.println("<thead>");
     outFile.println("<th>Description</th>");
-    outFile.println("<th>References</th>");
+ outFile.println("<th class=\"soyc-numerical-col-header\">References</th>");
     outFile.println("</thead>");

     String sourcesFileName = "CompilerMetrics-sources.html";
@@ -790,8 +815,8 @@
     addPopupLink(outFile, popupName, popupTitle, sourcesFileName);
     addPopup(outFile, popupName, popupTitle, popupBody);
     outFile.println("</td>");
-    outFile.println("<td>");
-    outFile.println("" + moduleMetrics.getSourceFiles().length);
+    outFile.println("<td class=\"soyc-numerical-col\">");
+ outFile.println(referencesFormatter.format(moduleMetrics.getSourceFiles().length));
     outFile.println("</td>");
     outFile.println("</tr>");
     makeCompilerMetricsSources(sourcesFileName, moduleMetrics, popupBody);
@@ -806,8 +831,8 @@
     addPopupLink(outFile, popupName, popupTitle, initialTypesFileName);
     addPopup(outFile, popupName, popupTitle, popupBody);
     outFile.println("</td>");
-    outFile.println("<td>");
-    outFile.println("" + moduleMetrics.getInitialTypes().length);
+    outFile.println("<td class=\"soyc-numerical-col\">");
+ outFile.println(referencesFormatter.format(moduleMetrics.getInitialTypes().length));
     outFile.println("</td>");
     outFile.println("</tr>");
     makeCompilerMetricsInitialTypeOracleTypes(initialTypesFileName,
@@ -823,8 +848,9 @@
     addPopupLink(outFile, popupName, popupTitle, finalTypesFileName);
     addPopup(outFile, popupName, popupTitle, popupBody);
     outFile.println("</td>");
-    outFile.println("<td>");
- outFile.println("" + precompilationMetrics.getFinalTypeOracleTypes().length);
+    outFile.println("<td class=\"soyc-numerical-col\">");
+    outFile.println(referencesFormatter.format(
+        precompilationMetrics.getFinalTypeOracleTypes().length));
     outFile.println("</td>");
     outFile.println("</tr>");
     makeCompilerMetricsFinalTypeOracleTypes(finalTypesFileName,
@@ -842,8 +868,8 @@
     addPopupLink(outFile, popupName, popupTitle, generatedTypesFileName);
     addPopup(outFile, popupName, popupTitle, popupBody);
     outFile.println("</td>");
-    outFile.println("<td>");
-    outFile.println("" + generatedTypes.length);
+    outFile.println("<td class=\"soyc-numerical-col\">");
+    outFile.println(referencesFormatter.format(generatedTypes.length));
     outFile.println("</td>");
     outFile.println("</tr>");
makeCompilerMetricsGeneratedTypes(generatedTypesFileName, generatedTypes,
@@ -859,8 +885,8 @@
     addPopupLink(outFile, popupName, popupTitle, astFileName);
     addPopup(outFile, popupName, popupTitle, popupBody);
     outFile.println("</td>");
-    outFile.println("<td>");
-    outFile.println("" + precompilationMetrics.getAstTypes().length);
+    outFile.println("<td class=\"soyc-numerical-col\">");
+ outFile.println(referencesFormatter.format(precompilationMetrics.getAstTypes().length));
     outFile.println("</td>");
     outFile.println("</tr>");
makeCompilerMetricsAstTypes(astFileName, precompilationMetrics, popupBody);
@@ -877,8 +903,8 @@
     addPopupLink(outFile, popupName, popupTitle, unreferencedFileName);
     addPopup(outFile, popupName, popupTitle, popupBody);
     outFile.println("</td>");
-    outFile.println("<td>");
-    outFile.println("" + unreferencedTypes.length);
+    outFile.println("<td class=\"soyc-numerical-col\">");
+    outFile.println(referencesFormatter.format(unreferencedTypes.length));
     outFile.println("</td>");
     outFile.println("</tr>");
     makeCompilerMetricsUnreferencedTypes(unreferencedFileName,
@@ -1009,14 +1035,25 @@
         outFile.print("<thead>");
         outFile.print("<a name=\"" + hashedFilenameFragment(packageName)
             + "\"></a><th>Package: " + packageName + "</th>");
- outFile.print("<th>Size <span class=\"soyc-th-units\">(Bytes)</span></th>");
+        outFile.println("<th></th>");
+        outFile.println("<th class=\"soyc-numerical-col-header\">");
+ outFile.println("Size <span class=\"soyc-th-units\">(Bytes)</span>");
+        outFile.println("</th>");
+ outFile.println("<th class=\"soyc-numerical-col-header\">% of total</th>");
         outFile.print("</thead>");
+
+        NumberFormat bytesFormatter = NumberFormat.getInstance();
+        bytesFormatter.setGroupingUsed(true);
+
+        NumberFormat percentFormatter = NumberFormat.getPercentInstance();
+        percentFormatter.setMinimumFractionDigits(1);
+        percentFormatter.setMaximumFractionDigits(1);

         for (Integer size : sortedClasses.keySet()) {
           Set<String> classNames = sortedClasses.get(size);
           for (String className : classNames) {
String drillDownFileName = depLinker.dependencyLinkForClass(className);
-            float perc = ((float) size / (float) sumSize) * 100;
+            float perc = (float) size / (float) sumSize;
             outFile.println("<tr>");
             if (drillDownFileName == null) {
               outFile.println("<td>" + className + "</td>");
@@ -1024,15 +1061,18 @@
               outFile.println("<td><a href=\"" + drillDownFileName
                   + "\" target=\"_top\">" + className + "</a></td>");
             }
-            outFile.print("<td>");
- outFile.print("<div class=\"soyc-bar-graph goog-inline-block\">");
+            outFile.println("<td class=\"soyc-bargraph-col\">");
+ outFile.println("<div class=\"soyc-bar-graph goog-inline-block\">");
             // CHECKSTYLE_OFF
-            outFile.print("<div style=\"width:" + perc
+            outFile.println("<div style=\"width:" + perc
+ "%;\" class=\"soyc-bar-graph-fill goog-inline-block\"></div>");
             // CHECKSTYLE_ON
-            outFile.print("</div>");
-            outFile.print(size + " (" + formatNumber(perc) + "%)");
-            outFile.print("</td>");
+            outFile.println("</div>");
+            outFile.println("</td>");
+            outFile.println("<td class=\"soyc-numerical-col\">");
+            outFile.println(bytesFormatter.format(size));
+            outFile.println("</td>");
+ outFile.println("<td class=\"soyc-percent-col\">" + percentFormatter.format(perc) + "</td>");
             outFile.println("</tr>");
           }
         }
@@ -1104,13 +1144,17 @@

     addStandardHtmlProlog(outFile, "Compile report: Permutation "
+ permutationId, "Compile report: Permutation " + permutationId, "");
+
+    NumberFormat bytesFormatter = NumberFormat.getInstance();
+    bytesFormatter.setGroupingUsed(true);

     outFile.println("<div id=\"bd\">");
     outFile.println("<div id=\"soyc-summary\" class=\"g-section\">");
     outFile.println("<dl>");
     outFile.println("<dt>Full code size</dt>");
     outFile.println("<dd class=\"value\">"
- + globalInformation.getTotalCodeBreakdown().sizeAllCode + " Bytes</dd>"); + + bytesFormatter.format(globalInformation.getTotalCodeBreakdown().sizeAllCode)
+        + " Bytes</dd>");
     outFile.println("<dd class=\"report\"><a href=\"total-" + permutationId
         + "-overallBreakdown.html\">Report</a></dd>");

@@ -1119,7 +1163,7 @@
     outFile.println("<dt>Initial download size</dt>");
     // TODO(kprobst) -- add percentage here: (48%)</dd>");
     outFile.println("<dd class=\"value\">"
-        + globalInformation.getInitialCodeBreakdown().sizeAllCode
+ + bytesFormatter.format(globalInformation.getInitialCodeBreakdown().sizeAllCode)
         + " Bytes</dd>");
outFile.println("<dd class=\"report\"><a href=\"initial-" + permutationId
         + "-overallBreakdown.html\">Report</a></dd>");
@@ -1128,7 +1172,8 @@

     outFile.println("<dt>Left over code</dt>");
     outFile.println("<dd class=\"value\">"
- + globalInformation.getLeftoversBreakdown().sizeAllCode + " Bytes</dd>"); + + bytesFormatter.format(globalInformation.getLeftoversBreakdown().sizeAllCode)
+        + " Bytes</dd>");
outFile.println("<dd class=\"report\"><a href=\"leftovers-" + permutationId
         + "-overallBreakdown.html\">Report</a></dd>");
     outFile.println("</dl>");
@@ -1147,9 +1192,17 @@

     outFile.println("<th>#</th>");
     outFile.println("<th>Location</th>");
- outFile.println("<th>Size <span class=\"soyc-th-units\">(Bytes)</span></th>");
+    outFile.println("<th></th>");
+    outFile.println("<th class=\"soyc-numerical-col-header\">");
+    outFile.println("Size <span class=\"soyc-th-units\">(Bytes)</span>");
+    outFile.println("</th>");
+ outFile.println("<th class=\"soyc-numerical-col-header\">% of total</th>");
     outFile.println("</thead>");
     outFile.println("<tbody>");
+
+    NumberFormat percentFormatter = NumberFormat.getPercentInstance();
+    percentFormatter.setMinimumFractionDigits(1);
+    percentFormatter.setMaximumFractionDigits(1);

     if (globalInformation.getSplitPointToLocation().size() >= 1) {

@@ -1173,22 +1226,24 @@
             i);

         int size = breakdown.sizeAllCode;
-        float perc;
-        perc = ((float) size / (float) maxSize) * 100;
+        float perc = (float) size / (float) maxSize;

         outFile.println("<tr>");
         outFile.println("<td>" + i + "</td>");
         outFile.println("<td><a href=\"" + drillDownFileName + "\">"
             + splitPointDescription + "</a></td>");
-        outFile.println("<td>");
+        outFile.println("<td class=\"soyc-bargraph-col\">");
outFile.println("<div class=\"soyc-bar-graph goog-inline-block\">");
         // CHECKSTYLE_OFF
         outFile.println("<div style=\"width:" + perc
+ "%;\" class=\"soyc-bar-graph-fill goog-inline-block\"></div>");
         // CHECKSTYLE_ON
         outFile.println("</div>");
-        outFile.println(size + " Bytes (" + formatNumber(perc) + "%)");
         outFile.println("</td>");
+        outFile.println("<td class=\"soyc-numerical-col\">");
+        outFile.println(bytesFormatter.format(size));
+        outFile.println("</td>");
+ outFile.println("<td class=\"soyc-percent-col\">" + percentFormatter.format(perc) + "</td>");
         outFile.println("</tr>");
       }
     }
@@ -1228,17 +1283,6 @@
         + hashedFilenameFragment(packageName) + "-" + getPermutationId()
         + ".html";
   }
-
-  /**
-   * Format floating point number to two decimal points.
-   *
-   * @param number
-   * @return formatted number
-   */
-  private String formatNumber(float number) {
-    DecimalFormat formatBy = new DecimalFormat("#.##");
-    return formatBy.format(number);
-  }

   private String[] getGeneratedTypes(ModuleMetricsArtifact moduleMetrics,
       PrecompilationMetricsArtifact precompilationMetrics) {
@@ -1367,27 +1411,41 @@
     outFile.println("</colgroup>");
     outFile.println("<thead>");
     outFile.println("<th>Type</th>");
- outFile.println("<th>Size <span class=\"soyc-th-units\">(Bytes)</span></th>");
+    outFile.println("<th></th>");
+    outFile.println("<th class=\"soyc-numerical-col-header\">");
+    outFile.println("Size <span class=\"soyc-th-units\">(Bytes)</span>");
+    outFile.println("</th>");
+ outFile.println("<th class=\"soyc-numerical-col-header\">% of total</th>");
     outFile.println("</thead>");
+
+    NumberFormat bytesFormatter = NumberFormat.getInstance();
+    bytesFormatter.setGroupingUsed(true);
+
+    NumberFormat percentFormatter = NumberFormat.getPercentInstance();
+    percentFormatter.setMinimumFractionDigits(1);
+    percentFormatter.setMaximumFractionDigits(1);

     for (Integer size : sortedCodeTypes.keySet()) {
       Set<String> codeTypes = sortedCodeTypes.get(size);
       for (String codeType : codeTypes) {
         String drillDownFileName = breakdown.getId() + "_" + codeType + "-"
             + getPermutationId() + "Classes.html";
-        float perc = ((float) size / (float) sumSize) * 100;
+        float perc = (float) size / (float) sumSize;
         outFile.println("<tr>");
         outFile.println("<td><a href=\"" + drillDownFileName
             + "\" target=\"_top\">" + codeType + "</a></td>");
-        outFile.println("<td>");
+        outFile.println("<td class=\"soyc-bargraph-col\">");
outFile.println("<div class=\"soyc-bar-graph goog-inline-block\">");
         // CHECKSTYLE_OFF
         outFile.println("<div style=\"width:" + perc
+ "%;\" class=\"soyc-bar-graph-fill goog-inline-block\"></div>");
         // CHECKSTYLE_ON
         outFile.println("</div>");
-        outFile.println(size + " (" + formatNumber(perc) + "%)");
         outFile.println("</td>");
+        outFile.println("<td class=\"soyc-numerical-col\">");
+        outFile.println(bytesFormatter.format(size));
+        outFile.println("</td>");
+ outFile.println("<td class=\"soyc-percent-col\">" + percentFormatter.format(perc) + "</td>");
         outFile.println("</tr>");
       }
     }
@@ -1665,8 +1723,19 @@
     outFile.println("</colgroup>");
     outFile.println("<thead>");
     outFile.println("<th>Packages (Sorted by size)</th>");
- outFile.println("<th>Size <span class=\"soyc-th-units\">(Bytes)</span></th>");
+    outFile.println("<th></th>");
+    outFile.println("<th class=\"soyc-numerical-col-header\">");
+    outFile.println("Size <span class=\"soyc-th-units\">(Bytes)</span>");
+    outFile.println("</th>");
+ outFile.println("<th class=\"soyc-numerical-col-header\">% of total</th>");
     outFile.println("</thead>");
+
+    NumberFormat bytesFormatter = NumberFormat.getInstance();
+    bytesFormatter.setGroupingUsed(true);
+
+    NumberFormat percentFormatter = NumberFormat.getPercentInstance();
+    percentFormatter.setMinimumFractionDigits(1);
+    percentFormatter.setMaximumFractionDigits(1);

     for (int size : sortedPackages.keySet()) {
       if (size == 0) {
@@ -1677,19 +1746,22 @@
         String drillDownFileName = classesInPackageFileName(breakdown,
             getPermutationId())
             + "#" + hashedFilenameFragment(packageName);
-        float perc = (size / sumSize) * 100;
+        float perc = size / sumSize;
         outFile.println("<tr>");
         outFile.println("<td><a href=\"" + drillDownFileName
             + "\" target=\"_top\">" + packageName + "</a></td>");
-        outFile.println("<td>");
+        outFile.println("<td class=\"soyc-bargraph-col\">");
outFile.println("<div class=\"soyc-bar-graph goog-inline-block\">");
         // CHECKSTYLE_OFF
         outFile.println("<div style=\"width:" + perc
+ "%;\" class=\"soyc-bar-graph-fill goog-inline-block\"></div>");
         // CHECKSTYLE_ON
         outFile.println("</div>");
-        outFile.println(size + " (" + formatNumber(perc) + "%)");
         outFile.println("</td>");
+        outFile.println("<td class=\"soyc-numerical-col\">");
+        outFile.println(bytesFormatter.format(size));
+        outFile.println("</td>");
+ outFile.println("<td class=\"soyc-percent-col\">" + percentFormatter.format(perc) + "</td>");
         outFile.println("</tr>");
       }
     }
=======================================
--- /trunk/dev/core/src/com/google/gwt/soyc/resources/soyc.css Tue Nov 23 04:15:32 2010 +++ /trunk/dev/core/src/com/google/gwt/soyc/resources/soyc.css Wed May 18 09:39:13 2011
@@ -183,10 +183,25 @@
 }
 .soyc-table thead th {
   font-weight:bold;
-  text-align:left;
   background:#c5d7ef;
   vertical-align:bottom
 }
+.soyc-numerical-col-header {
+  text-align: right;
+}
+.soyc-bargraph-col {
+  text-align: right;
+}
+.soyc-numerical-col {
+  text-align: right;
+  font-family: monospace;
+  width: 10em;
+}
+.soyc-percent-col {
+  text-align: right;
+  font-family: monospace;
+  width: 10em;
+}
 .soyc-table tfoot tr td {
   border-top:1px solid #c5d7ef;
   background-color:#e5ecf9

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to