# HG changeset patch # User shade # Date 1481751622 -3600 # Node ID fc25e75f82ee4b79387d0b9a0009df780e18dab5 # Parent ea127a38d60340319c54d6f2dace622f212145e0 Always square regions. diff -r ea127a38d603 -r fc25e75f82ee src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java --- 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();