changeset 9:ea127a38d603

Legend.
author shade
date Wed, 14 Dec 2016 22:27:14 +0100
parents 8dc27cf89d58
children fc25e75f82ee
files src/main/java/org/openjdk/shenandoah/RegionStat.java src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java
diffstat 2 files changed, 45 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/openjdk/shenandoah/RegionStat.java	Wed Dec 14 22:05:39 2016 +0100
+++ b/src/main/java/org/openjdk/shenandoah/RegionStat.java	Wed Dec 14 22:27:14 2016 +0100
@@ -17,6 +17,14 @@
     private final double liveLvl;
     private final double usedLvl;
 
+    public RegionStat(double usedLvl, double liveLvl, boolean unused, boolean humongous, boolean inCset) {
+        this.usedLvl = usedLvl;
+        this.liveLvl = liveLvl;
+        this.unused = unused;
+        this.humongous = humongous;
+        this.inCset = inCset;
+    }
+
     public RegionStat(long maxSize, long data) {
         long used = (data >>> USED_SHIFT) & USED_MASK;
         usedLvl = Math.min(1D, 1D * used / maxSize);
--- a/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java	Wed Dec 14 22:05:39 2016 +0100
+++ b/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java	Wed Dec 14 22:27:14 2016 +0100
@@ -77,7 +77,7 @@
         service.scheduleAtFixedRate(() -> {
             Snapshot cur = data.snapshot();
             if (!cur.equals(lastSnapshot)) {
-                render(cur);
+                renderedImage = render(cur, width, height);
                 lastSnapshot = cur;
             }
             frame.repaint();
@@ -93,7 +93,7 @@
 
     static volatile Snapshot lastSnapshot;
 
-    public static void render(Snapshot snapshot) {
+    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);
 
@@ -104,6 +104,10 @@
         final int PAD = 20;
         final int LINE = 30;
         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;
 
         // Draw white background
         g.setColor(Color.WHITE);
@@ -113,6 +117,36 @@
         g.setColor(Color.BLACK);
         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);
+
+        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);
+
+        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);
+
+        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);
+
+        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);
+
+        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);
+
+        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);
+
         // Draw status
         g.setColor(Color.BLACK);
         String status = "";
@@ -128,8 +162,6 @@
         g.drawString("Status: " + status, PAD, PAD + 1 * LINE);
 
         // Draw region field
-        int rectWidth = (img.getWidth() - 2*PAD) / cols;
-        int rectHeight = (img.getHeight() - (PAD + PAD_TOP)) / rows;
 
         for (int i = 0; i < snapshot.regionCount(); i++) {
             int rectx = PAD + (i % cols) * rectWidth;
@@ -140,8 +172,7 @@
         }
         g.dispose();
 
-        // publish
-        renderedImage = img;
+        return img;
     }
 
 }