Mercurial > hg > shenandoah-visualizer
changeset 26:da66467f2884
Refactoring.
author | shade |
---|---|
date | Thu, 11 May 2017 19:29:06 +0200 |
parents | 0aaf8f291161 |
children | 0a0c91d93ea2 |
files | src/main/java/org/openjdk/shenandoah/Colors.java src/main/java/org/openjdk/shenandoah/DataProvider.java src/main/java/org/openjdk/shenandoah/RegionStat.java src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java |
diffstat | 4 files changed, 84 insertions(+), 72 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/java/org/openjdk/shenandoah/Colors.java Thu May 11 19:10:06 2017 +0200 +++ b/src/main/java/org/openjdk/shenandoah/Colors.java Thu May 11 19:29:06 2017 +0200 @@ -4,13 +4,18 @@ public class Colors { - static final Color TLAB_ALLOC = new Color(0, 250, 250); - static final Color TLAB_ALLOC_BORDER = new Color(0, 191, 190); - static final Color GCLAB_ALLOC = new Color(185, 0, 250); - static final Color GCLAB_ALLOC_BORDER = new Color(118, 0, 160); - static final Color USED = new Color(150, 150, 150); - static final Color LIVE = new Color(0, 200, 0); - static final Color LIVE_BORDER = new Color(0, 100, 0); - static final Color CSET = Color.YELLOW; - static final Color HUMONGOUS = Color.RED; + static final Color TIMELINE_IDLE = Color.BLACK; + static final Color TIMELINE_MARK = new Color(100, 100, 0); + static final Color TIMELINE_EVACUATING = new Color(100, 0, 0); + static final Color TIMELINE_UPDATEREFS = new Color(0, 100, 100); + + static final Color TLAB_ALLOC = new Color(0, 250, 250); + static final Color TLAB_ALLOC_BORDER = new Color(0, 191, 190); + static final Color GCLAB_ALLOC = new Color(185, 0, 250); + static final Color GCLAB_ALLOC_BORDER = new Color(118, 0, 160); + static final Color USED = new Color(150, 150, 150); + static final Color LIVE = new Color(0, 200, 0); + static final Color LIVE_BORDER = new Color(0, 100, 0); + static final Color CSET = Color.YELLOW; + static final Color HUMONGOUS = Color.RED; }
--- a/src/main/java/org/openjdk/shenandoah/DataProvider.java Thu May 11 19:10:06 2017 +0200 +++ b/src/main/java/org/openjdk/shenandoah/DataProvider.java Thu May 11 19:29:06 2017 +0200 @@ -46,7 +46,7 @@ List<RegionStat> stats = new ArrayList<>(); for (int c = 0; c < maxRegions; c++) { StringMonitor mtrx = matrix[c]; - stats.add(new RegionStat(maxSize, data[c].longValue(), (mtrx == null ? "" : mtrx.stringValue()))); + stats.add(new RegionStat(data[c].longValue(), (mtrx == null ? "" : mtrx.stringValue()))); } long time = timestamp.longValue();
--- a/src/main/java/org/openjdk/shenandoah/RegionStat.java Thu May 11 19:10:06 2017 +0200 +++ b/src/main/java/org/openjdk/shenandoah/RegionStat.java Thu May 11 19:29:06 2017 +0200 @@ -9,22 +9,23 @@ public class RegionStat { private static final int PERCENT_MASK = 0x7f; + private static final int FLAGS_MASK = 0x3f; + private static final int USED_SHIFT = 0; private static final int LIVE_SHIFT = 7; private static final int TLAB_SHIFT = 14; private static final int GCLAB_SHIFT = 21; - private static final int FLAGS_MASK = 0x3f; - private static final int FLAGS_SHIFT = 58; + private static final int FLAGS_SHIFT = 58; private final EnumSet<RegionFlag> flags; private final BitSet incoming; - private final double liveLvl; - private final double usedLvl; - private final double tlabLvl; - private final double gclabLvl; + private final float liveLvl; + private final float usedLvl; + private final float tlabLvl; + private final float gclabLvl; - public RegionStat(double usedLvl, double liveLvl, double tlabLvl, double gclabLvl, EnumSet<RegionFlag> flags) { - this.incoming = new BitSet(); + public RegionStat(float usedLvl, float liveLvl, float tlabLvl, float gclabLvl, EnumSet<RegionFlag> flags) { + this.incoming = null; this.usedLvl = usedLvl; this.liveLvl = liveLvl; this.tlabLvl = tlabLvl; @@ -32,11 +33,11 @@ this.flags = flags; } - public RegionStat(long maxSize, long data, String matrix) { - usedLvl = ((data >>> USED_SHIFT) & PERCENT_MASK) / 100D; - liveLvl = ((data >>> LIVE_SHIFT) & PERCENT_MASK) / 100D; - tlabLvl = ((data >>> TLAB_SHIFT) & PERCENT_MASK) / 100D; - gclabLvl = ((data >>> GCLAB_SHIFT) & PERCENT_MASK) / 100D; + public RegionStat(long data, String matrix) { + usedLvl = ((data >>> USED_SHIFT) & PERCENT_MASK) / 100F; + liveLvl = ((data >>> LIVE_SHIFT) & PERCENT_MASK) / 100F; + tlabLvl = ((data >>> TLAB_SHIFT) & PERCENT_MASK) / 100F; + gclabLvl = ((data >>> GCLAB_SHIFT) & PERCENT_MASK) / 100F; long stat = (data >>> FLAGS_SHIFT) & FLAGS_MASK; @@ -47,16 +48,20 @@ if ((stat & 4) > 0) flags.add(RegionFlag.HUMONGOUS); if ((stat & 8) > 0) flags.add(RegionFlag.PINNED); - this.incoming = new BitSet(); - int idx = 0; - for (char c : matrix.toCharArray()) { - c = (char) (c - 32); - incoming.set(idx++, (c & (1 << 0)) > 0); - incoming.set(idx++, (c & (1 << 1)) > 0); - incoming.set(idx++, (c & (1 << 2)) > 0); - incoming.set(idx++, (c & (1 << 3)) > 0); - incoming.set(idx++, (c & (1 << 4)) > 0); - incoming.set(idx++, (c & (1 << 5)) > 0); + if (!matrix.isEmpty()) { + this.incoming = new BitSet(); + int idx = 0; + for (char c : matrix.toCharArray()) { + c = (char) (c - 32); + incoming.set(idx++, (c & (1 << 0)) > 0); + incoming.set(idx++, (c & (1 << 1)) > 0); + incoming.set(idx++, (c & (1 << 2)) > 0); + incoming.set(idx++, (c & (1 << 3)) > 0); + incoming.set(idx++, (c & (1 << 4)) > 0); + incoming.set(idx++, (c & (1 << 5)) > 0); + } + } else { + this.incoming = null; } } @@ -126,38 +131,38 @@ RegionStat that = (RegionStat) o; - if (Double.compare(that.liveLvl, liveLvl) != 0) return false; - if (Double.compare(that.usedLvl, usedLvl) != 0) return false; + if (Float.compare(that.liveLvl, liveLvl) != 0) return false; + if (Float.compare(that.usedLvl, usedLvl) != 0) return false; + if (Float.compare(that.tlabLvl, tlabLvl) != 0) return false; + if (Float.compare(that.gclabLvl, gclabLvl) != 0) return false; if (!flags.equals(that.flags)) return false; - return incoming.equals(that.incoming); + return incoming != null ? incoming.equals(that.incoming) : that.incoming == null; } @Override public int hashCode() { - int result; - long temp; - result = flags.hashCode(); - result = 31 * result + incoming.hashCode(); - temp = Double.doubleToLongBits(liveLvl); - result = 31 * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(usedLvl); - result = 31 * result + (int) (temp ^ (temp >>> 32)); + int result = flags.hashCode(); + result = 31 * result + (incoming != null ? incoming.hashCode() : 0); + result = 31 * result + (liveLvl != +0.0f ? Float.floatToIntBits(liveLvl) : 0); + result = 31 * result + (usedLvl != +0.0f ? Float.floatToIntBits(usedLvl) : 0); + result = 31 * result + (tlabLvl != +0.0f ? Float.floatToIntBits(tlabLvl) : 0); + result = 31 * result + (gclabLvl != +0.0f ? Float.floatToIntBits(gclabLvl) : 0); return result; } - public double live() { + public float live() { return liveLvl; } - public double used() { + public float used() { return usedLvl; } - public double tlabAllocs() { + public float tlabAllocs() { return tlabLvl; } - public double gclabAllocs() { + public float gclabAllocs() { return gclabLvl; }
--- a/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java Thu May 11 19:10:06 2017 +0200 +++ b/src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java Thu May 11 19:29:06 2017 +0200 @@ -204,16 +204,16 @@ switch (s.phase()) { case IDLE: - g.setColor(Color.BLACK); + g.setColor(Colors.TIMELINE_IDLE); break; case MARKING: - g.setColor(new Color(100, 100, 0)); + g.setColor(Colors.TIMELINE_MARK); break; case EVACUATING: - g.setColor(new Color(100, 0, 0)); + g.setColor(Colors.TIMELINE_EVACUATING); break; case UPDATE_REFS: - g.setColor(new Color(0, 100, 100)); + g.setColor(Colors.TIMELINE_UPDATEREFS); break; default: g.setColor(Color.WHITE); @@ -241,40 +241,40 @@ Map<String, RegionStat> items = new LinkedHashMap<>(); items.put("Unused", - new RegionStat(0.0, 0.0, 0.0, 0.0, EnumSet.of(UNUSED))); + new RegionStat(0.0f, 0.0f, 0.0f, 0.0f, EnumSet.of(UNUSED))); items.put("Empty", - new RegionStat(0.0, 0.0, 0.0, 0.0, EnumSet.noneOf(RegionFlag.class))); + new RegionStat(0.0f, 0.0f, 0.0f, 0.0f, EnumSet.noneOf(RegionFlag.class))); items.put("1/2 Used", - new RegionStat(0.5, 0.0, 0.0, 0.0, EnumSet.noneOf(RegionFlag.class))); + new RegionStat(0.5f, 0.0f, 0.0f, 0.0f, EnumSet.noneOf(RegionFlag.class))); items.put("Fully Used", - new RegionStat(1.0, 0.0, 0.0, 0.0, EnumSet.noneOf(RegionFlag.class))); + new RegionStat(1.0f, 0.0f, 0.0f, 0.0f, EnumSet.noneOf(RegionFlag.class))); items.put("Fully Used, 100% TLAB Allocs", - new RegionStat(1.0, 0.0, 1.0, 0.0, EnumSet.noneOf(RegionFlag.class))); + new RegionStat(1.0f, 0.0f, 1.0f, 0.0f, EnumSet.noneOf(RegionFlag.class))); items.put("Fully Used, 100% GCLAB Allocs", - new RegionStat(1.0, 0.0, 0.0, 1.0, EnumSet.noneOf(RegionFlag.class))); + new RegionStat(1.0f, 0.0f, 0.0f, 1.0f, EnumSet.noneOf(RegionFlag.class))); items.put("Fully Used, 50%/50% TLAB/GCLAB Allocs", - new RegionStat(1.0, 0.0, 0.5, 0.5, EnumSet.noneOf(RegionFlag.class))); + new RegionStat(1.0f, 0.0f, 0.5f, 0.5f, EnumSet.noneOf(RegionFlag.class))); items.put("Fully Live", - new RegionStat(1.0, 1.0, 0.0, 0.0, EnumSet.noneOf(RegionFlag.class))); + new RegionStat(1.0f, 1.0f, 0.0f, 0.0f, EnumSet.noneOf(RegionFlag.class))); items.put("Fully Live + Humongous", - new RegionStat(1.0, 1.0, 0.0, 0.0, EnumSet.of(HUMONGOUS))); + new RegionStat(1.0f, 1.0f, 0.0f, 0.0f, EnumSet.of(HUMONGOUS))); items.put("1/3 Live", - new RegionStat(1.0, 0.3, 0.0, 0.0, EnumSet.noneOf(RegionFlag.class))); + new RegionStat(1.0f, 0.3f, 0.0f, 0.0f, EnumSet.noneOf(RegionFlag.class))); items.put("1/3 Live + In Collection Set", - new RegionStat(1.0, 0.3, 0.0, 0.0, EnumSet.of(IN_COLLECTION_SET))); + new RegionStat(1.0f, 0.3f, 0.0f, 0.0f, EnumSet.of(IN_COLLECTION_SET))); items.put("1/3 Live + Pinned", - new RegionStat(1.0, 0.3, 0.0, 0.0, EnumSet.of(PINNED))); + new RegionStat(1.0f, 0.3f, 0.0f, 0.0f, EnumSet.of(PINNED))); int i = 1; for (String key : items.keySet()) { @@ -303,15 +303,17 @@ for (int f = 0; f < snapshot.regionCount(); f++) { RegionStat s = snapshot.get(f); BitSet bs = s.incoming(); - for (int t = 0; t < snapshot.regionCount(); t++) { - if (bs.get(t)) { - int f_rectx = (int) ((f % cols + 0.5) * sqSize); - int f_recty = (int) ((f / cols + 0.5) * sqSize); - int t_rectx = (int) ((t % cols + 0.5) * sqSize); - int t_recty = (int) ((t / cols + 0.5) * sqSize); + if (bs != null) { + for (int t = 0; t < snapshot.regionCount(); t++) { + if (bs.get(t)) { + int f_rectx = (int) ((f % cols + 0.5) * sqSize); + int f_recty = (int) ((f / cols + 0.5) * sqSize); + int t_rectx = (int) ((t % cols + 0.5) * sqSize); + int t_recty = (int) ((t / cols + 0.5) * sqSize); - g.setColor(BASE); - g.drawLine(f_rectx, f_recty, t_rectx, t_recty); + g.setColor(BASE); + g.drawLine(f_rectx, f_recty, t_rectx, t_recty); + } } } }