changeset 24:b3bcfd491862

Phase enum.
author shade
date Fri, 14 Apr 2017 20:02:16 +0200
parents 82fe7737b8b1
children 0aaf8f291161
files src/main/java/org/openjdk/shenandoah/DataProvider.java src/main/java/org/openjdk/shenandoah/Phase.java src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java src/main/java/org/openjdk/shenandoah/Snapshot.java src/main/java/org/openjdk/shenandoah/SnapshotView.java
diffstat 5 files changed, 76 insertions(+), 71 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/openjdk/shenandoah/DataProvider.java	Fri Apr 14 19:51:43 2017 +0200
+++ b/src/main/java/org/openjdk/shenandoah/DataProvider.java	Fri Apr 14 20:02:16 2017 +0200
@@ -48,12 +48,9 @@
             StringMonitor mtrx = matrix[c];
             stats.add(new RegionStat(maxSize, data[c].longValue(), (mtrx == null ? "" : mtrx.stringValue())));
         }
-        boolean isMarking    = (status.longValue() & 0x1) > 0;
-        boolean isEvacuating = (status.longValue() & 0x2) > 0;
-        boolean isUpdateRefs = (status.longValue() & 0x4) > 0;
 
         long time = timestamp.longValue();
-        return new Snapshot(time, maxSize, stats, isMarking, isEvacuating, isUpdateRefs);
+        return new Snapshot(time, maxSize, stats, (int) status.longValue());
     }
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/openjdk/shenandoah/Phase.java	Fri Apr 14 20:02:16 2017 +0200
@@ -0,0 +1,15 @@
+package org.openjdk.shenandoah;
+
+public enum Phase {
+
+    IDLE,
+
+    MARKING,
+
+    EVACUATING,
+
+    UPDATE_REFS,
+
+    UNKNOWN,
+
+}
\ No newline at end of file
--- a/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java	Fri Apr 14 19:51:43 2017 +0200
+++ b/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java	Fri Apr 14 20:02:16 2017 +0200
@@ -202,20 +202,23 @@
             for (SnapshotView s : lastSnapshots) {
                 int x = (int) Math.round((s.time() - firstTime) * stepX);
 
-                if (s.isMarking()) {
-                    g.setColor(new Color(100, 100, 0));
-                    g.drawRect(x, 0, 1, graphHeight);
+                switch (s.phase()) {
+                    case IDLE:
+                        g.setColor(Color.BLACK);
+                        break;
+                    case MARKING:
+                        g.setColor(new Color(100, 100, 0));
+                        break;
+                    case EVACUATING:
+                        g.setColor(new Color(100, 0, 0));
+                        break;
+                    case UPDATE_REFS:
+                        g.setColor(new Color(0, 100, 100));
+                        break;
+                    default:
+                        g.setColor(Color.WHITE);
                 }
-
-                if (s.isEvacuating()) {
-                    g.setColor(new Color(100, 0, 0));
-                    g.drawRect(x, 0, 1, graphHeight);
-                }
-
-                if (s.isUpdatingRefs()) {
-                    g.setColor(new Color(0, 100, 100));
-                    g.drawRect(x, 0, 1, graphHeight);
-                }
+                g.drawRect(x, 0, 1, graphHeight);
 
                 g.setColor(Colors.USED);
                 g.drawRect(x, (int) Math.round(graphHeight - s.used() * stepY), 1, 1);
@@ -308,17 +311,19 @@
 
         public synchronized void renderStats(Graphics g) {
             String status = "";
-            if (snapshot.isMarking()) {
-                status += " (marking)";
-            }
-            if (snapshot.isEvacuating()) {
-                status += " (evacuating)";
-            }
-            if (snapshot.isUpdateRefs()) {
-                status += " (updating refs)";
-            }
-            if (status.isEmpty()) {
-                status = " (idle)";
+            switch (snapshot.phase()) {
+                case IDLE:
+                    status += " (idle)";
+                    break;
+                case MARKING:
+                    status += " (marking)";
+                    break;
+                case EVACUATING:
+                    status += " (evacuating)";
+                    break;
+                case UPDATE_REFS:
+                    status += " (updating refs)";
+                    break;
             }
 
             g.setColor(Color.BLACK);
--- a/src/main/java/org/openjdk/shenandoah/Snapshot.java	Fri Apr 14 19:51:43 2017 +0200
+++ b/src/main/java/org/openjdk/shenandoah/Snapshot.java	Fri Apr 14 20:02:16 2017 +0200
@@ -7,29 +7,34 @@
     private final long time;
     private final long regionSize;
     private final List<RegionStat> stats;
-    private final boolean isMarking;
-    private final boolean isEvacuating;
-    private final boolean isUpdateRefs;
+    private final Phase phase;
 
-    public Snapshot(long time, long regionSize, List<RegionStat> stats, boolean isMarking, boolean isEvacuating, boolean isUpdateRefs) {
+    public Snapshot(long time, long regionSize, List<RegionStat> stats, int status) {
         this.time = time;
         this.regionSize = regionSize;
         this.stats = stats;
-        this.isMarking = isMarking;
-        this.isEvacuating = isEvacuating;
-        this.isUpdateRefs = isUpdateRefs;
+
+        switch (status) {
+            case 0x0:
+                this.phase = Phase.IDLE;
+                break;
+            case 0x1:
+                this.phase = Phase.MARKING;
+                break;
+            case 0x2:
+                this.phase = Phase.EVACUATING;
+                break;
+            case 0x4:
+                this.phase = Phase.UPDATE_REFS;
+                break;
+            default:
+                this.phase = Phase.UNKNOWN;
+                break;
+        }
     }
 
-    public boolean isMarking() {
-        return isMarking;
-    }
-
-    public boolean isEvacuating() {
-        return isEvacuating;
-    }
-
-    public boolean isUpdateRefs() {
-        return isUpdateRefs;
+    public Phase phase() {
+        return phase;
     }
 
     public RegionStat get(int i) {
@@ -48,18 +53,15 @@
         Snapshot snapshot = (Snapshot) o;
 
         if (time != snapshot.time) return false;
-        if (isMarking != snapshot.isMarking) return false;
-        if (isEvacuating != snapshot.isEvacuating) return false;
-        if (isUpdateRefs != snapshot.isUpdateRefs) return false;
-        return stats != null ? stats.equals(snapshot.stats) : snapshot.stats == null;
+        if (!stats.equals(snapshot.stats)) return false;
+        return phase == snapshot.phase;
     }
 
     @Override
     public int hashCode() {
         int result = (int) (time ^ (time >>> 32));
-        result = 31 * result + (stats != null ? stats.hashCode() : 0);
-        result = 31 * result + (isMarking ? 1 : 0);
-        result = 31 * result + (isEvacuating ? 1 : 0);
+        result = 31 * result + stats.hashCode();
+        result = 31 * result + phase.hashCode();
         return result;
     }
 
--- a/src/main/java/org/openjdk/shenandoah/SnapshotView.java	Fri Apr 14 19:51:43 2017 +0200
+++ b/src/main/java/org/openjdk/shenandoah/SnapshotView.java	Fri Apr 14 20:02:16 2017 +0200
@@ -1,13 +1,9 @@
 package org.openjdk.shenandoah;
 
-import java.util.List;
-
 public class SnapshotView {
 
     private final long time;
-    private final boolean isMarking;
-    private final boolean isEvacuating;
-    private final boolean isUpdatingRefs;
+    private final Phase phase;
     private final long total;
     private final long used;
     private final long live;
@@ -16,10 +12,8 @@
     private final long collectionSet;
 
     public SnapshotView(Snapshot s) {
-        this.time = s.time();
-        this.isEvacuating = s.isEvacuating();
-        this.isMarking = s.isMarking();
-        this.isUpdatingRefs = s.isUpdateRefs();
+        time = s.time();
+        phase = s.phase();
         total = total();
         used = s.used();
         live = s.live();
@@ -28,16 +22,8 @@
         collectionSet = s.collectionSet();
     }
 
-    public boolean isMarking() {
-        return isMarking;
-    }
-
-    public boolean isEvacuating() {
-        return isEvacuating;
-    }
-
-    public boolean isUpdatingRefs() {
-        return isUpdatingRefs;
+    public Phase phase() {
+        return phase;
     }
 
     public long time() {