changeset 11:9f6523b535b6

Print more interesting data.
author shade
date Wed, 14 Dec 2016 23:05:07 +0100
parents fc25e75f82ee
children 0d3cba812224
files src/main/java/org/openjdk/shenandoah/DataProvider.java src/main/java/org/openjdk/shenandoah/RegionStat.java src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java src/main/java/org/openjdk/shenandoah/Snapshot.java
diffstat 4 files changed, 83 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/openjdk/shenandoah/DataProvider.java	Wed Dec 14 22:40:22 2016 +0100
+++ b/src/main/java/org/openjdk/shenandoah/DataProvider.java	Wed Dec 14 23:05:07 2016 +0100
@@ -41,7 +41,7 @@
         boolean isMarking = (status.longValue() & 0x1) > 0;
         boolean isEvacuating = (status.longValue() & 0x2) > 0;
 
-        return new Snapshot(System.currentTimeMillis(), stats, isMarking, isEvacuating);
+        return new Snapshot(System.currentTimeMillis(), maxSize, stats, isMarking, isEvacuating);
     }
 
 }
--- a/src/main/java/org/openjdk/shenandoah/RegionStat.java	Wed Dec 14 22:40:22 2016 +0100
+++ b/src/main/java/org/openjdk/shenandoah/RegionStat.java	Wed Dec 14 23:05:07 2016 +0100
@@ -16,6 +16,7 @@
     private final boolean inCset;
     private final double liveLvl;
     private final double usedLvl;
+    private long ma;
 
     public RegionStat(double usedLvl, double liveLvl, boolean unused, boolean humongous, boolean inCset) {
         this.usedLvl = usedLvl;
@@ -103,4 +104,12 @@
         result = 31 * result + (int) (temp ^ (temp >>> 32));
         return result;
     }
+
+    public double live() {
+        return liveLvl;
+    }
+
+    public double used() {
+        return usedLvl;
+    }
 }
--- a/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java	Wed Dec 14 22:40:22 2016 +0100
+++ b/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java	Wed Dec 14 23:05:07 2016 +0100
@@ -29,6 +29,8 @@
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.awt.image.BufferedImage;
+import java.util.LinkedHashMap;
+import java.util.Map;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -41,6 +43,7 @@
     static volatile BufferedImage renderedImage;
     private static volatile int width;
     private static volatile int height;
+    static final long START_TIME = System.currentTimeMillis();
 
     static class VisPanel extends JPanel {
         public void paint(Graphics g) {
@@ -99,7 +102,7 @@
         Graphics g = img.getGraphics();
 
         final int PAD = 20;
-        final int LINE = 30;
+        final int LINE = 20;
         final int PAD_TOP = 100;
         final int PAD_RIGHT = 300;
 
@@ -113,38 +116,9 @@
         g.setColor(Color.WHITE);
         g.fillRect(0, 0, width, height);
 
-        // Draw time
+        // Draw extra data
         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;
-        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, 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, 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, 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, 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, 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, sqSize, sqSize);
-        g.drawString("1/3 Live + In Collection Set", LABEL_X, LEGEND_Y + 6 * LINE + sqSize);
+        g.drawString("Time: " + (snapshot.time() - START_TIME) + " ms", PAD, PAD);
 
         // Draw status
         g.setColor(Color.BLACK);
@@ -160,6 +134,50 @@
         }
         g.drawString("Status: " + status, PAD, PAD + 1 * LINE);
 
+        g.drawString("Total: " + (snapshot.total() / 1024 / 1024) + " MB", PAD, PAD + 2 * LINE);
+        g.drawString("Used: " + (snapshot.used() / 1024 / 1024) + " MB", PAD, PAD + 3 * LINE);
+        g.drawString("Live: " + (snapshot.live() / 1024 / 1024) + " MB", PAD, PAD + 4 * LINE);
+
+        // Draw legend
+        final int LEGEND_X = PAD + fieldWidth + sqSize;
+        final int LEGEND_Y = PAD_TOP;
+
+        Map<String, RegionStat> items = new LinkedHashMap<>();
+
+        items.put("Unused",
+                new RegionStat(0.0, 0.0, true, false, false));
+
+        items.put("Empty",
+                new RegionStat(0.0, 0.0, false, false, false));
+
+        items.put("1/2 Used",
+                new RegionStat(0.5, 0.0, false, false, false));
+
+        items.put("Fully Used",
+                new RegionStat(1.0, 0.0, false, false, false));
+
+        items.put("Fully Live",
+                new RegionStat(1.0, 1.0, false, false, false));
+
+        items.put("Fully Live + Humongous",
+                new RegionStat(1.0, 1.0, false, true, false));
+
+        items.put("1/3 Live",
+                new RegionStat(1.0, 0.3, false, false, false));
+
+        items.put("1/3 Live + In Collection Set",
+                new RegionStat(1.0, 0.3, false, false, true));
+
+        {
+            int i = 1;
+            for (String key : items.keySet()) {
+                int y = (int) (LEGEND_Y + i * sqSize * 1.5);
+                items.get(key).render(g, LEGEND_X, y, sqSize, sqSize);
+                g.drawString(key, (int) (LEGEND_X + sqSize * 1.5), y + sqSize);
+                i++;
+            }
+        }
+
         // Draw region field
 
         for (int i = 0; i < snapshot.regionCount(); i++) {
--- a/src/main/java/org/openjdk/shenandoah/Snapshot.java	Wed Dec 14 22:40:22 2016 +0100
+++ b/src/main/java/org/openjdk/shenandoah/Snapshot.java	Wed Dec 14 23:05:07 2016 +0100
@@ -5,12 +5,14 @@
 public class Snapshot {
 
     private final long time;
+    private final long regionSize;
     private final List<RegionStat> stats;
     private final boolean isMarking;
     private final boolean isEvacuating;
 
-    public Snapshot(long time, List<RegionStat> stats, boolean isMarking, boolean isEvacuating) {
+    public Snapshot(long time, long regionSize, List<RegionStat> stats, boolean isMarking, boolean isEvacuating) {
         this.time = time;
+        this.regionSize = regionSize;
         this.stats = stats;
         this.isMarking = isMarking;
         this.isEvacuating = isEvacuating;
@@ -55,4 +57,24 @@
     public int regionCount() {
         return stats.size();
     }
+
+    public long total() {
+        return regionSize * regionCount();
+    }
+
+    public long used() {
+        long used = 0L;
+        for (RegionStat rs : stats) {
+            used += regionSize * rs.used();
+        }
+        return used;
+    }
+
+    public long live() {
+        long live = 0L;
+        for (RegionStat rs : stats) {
+            live += regionSize * rs.live();
+        }
+        return live;
+    }
 }