changeset 10:fc25e75f82ee

Always square regions.
author shade
date Wed, 14 Dec 2016 22:40:22 +0100
parents ea127a38d603
children 9f6523b535b6
files src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java
diffstat 1 files changed, 21 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java	Wed Dec 14 22:27:14 2016 +0100
+++ b/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java	Wed Dec 14 22:40:22 2016 +0100
@@ -94,9 +94,6 @@
     static volatile Snapshot lastSnapshot;
 
     public static BufferedImage render(Snapshot snapshot, int width, int height) {
-        int cols = (int) Math.floor(Math.sqrt(snapshot.regionCount()));
-        int rows = (int) Math.floor(snapshot.regionCount() / cols);
-
         BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
 
         Graphics g = img.getGraphics();
@@ -106,8 +103,11 @@
         final int PAD_TOP = 100;
         final int PAD_RIGHT = 300;
 
-        int rectWidth = (img.getWidth() - (PAD + PAD_RIGHT)) / cols;
-        int rectHeight = (img.getHeight() - (PAD + PAD_TOP)) / rows;
+        int fieldWidth = img.getWidth() - (PAD + PAD_RIGHT);
+        int fieldHeight = img.getHeight() - (PAD + PAD_TOP);
+        int area = fieldWidth * fieldHeight;
+        int sqSize = (int) Math.sqrt(1D * area / snapshot.regionCount());
+        int cols = fieldWidth / sqSize;
 
         // Draw white background
         g.setColor(Color.WHITE);
@@ -118,34 +118,33 @@
         g.drawString(String.valueOf(snapshot.time()), PAD, PAD);
 
         // Draw legend
-
         final int LEGEND_X = width - PAD_RIGHT;
         final int LEGEND_Y = PAD_TOP;
-        int LABEL_X = (int) (LEGEND_X + rectWidth * 1.5);
+        final int LABEL_X = (int) (LEGEND_X + sqSize * 1.5);
 
         new RegionStat(0.0, 0.0, true, false, false)
-                .render(g, LEGEND_X, LEGEND_Y + 1 * LINE, rectWidth, rectHeight);
-        g.drawString("Unused", LABEL_X, LEGEND_Y + 1 * LINE + rectHeight);
+                .render(g, LEGEND_X, LEGEND_Y + 1 * LINE, sqSize, sqSize);
+        g.drawString("Unused", LABEL_X, LEGEND_Y + 1 * LINE + sqSize);
 
         new RegionStat(0.0, 0.0, false, false, false)
-                .render(g, LEGEND_X, LEGEND_Y + 2 * LINE, rectWidth, rectHeight);
-        g.drawString("Empty", LABEL_X, LEGEND_Y + 2 * LINE + rectHeight);
+                .render(g, LEGEND_X, LEGEND_Y + 2 * LINE, sqSize, sqSize);
+        g.drawString("Empty", LABEL_X, LEGEND_Y + 2 * LINE + sqSize);
 
         new RegionStat(1.0, 1.0, false, false, false)
-                .render(g, LEGEND_X, LEGEND_Y + 3 * LINE, rectWidth, rectHeight);
-        g.drawString("Live", LABEL_X, LEGEND_Y + 3 * LINE + rectHeight);
+                .render(g, LEGEND_X, LEGEND_Y + 3 * LINE, sqSize, sqSize);
+        g.drawString("Live", LABEL_X, LEGEND_Y + 3 * LINE + sqSize);
 
         new RegionStat(1.0, 1.0, false, true, false)
-                .render(g, LEGEND_X, LEGEND_Y + 4 * LINE, rectWidth, rectHeight);
-        g.drawString("Live + Humongous", LABEL_X, LEGEND_Y + 4 * LINE + rectHeight);
+                .render(g, LEGEND_X, LEGEND_Y + 4 * LINE, sqSize, sqSize);
+        g.drawString("Live + Humongous", LABEL_X, LEGEND_Y + 4 * LINE + sqSize);
 
         new RegionStat(1.0, 0.3, false, false, false)
-                .render(g, LEGEND_X, LEGEND_Y + 5 * LINE, rectWidth, rectHeight);
-        g.drawString("1/3 Live", LABEL_X, LEGEND_Y + 5 * LINE + rectHeight);
+                .render(g, LEGEND_X, LEGEND_Y + 5 * LINE, sqSize, sqSize);
+        g.drawString("1/3 Live", LABEL_X, LEGEND_Y + 5 * LINE + sqSize);
 
         new RegionStat(1.0, 0.3, false, false, true)
-                .render(g, LEGEND_X, LEGEND_Y + 6 * LINE, rectWidth, rectHeight);
-        g.drawString("1/3 Live + In Collection Set", LABEL_X, LEGEND_Y + 6 * LINE + rectHeight);
+                .render(g, LEGEND_X, LEGEND_Y + 6 * LINE, sqSize, sqSize);
+        g.drawString("1/3 Live + In Collection Set", LABEL_X, LEGEND_Y + 6 * LINE + sqSize);
 
         // Draw status
         g.setColor(Color.BLACK);
@@ -164,11 +163,11 @@
         // Draw region field
 
         for (int i = 0; i < snapshot.regionCount(); i++) {
-            int rectx = PAD + (i % cols) * rectWidth;
-            int recty = PAD + PAD_TOP + (i / rows) * rectHeight;
+            int rectx = PAD + (i % cols) * sqSize;
+            int recty = PAD + PAD_TOP + (i / cols) * sqSize;
 
             RegionStat s = snapshot.get(i);
-            s.render(g, rectx, recty, rectWidth, rectHeight);
+            s.render(g, rectx, recty, sqSize, sqSize);
         }
         g.dispose();