Mercurial > hg > shenandoah-visualizer
changeset 10:fc25e75f82ee
Always square regions.
author | shade |
---|---|
date | Wed, 14 Dec 2016 22:40:22 +0100 |
parents | ea127a38d603 |
children | 9f6523b535b6 |
files | src/main/java/org/openjdk/shenandoah/ShenandoahVisualizer.java |
diffstat | 1 files changed, 21 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- 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();