Sort and format. git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5649 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/tools/soyc-vis/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java b/tools/soyc-vis/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java index 500178c..ef11572 100644 --- a/tools/soyc-vis/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java +++ b/tools/soyc-vis/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java
@@ -130,8 +130,126 @@ return escaped; } - public void makeBreakdownShell(SizeBreakdown breakdown) - throws IOException { + /** + * Adds a header line indicating which breakdown is being analyzed. + */ + private static void addHeaderWithBreakdownContext(SizeBreakdown breakdown, + final PrintWriter outFile) { + outFile.println("<hr>"); + outFile.println("<b>(Analyzing code subset: " + breakdown.getDescription() + + ")</b>"); + outFile.println("<hr>"); + } + + private static String classesInPackageFileName(SizeBreakdown breakdown, + String packageName) { + return breakdown.getId() + "_" + packageName + "_Classes.html"; + } + + /** + * Convert a potentially long string into a short file name. The current + * implementation simply hashes the long name. + */ + private static String filename(String longFileName) { + try { + return Util.computeStrongName(longFileName.getBytes(Util.DEFAULT_ENCODING)); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + /** + * Return a {@link File} object for a file to be emitted into the output + * directory. + */ + private static File getOutFile(String localFileName) { + File outDir = new File(GlobalInformation.settings.out.get()); + return new File(outDir, localFileName); + } + + private static String makeCodeTypeHtml(SizeBreakdown breakdown, + Map<String, CodeCollection> nameToCodeColl) throws IOException { + String outFileName = breakdown.getId() + "_codeTypeBreakdown.html"; + float maxSize = 0f; + float sumSize = 0f; + TreeMap<Float, String> sortedCodeTypes = new TreeMap<Float, String>( + Collections.reverseOrder()); + + // TODO(kprobst): turn this into a multimap? + // com.google.common.collect.TreeMultimap + for (String codeType : nameToCodeColl.keySet()) { + float curSize = nameToCodeColl.get(codeType).getCumPartialSize(breakdown); + sumSize += curSize; + + if (curSize != 0f) { + sortedCodeTypes.put(curSize, codeType); + if (curSize > maxSize) { + maxSize = curSize; + } + } + } + + final PrintWriter outFile = new PrintWriter(getOutFile(outFileName)); + + outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\""); + outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">"); + outFile.println("<html>"); + outFile.println("<head>"); + outFile.println("<meta http-equiv=\"content-type\" content=\"text/html;charset=ISO-8859-1\">"); + outFile.println("<link rel=\"stylesheet\" href=\"roundedCorners.css\" media=\"screen\">"); + outFile.println("</head>"); + outFile.println("<body>"); + + int yOffset = 0; + for (Float size : sortedCodeTypes.keySet()) { + + String codeType = sortedCodeTypes.get(size); + String drillDownFileName = breakdown.getId() + "_" + codeType + + "Classes.html"; + + float ratio = (size / maxSize) * 79; + float perc = (size / sumSize) * 100; + + if (ratio < 3) { + ratio = 3; + } + + outFile.println("<div id=\"box\" style=\"width:" + ratio + "%; top: " + + yOffset + "px; left: 110px;\">"); + outFile.println("<div id=\"lb\">"); + outFile.println("<div id=\"rb\">"); + outFile.println("<div id=\"bb\"><div id=\"blc\"><div id=\"brc\">"); + outFile.println("<div id=\"tb\"><div id=\"tlc\"><div id=\"trc\">"); + outFile.println("<div id=\"content\">"); + outFile.println("</div>"); + outFile.println("</div></div></div></div>"); + outFile.println("</div></div></div></div>"); + outFile.println("</div>"); + + int yOffsetText = yOffset + 8; + outFile.printf("<div class=\"barlabel\" style=\"top:" + yOffsetText + + "px; left:5px;\">%.1f</div>\n", size); + outFile.printf("<div class=\"barlabel\" style=\"top:" + yOffsetText + + "px; left:70px;\">%.1f", perc); + outFile.println("%</div>\n"); + outFile.println("<div class=\"barlabel\" style=\"top:" + yOffsetText + + "px; left:110px;\"><a href=\"" + drillDownFileName + + "\" target=\"_top\">" + codeType + "</a></div>"); + + yOffset = yOffset + 25; + } + outFile.println("</body>"); + outFile.println("</html>"); + outFile.close(); + + return outFileName; + } + + private static String shellFileName(SizeBreakdown breakdown) { + return breakdown.getId() + "-overallBreakdown.html"; + } + + public void makeBreakdownShell(SizeBreakdown breakdown) throws IOException { // this will contain the place holder iframes where the actual information // is going to go. @@ -162,7 +280,8 @@ File outputDir = getOutFile("images"); copyFileOrDirectory(inputDir, outputDir, classPath, inputFileName, true); - final PrintWriter outFile = new PrintWriter(getOutFile(shellFileName(breakdown))); + final PrintWriter outFile = new PrintWriter( + getOutFile(shellFileName(breakdown))); outFile.println("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">"); outFile.println("<html>"); outFile.println("<head>"); @@ -343,6 +462,95 @@ } } + public void makeDependenciesHtml(Map<String, ArrayList<String>> dependencies) + throws IOException { + + String origOutFileName = "methodDependencies-"; + PrintWriter outFile = null; + String curPackageName = ""; + String curClassName = ""; + + for (String method : dependencies.keySet()) { + // this key set is already in alphabetical order + // get the package of this method, i.e., everything up to .[A-Z] + + String packageName = method; + packageName = packageName.replaceAll("\\.\\p{Upper}.*", ""); + + String className = method; + className = className.replaceAll("::.*", ""); + + if ((curPackageName.compareTo("") == 0) + || (curPackageName.compareTo(packageName) != 0)) { + + curPackageName = packageName; + if (outFile != null) { + // finish up the current file + outFile.println("</table>"); + outFile.println("<center>"); + + outFile.println("</div>"); + outFile.println("</body>"); + outFile.println("</html>"); + outFile.close(); + } + + String outFileName = origOutFileName + filename(curPackageName) + + ".html"; + outFile = new PrintWriter(getOutFile(outFileName)); + + outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\""); + outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">"); + outFile.println("<html>"); + outFile.println("<head>"); + outFile.println("<meta http-equiv=\"content-type\" content=\"text/html;charset=ISO-8859-1\">"); + outFile.println("<title>Method Dependencies</title>"); + outFile.println("</head>"); + + outFile.println("<style type=\"text/css\">"); + outFile.println("body {background-color: #728FCE}"); + outFile.println("h2 {background-color: transparent}"); + outFile.println("p {background-color: fuchsia}"); + outFile.println("</style>"); + + outFile.println("<body>"); + outFile.println("<center>"); + outFile.println("<h2>Method Dependencies for package " + curPackageName + + "</h2>"); + outFile.println("</center>"); + outFile.println("<hr>"); + + outFile.println("<center>"); + outFile.println("<table border=\"1\" width=\"80%\" style=\"font-size: 11pt;\" bgcolor=\"white\">"); + } + outFile.println("<tr>"); + if (curClassName.compareTo(className) != 0) { + outFile.println("<td width=\"80%\"><a name=\"" + className + "\">" + + "<a name=\"" + method + "\">" + method + + "</a></a><font color=\"green\"> called by</font></td>"); + curClassName = className; + } else { + outFile.println("<td width=\"80%\"><a name=\"" + method + "\">" + + method + "</a><font color=\"green\"> called by</font></td>"); + } + outFile.println("</tr>"); + + for (int i = 0; i < dependencies.get(method).size(); i++) { + String depMethod = dependencies.get(method).get(i); + + outFile.println("<tr>"); + outFile.println("<td width=\"20%\"></td>"); + if (i != dependencies.get(method).size() - 1) { + outFile.println("<td width=\"60%\">" + depMethod + + "<font color=\"green\"> called by</font></td>"); + } else { + outFile.println("<td width=\"60%\">" + depMethod + "</td>"); + } + outFile.println("</tr>"); + } + } + } + public void makeLiteralsClassesTableHtmls(SizeBreakdown breakdown) throws IOException { Map<String, LiteralsCollection> nameToLitColl = breakdown.nameToLitColl; @@ -377,14 +585,15 @@ outFile.println("<table border=\"1\" width=\"80%\" style=\"font-size: 11pt;\" bgcolor=\"white\">"); for (String literal : nameToLitColl.get(literalType).literalToLocations.keySet()) { - - if ((literalType.compareTo("string") != 0)||(nameToLitColl.get("string").stringLiteralToType.get(literal).compareTo("otherStrings") != 0)){ - - + + if ((literalType.compareTo("string") != 0) + || (nameToLitColl.get("string").stringLiteralToType.get(literal).compareTo( + "otherStrings") != 0)) { + if (literal.trim().compareTo("") == 0) { literal = "[whitespace only string]"; } - + String newLiteral = ""; if (literal.length() > 80) { int i; @@ -398,22 +607,22 @@ } else { newLiteral = literal; } - + String escliteral = escapeXml(newLiteral); - + outFile.println("<tr>"); outFile.println("<td width=\"40%\">" + escliteral + "</td>"); - + int ct = 0; if ((nameToLitColl.containsKey(literalType)) && (nameToLitColl.get(literalType).literalToLocations.containsKey(literal))) { for (String location : nameToLitColl.get(literalType).literalToLocations.get(literal)) { - + if (ct > 0) { outFile.println("<tr>"); outFile.println("<td width=\"40%\"> </td>"); } - + String newLocation = ""; if (location.length() > 80) { int i; @@ -427,9 +636,9 @@ } else { newLocation = location; } - + outFile.println("<td width=\"40%\">" + newLocation + "</td>"); - + if (ct > 0) { outFile.println("</tr>"); } @@ -439,11 +648,11 @@ System.err.println("either literalType " + literalType + " not known, or no location for literal " + literal); } - + outFile.println("</tr>"); } } - + outFile.println("</table>"); outFile.println("<center>"); @@ -454,6 +663,145 @@ } } + /** + * Make size breakdowns for each package for one code collection. + */ + public void makePackageClassesHtmls(SizeBreakdown breakdown) + throws IOException { + for (String packageName : GlobalInformation.packageToClasses.keySet()) { + + TreeMap<Float, String> sortedClasses = new TreeMap<Float, String>( + Collections.reverseOrder()); + float maxSize = 0f; + + int maxDepCount = 1; + + for (String className : GlobalInformation.packageToClasses.get(packageName)) { + + float curSize = 0f; + if (!breakdown.classToPartialSize.containsKey(className)) { + // This class not present in this code collection + } else { + curSize = breakdown.classToPartialSize.get(className); + } + + int depCount = 0; + if (GlobalInformation.classToWhatItDependsOn.containsKey(className)) { + depCount = GlobalInformation.classToWhatItDependsOn.get(className).size(); + } + + if (curSize != 0f) { + + sortedClasses.put(curSize, className); + if (curSize > maxSize) { + maxSize = curSize; + } + if (depCount > maxDepCount) { + maxDepCount = depCount; + } + } + } + + PrintWriter outFile = new PrintWriter( + getOutFile(classesInPackageFileName(breakdown, packageName))); + + outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\""); + outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">"); + outFile.println("<html>"); + outFile.println("<head>"); + outFile.println("<meta http-equiv=\"content-type\" content=\"text/html;charset=ISO-8859-1\">"); + outFile.println("<link rel=\"stylesheet\" href=\"classLevel.css\" media=\"screen\">"); + outFile.println("<title>Classes in package \"" + packageName + + "\"</title>"); + outFile.println("</head>"); + outFile.println("<body>"); + + outFile.println("<center>"); + outFile.println("<h2>Classes in package \"" + packageName + "\"</h2>"); + addHeaderWithBreakdownContext(breakdown, outFile); + outFile.println("</center>"); + + outFile.println("<div style=\"width:90%; height:80%; overflow-y:auto; overflow-x:auto; top: 120px; left:70px; position:absolute; background-color:white\""); + + int yOffset = 0; + for (Float size : sortedClasses.keySet()) { + + String className = sortedClasses.get(size); + + // TODO(kprobst): switch out the commented/uncommented lines below when + // showing dependencies + // float ratio = (size / maxSize) * 45; + float ratio = (size / maxSize) * 85; + + if (ratio < 3) { + ratio = 3; + } + + // TODO(kprobst): not currently used, but will be for dependencies + // get the dependency count + int depCount = 0; + if (GlobalInformation.classToWhatItDependsOn.containsKey(className)) { + depCount = GlobalInformation.classToWhatItDependsOn.get(className).size(); + } + float depRatio = ((float) depCount / (float) maxDepCount) * 45f; + if (depRatio < 3.0) { + depRatio = 3; + } + + outFile.println("<div class=\"box\" style=\"width:" + ratio + + "%; top: " + yOffset + "px; left: 60px;\">"); + outFile.println("<div id=\"lb\">"); + outFile.println("<div id=\"rb\">"); + outFile.println("<div id=\"bb\"><div id=\"blc\"><div id=\"brc\">"); + outFile.println("<div id=\"tb\"><div id=\"tlc\"><div id=\"trc\">"); + outFile.println("<div id=\"content\">"); + outFile.println("</div>"); + outFile.println("</div></div></div></div>"); + outFile.println("</div></div></div></div>"); + outFile.println("</div>"); + + // TODO(kprobst): not currently used, but will be for dependencies + /* + * outFile.println("<div class=\"box-right\" style=\"width:" + depRatio + * + "%; top: " + yOffset + "px; left: 50%\">"); + * outFile.println("<div id=\"lb\">"); + * outFile.println("<div id=\"rb\">"); + * outFile.println("<div id=\"bb\"><div id=\"blc\"><div id=\"brc\">"); + * outFile.println("<div id=\"tb\"><div id=\"tlc\"><div id=\"trc\">"); + * outFile.println("<div id=\"content\">"); outFile.println("</div>"); + * outFile.println("</div></div></div></div>"); + * outFile.println("</div></div></div></div>"); + * outFile.println("</div>"); + */ + + int yOffsetText = yOffset + 8; + outFile.printf("<div class=\"barlabel\" style=\"top:" + yOffsetText + + "px; left:5px;\">%.1f</div>\n", size); + if (GlobalInformation.displayDependencies == true) { + outFile.println("<div class=\"barlabel\" style=\"top:" + yOffsetText + + "px; left:70px;\"><a href=\"methodDependencies-" + + filename(packageName) + ".html#" + className + "\">" + + className + "</a></div>"); + } else { + outFile.println("<div class=\"barlabel\" style=\"top:" + yOffsetText + + "px; left:70px;\">" + className + "</div>"); + } + /* + * //TODO(kprobst) make this a link String drillDownFileName = className + * + "Deps.html"; outFile.println("<div class=\"barlabel\" style=\"top:" + * + yOffsetText + "px; left:50%;\"><a href=\"" + drillDownFileName + + * "\" target=\"_top\">Dependencies: " + depCount + "</a></div>"); + */ + yOffset = yOffset + 25; + } + + outFile.println("</div>"); + outFile.println("</body>"); + outFile.println("</html>"); + outFile.close(); + } + } + public void makeStringLiteralsClassesTableHtmls(SizeBreakdown breakdown) throws IOException { Map<String, LiteralsCollection> nameToLitColl = breakdown.nameToLitColl; @@ -482,26 +830,26 @@ outFile.println("<h2>Literals of type \"" + literalType + "\"</h2>"); addHeaderWithBreakdownContext(breakdown, outFile); outFile.println("</center>"); - - if (literalType.compareTo("otherStrings") == 0){ + + if (literalType.compareTo("otherStrings") == 0) { outFile.println("<center>"); outFile.println("(JavaScript variable names are not displayed.)"); outFile.println("</center>"); } - else{ + else { outFile.println("<center>"); outFile.println("<table border=\"1\" width=\"80%\" style=\"font-size: 11pt;\" bgcolor=\"white\">"); - + for (String literal : nameToLitColl.get("string").stringLiteralToType.keySet()) { - + if (nameToLitColl.get("string").stringLiteralToType.get(literal).compareTo( literalType) == 0) { - + if (literal.trim().compareTo("") == 0) { literal = "[whitespace only string]"; } - + String newLiteral = ""; if (literal.length() > 80) { int i; @@ -515,26 +863,33 @@ } else { newLiteral = literal; } - + String escliteral = escapeXml(newLiteral); - + outFile.println("<tr>"); outFile.println("<td width=\"40%\">" + escliteral + "</td>"); - + int ct = 0; - + if (nameToLitColl.get("string").literalToLocations.containsKey(literal)) { - + for (String location : nameToLitColl.get("string").literalToLocations.get(literal)) { - - if ((location.indexOf("Line 0") == -1)&&(location.compareTo(GlobalInformation.backupLocation) != 0)){ //i.e., if we actually know the location + + if ((location.indexOf("Line 0") == -1) + && (location.compareTo(GlobalInformation.backupLocation) != 0)) { // i.e., + // if + // we + // actually + // know + // the + // location if (ct > 0) { outFile.println("<tr>"); outFile.println("<td width=\"40%\"> </td>"); } - + String newLocation = ""; - if (location.length() > 80){ + if (location.length() > 80) { int i; for (i = 80; i < location.length(); i = i + 80) { String part1 = location.substring(i - 80, i); @@ -546,17 +901,19 @@ } else { newLocation = location; } - - outFile.println("<td width=\"40%\"> " + newLocation + " </td>"); - + + outFile.println("<td width=\"40%\"> " + newLocation + + " </td>"); + if (ct > 0) { outFile.println("</tr>"); } ct++; } } - if (ct == 0){ - outFile.println("<td width=\"40%\"> " + GlobalInformation.backupLocation + " </td>"); + if (ct == 0) { + outFile.println("<td width=\"40%\"> " + + GlobalInformation.backupLocation + " </td>"); } } else { System.err.println("no location given for string literal: " @@ -565,11 +922,11 @@ outFile.println("</tr>"); } } - + outFile.println("</table>"); outFile.println("<center>"); } - + outFile.println("</div>"); outFile.println("</body>"); outFile.println("</html>"); @@ -682,121 +1039,6 @@ outFile.close(); } - /** - * Adds a header line indicating which breakdown is being analyzed. - */ - private static void addHeaderWithBreakdownContext(SizeBreakdown breakdown, - final PrintWriter outFile) { - outFile.println("<hr>"); - outFile.println("<b>(Analyzing code subset: " + breakdown.getDescription() - + ")</b>"); - outFile.println("<hr>"); - } - - private static String classesInPackageFileName(SizeBreakdown breakdown, - String packageName) { - return breakdown.getId() + "_" + packageName + "_Classes.html"; - } - - /** - * Convert a potentially long string into a short file name. The current - * implementation simply hashes the long name. - */ - private static String filename(String longFileName) { - try { - return Util.computeStrongName(longFileName.getBytes(Util.DEFAULT_ENCODING)); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } - - /** - * Return a {@link File} object for a file to be emitted into the output - * directory. - */ - private static File getOutFile(String localFileName) { - File outDir = new File(GlobalInformation.settings.out.get()); - return new File(outDir, localFileName); - } - - private static String makeCodeTypeHtml(SizeBreakdown breakdown, - Map<String, CodeCollection> nameToCodeColl) throws IOException { - String outFileName = breakdown.getId() + "_codeTypeBreakdown.html"; - float maxSize = 0f; - float sumSize = 0f; - TreeMap<Float, String> sortedCodeTypes = new TreeMap<Float, String>( - Collections.reverseOrder()); - - // TODO(kprobst): turn this into a multimap? - // com.google.common.collect.TreeMultimap - for (String codeType : nameToCodeColl.keySet()) { - float curSize = nameToCodeColl.get(codeType).getCumPartialSize(breakdown); - sumSize += curSize; - - if (curSize != 0f) { - sortedCodeTypes.put(curSize, codeType); - if (curSize > maxSize) { - maxSize = curSize; - } - } - } - - final PrintWriter outFile = new PrintWriter(getOutFile(outFileName)); - - outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\""); - outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">"); - outFile.println("<html>"); - outFile.println("<head>"); - outFile.println("<meta http-equiv=\"content-type\" content=\"text/html;charset=ISO-8859-1\">"); - outFile.println("<link rel=\"stylesheet\" href=\"roundedCorners.css\" media=\"screen\">"); - outFile.println("</head>"); - outFile.println("<body>"); - - int yOffset = 0; - for (Float size : sortedCodeTypes.keySet()) { - - String codeType = sortedCodeTypes.get(size); - String drillDownFileName = breakdown.getId() + "_" + codeType - + "Classes.html"; - - float ratio = (size / maxSize) * 79; - float perc = (size / sumSize) * 100; - - if (ratio < 3) { - ratio = 3; - } - - outFile.println("<div id=\"box\" style=\"width:" + ratio + "%; top: " - + yOffset + "px; left: 110px;\">"); - outFile.println("<div id=\"lb\">"); - outFile.println("<div id=\"rb\">"); - outFile.println("<div id=\"bb\"><div id=\"blc\"><div id=\"brc\">"); - outFile.println("<div id=\"tb\"><div id=\"tlc\"><div id=\"trc\">"); - outFile.println("<div id=\"content\">"); - outFile.println("</div>"); - outFile.println("</div></div></div></div>"); - outFile.println("</div></div></div></div>"); - outFile.println("</div>"); - - int yOffsetText = yOffset + 8; - outFile.printf("<div class=\"barlabel\" style=\"top:" + yOffsetText - + "px; left:5px;\">%.1f</div>\n", size); - outFile.printf("<div class=\"barlabel\" style=\"top:" + yOffsetText - + "px; left:70px;\">%.1f", perc); - outFile.println("%</div>\n"); - outFile.println("<div class=\"barlabel\" style=\"top:" + yOffsetText - + "px; left:110px;\"><a href=\"" + drillDownFileName - + "\" target=\"_top\">" + codeType + "</a></div>"); - - yOffset = yOffset + 25; - } - outFile.println("</body>"); - outFile.println("</html>"); - outFile.close(); - - return outFileName; - } - private String makeLiteralsHtml(SizeBreakdown breakdown, Map<String, LiteralsCollection> nameToLitColl) throws IOException { String outFileName = breakdown.getId() + "_literalsBreakdown.html"; @@ -1029,236 +1271,4 @@ return outFileName; } - - private static String shellFileName(SizeBreakdown breakdown) { - return breakdown.getId() + "-overallBreakdown.html"; - } - - public void makeDependenciesHtml(Map<String, ArrayList<String>> dependencies) - throws IOException { - - String origOutFileName = "methodDependencies-"; - PrintWriter outFile = null; - String curPackageName = ""; - String curClassName = ""; - - for (String method : dependencies.keySet()) { - // this key set is already in alphabetical order - // get the package of this method, i.e., everything up to .[A-Z] - - String packageName = method; - packageName = packageName.replaceAll("\\.\\p{Upper}.*", ""); - - String className = method; - className = className.replaceAll("::.*", ""); - - if ((curPackageName.compareTo("") == 0) - || (curPackageName.compareTo(packageName) != 0)) { - - curPackageName = packageName; - if (outFile != null) { - // finish up the current file - outFile.println("</table>"); - outFile.println("<center>"); - - outFile.println("</div>"); - outFile.println("</body>"); - outFile.println("</html>"); - outFile.close(); - } - - String outFileName = origOutFileName + filename(curPackageName) - + ".html"; - outFile = new PrintWriter(getOutFile(outFileName)); - - outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\""); - outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">"); - outFile.println("<html>"); - outFile.println("<head>"); - outFile.println("<meta http-equiv=\"content-type\" content=\"text/html;charset=ISO-8859-1\">"); - outFile.println("<title>Method Dependencies</title>"); - outFile.println("</head>"); - - outFile.println("<style type=\"text/css\">"); - outFile.println("body {background-color: #728FCE}"); - outFile.println("h2 {background-color: transparent}"); - outFile.println("p {background-color: fuchsia}"); - outFile.println("</style>"); - - outFile.println("<body>"); - outFile.println("<center>"); - outFile.println("<h2>Method Dependencies for package " + curPackageName - + "</h2>"); - outFile.println("</center>"); - outFile.println("<hr>"); - - outFile.println("<center>"); - outFile.println("<table border=\"1\" width=\"80%\" style=\"font-size: 11pt;\" bgcolor=\"white\">"); - } - outFile.println("<tr>"); - if (curClassName.compareTo(className) != 0) { - outFile.println("<td width=\"80%\"><a name=\"" + className + "\">" - + "<a name=\"" + method + "\">" + method - + "</a></a><font color=\"green\"> called by</font></td>"); - curClassName = className; - } else { - outFile.println("<td width=\"80%\"><a name=\"" + method + "\">" - + method + "</a><font color=\"green\"> called by</font></td>"); - } - outFile.println("</tr>"); - - for (int i = 0; i < dependencies.get(method).size(); i++) { - String depMethod = dependencies.get(method).get(i); - - outFile.println("<tr>"); - outFile.println("<td width=\"20%\"></td>"); - if (i != dependencies.get(method).size() - 1) { - outFile.println("<td width=\"60%\">" + depMethod - + "<font color=\"green\"> called by</font></td>"); - } else { - outFile.println("<td width=\"60%\">" + depMethod + "</td>"); - } - outFile.println("</tr>"); - } - } - } - - /** - * Make size breakdowns for each package for one code collection. - */ - public void makePackageClassesHtmls(SizeBreakdown breakdown) - throws IOException { - for (String packageName : GlobalInformation.packageToClasses.keySet()) { - - TreeMap<Float, String> sortedClasses = new TreeMap<Float, String>( - Collections.reverseOrder()); - float maxSize = 0f; - - int maxDepCount = 1; - - for (String className : GlobalInformation.packageToClasses.get(packageName)) { - - float curSize = 0f; - if (!breakdown.classToPartialSize.containsKey(className)) { - // This class not present in this code collection - } else { - curSize = breakdown.classToPartialSize.get(className); - } - - int depCount = 0; - if (GlobalInformation.classToWhatItDependsOn.containsKey(className)) { - depCount = GlobalInformation.classToWhatItDependsOn.get(className).size(); - } - - if (curSize != 0f) { - - sortedClasses.put(curSize, className); - if (curSize > maxSize) { - maxSize = curSize; - } - if (depCount > maxDepCount) { - maxDepCount = depCount; - } - } - } - - PrintWriter outFile = new PrintWriter( - getOutFile(classesInPackageFileName(breakdown, packageName))); - - outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\""); - outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">"); - outFile.println("<html>"); - outFile.println("<head>"); - outFile.println("<meta http-equiv=\"content-type\" content=\"text/html;charset=ISO-8859-1\">"); - outFile.println("<link rel=\"stylesheet\" href=\"classLevel.css\" media=\"screen\">"); - outFile.println("<title>Classes in package \"" + packageName - + "\"</title>"); - outFile.println("</head>"); - outFile.println("<body>"); - - outFile.println("<center>"); - outFile.println("<h2>Classes in package \"" + packageName + "\"</h2>"); - addHeaderWithBreakdownContext(breakdown, outFile); - outFile.println("</center>"); - - outFile.println("<div style=\"width:90%; height:80%; overflow-y:auto; overflow-x:auto; top: 120px; left:70px; position:absolute; background-color:white\""); - - int yOffset = 0; - for (Float size : sortedClasses.keySet()) { - - String className = sortedClasses.get(size); - - // TODO(kprobst): switch out the commented/uncommented lines below when - // showing dependencies - // float ratio = (size / maxSize) * 45; - float ratio = (size / maxSize) * 85; - - if (ratio < 3) { - ratio = 3; - } - - // TODO(kprobst): not currently used, but will be for dependencies - // get the dependency count - int depCount = 0; - if (GlobalInformation.classToWhatItDependsOn.containsKey(className)) { - depCount = GlobalInformation.classToWhatItDependsOn.get(className).size(); - } - float depRatio = ((float) depCount / (float) maxDepCount) * 45f; - if (depRatio < 3.0) { - depRatio = 3; - } - - outFile.println("<div class=\"box\" style=\"width:" + ratio - + "%; top: " + yOffset + "px; left: 60px;\">"); - outFile.println("<div id=\"lb\">"); - outFile.println("<div id=\"rb\">"); - outFile.println("<div id=\"bb\"><div id=\"blc\"><div id=\"brc\">"); - outFile.println("<div id=\"tb\"><div id=\"tlc\"><div id=\"trc\">"); - outFile.println("<div id=\"content\">"); - outFile.println("</div>"); - outFile.println("</div></div></div></div>"); - outFile.println("</div></div></div></div>"); - outFile.println("</div>"); - - // TODO(kprobst): not currently used, but will be for dependencies - /* - * outFile.println("<div class=\"box-right\" style=\"width:" + depRatio - * + "%; top: " + yOffset + "px; left: 50%\">"); - * outFile.println("<div id=\"lb\">"); - * outFile.println("<div id=\"rb\">"); - * outFile.println("<div id=\"bb\"><div id=\"blc\"><div id=\"brc\">"); - * outFile.println("<div id=\"tb\"><div id=\"tlc\"><div id=\"trc\">"); - * outFile.println("<div id=\"content\">"); outFile.println("</div>"); - * outFile.println("</div></div></div></div>"); - * outFile.println("</div></div></div></div>"); - * outFile.println("</div>"); - */ - - int yOffsetText = yOffset + 8; - outFile.printf("<div class=\"barlabel\" style=\"top:" + yOffsetText - + "px; left:5px;\">%.1f</div>\n", size); - if (GlobalInformation.displayDependencies == true) { - outFile.println("<div class=\"barlabel\" style=\"top:" + yOffsetText - + "px; left:70px;\"><a href=\"methodDependencies-" - + filename(packageName) + ".html#" + className + "\">" - + className + "</a></div>"); - } else { - outFile.println("<div class=\"barlabel\" style=\"top:" + yOffsetText - + "px; left:70px;\">" + className + "</div>"); - } - /* - * //TODO(kprobst) make this a link String drillDownFileName = className - * + "Deps.html"; outFile.println("<div class=\"barlabel\" style=\"top:" - * + yOffsetText + "px; left:50%;\"><a href=\"" + drillDownFileName + - * "\" target=\"_top\">Dependencies: " + depCount + "</a></div>"); - */ - yOffset = yOffset + 25; - } - - outFile.println("</div>"); - outFile.println("</body>"); - outFile.println("</html>"); - outFile.close(); - } - } }
diff --git a/tools/soyc-vis/src/com/google/gwt/soyc/SoycDashboard.java b/tools/soyc-vis/src/com/google/gwt/soyc/SoycDashboard.java index 64f7f70..2bf62b5 100644 --- a/tools/soyc-vis/src/com/google/gwt/soyc/SoycDashboard.java +++ b/tools/soyc-vis/src/com/google/gwt/soyc/SoycDashboard.java
@@ -380,7 +380,7 @@ if (curFragment == 0) { breakdowns.add(GlobalInformation.initialCodeBreakdown); } - if (curFragment == (GlobalInformation.numSplitPoints+1)) { + if (curFragment == (GlobalInformation.numSplitPoints + 1)) { breakdowns.add(GlobalInformation.leftoversBreakdown); } if (curFragment >= 1 && curFragment <= GlobalInformation.numSplitPoints) {