Skip to content

Commit 27cef98

Browse files
committed
#198 improve rendering for Shenandoah algorithm (only concurrent events have memory information)
1 parent 327a64e commit 27cef98

File tree

9 files changed

+34
-38
lines changed

9 files changed

+34
-38
lines changed

src/main/java/com/tagtraum/perf/gcviewer/view/renderer/ConcurrentGcBegionEndRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void paintComponent(Graphics2D g2d) {
3737
for (Iterator<ConcurrentGCEvent> i = getModelChart().getModel().getConcurrentGCEvents(); i.hasNext();) {
3838
final ConcurrentGCEvent event = i.next();
3939
if (event.isConcurrentCollectionStart()) {
40-
final int scaledTimestamp = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
40+
final int scaledTimestamp = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp() - event.getPause()));
4141
if (scaledTimestamp != lastScaledTimestampBegin) {
4242
g2d.setPaint(CONCURRENT_COLLECTION_BEGIN);
4343
g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);

src/main/java/com/tagtraum/perf/gcviewer/view/renderer/FullGCLineRenderer.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package com.tagtraum.perf.gcviewer.view.renderer;
22

3+
import java.awt.Color;
4+
import java.awt.Graphics2D;
5+
import java.awt.Paint;
6+
import java.awt.Rectangle;
7+
import java.awt.RenderingHints;
8+
import java.util.Iterator;
9+
310
import com.tagtraum.perf.gcviewer.model.GCEvent;
411
import com.tagtraum.perf.gcviewer.view.ChartRenderer;
512
import com.tagtraum.perf.gcviewer.view.ModelChartImpl;
613

7-
import java.awt.*;
8-
import java.util.Iterator;
9-
1014
/**
1115
* FullGCLineRenderer.
1216
*
@@ -34,7 +38,7 @@ public void paintComponent(Graphics2D g2d) {
3438
int lastScaledTimestamp = Integer.MIN_VALUE;
3539
for (Iterator<GCEvent> i = getModelChart().getModel().getFullGCEvents(); i.hasNext();) {
3640
GCEvent event = i.next();
37-
int scaledTimestamp = (int)(scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
41+
int scaledTimestamp = (int)(scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp() - event.getPause()));
3842
if (scaledTimestamp != lastScaledTimestamp && scaledTimestamp >= minX && scaledTimestamp <= maxX) {
3943
g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);
4044
lastScaledTimestamp = scaledTimestamp;

src/main/java/com/tagtraum/perf/gcviewer/view/renderer/GCRectanglesRenderer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import java.util.Iterator;
99

1010
import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
11+
import com.tagtraum.perf.gcviewer.model.VmOperationEvent;
1112
import com.tagtraum.perf.gcviewer.view.ChartRenderer;
1213
import com.tagtraum.perf.gcviewer.view.ModelChartImpl;
13-
import com.tagtraum.perf.gcviewer.model.VmOperationEvent;
1414

1515
/**
1616
* Renders all stop the world event pauses as rectangles.
@@ -56,7 +56,7 @@ public void paintComponent(Graphics2D g2d) {
5656
double pause = event.getPause();
5757
int width = (int) Math.max(Math.abs(scaleFactor * pause), 1.0d);
5858
int height = (int) (pause * scaledHeight);
59-
int x = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
59+
int x = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp() - event.getPause()));
6060
int y = getHeight() - (int) (pause * scaledHeight);
6161
if (lastX != x || lastY != y || lastWidth != width || lastHeight != height) {
6262
if ((x + width) > leftBoundary && x < rightBoundary) {

src/main/java/com/tagtraum/perf/gcviewer/view/renderer/TotalHeapRenderer.java

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import java.util.Iterator;
88

99
import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
10-
import com.tagtraum.perf.gcviewer.model.GCEvent;
1110
import com.tagtraum.perf.gcviewer.model.GCModel;
1211
import com.tagtraum.perf.gcviewer.view.ModelChart;
1312
import com.tagtraum.perf.gcviewer.view.ModelChartImpl;
@@ -35,22 +34,19 @@ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
3534
ScaledPolygon polygon = createMemoryScaledPolygon();
3635
polygon.addPoint(0.0d, 0.0d);
3736
int lastTotal = 0;
38-
for (Iterator<AbstractGCEvent<?>> i = model.getStopTheWorldEvents(); i.hasNext();) {
39-
AbstractGCEvent<?> abstractGCEvent = i.next();
40-
if (abstractGCEvent instanceof GCEvent) {
41-
GCEvent event = (GCEvent) abstractGCEvent;
42-
if (event.getTotal() > 0) {
43-
// there are events that don't have a heap size associated (like "GC remark" of G1)
44-
// -> skip them
45-
if (polygon.npoints == 1) {
46-
// first point needs to be treated different from the rest,
47-
// because otherwise the polygon would not start with a vertical line at 0,
48-
// but with a slanting line between 0 and after the first pause
49-
polygon.addPoint(0, (double)event.getTotal());
50-
}
51-
polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp() + event.getPause(), event.getTotal());
52-
lastTotal = event.getTotal();
37+
for (Iterator<AbstractGCEvent<?>> i = model.getEvents(); i.hasNext();) {
38+
AbstractGCEvent<?> event = i.next();
39+
if (event.getTotal() > 0) {
40+
// there are events that don't have a heap size associated (like "GC remark" of G1)
41+
// -> skip them
42+
if (polygon.npoints == 1) {
43+
// first point needs to be treated different from the rest,
44+
// because otherwise the polygon would not start with a vertical line at 0,
45+
// but with a slanting line between 0 and after the first pause
46+
polygon.addPoint(0, (double)event.getTotal());
5347
}
48+
polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), event.getTotal());
49+
lastTotal = event.getTotal();
5450
}
5551
}
5652
polygon.addPointNotOptimised(model.getRunningTime(), lastTotal);

src/main/java/com/tagtraum/perf/gcviewer/view/renderer/TotalTenuredRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
4848
// but with a slanting line between 0 and after the first pause
4949
polygon.addPoint(0, (double)tenured.getTotal());
5050
}
51-
polygon.addPoint(tenured.getTimestamp() - model.getFirstPauseTimeStamp() + event.getPause(),
51+
polygon.addPoint(tenured.getTimestamp() - model.getFirstPauseTimeStamp(),
5252
tenured.getTotal());
5353
lastTotal = tenured.getTotal();
5454
}

src/main/java/com/tagtraum/perf/gcviewer/view/renderer/TotalYoungRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
5757
// but with a slanting line between 0 and after the first pause
5858
polygon.addPoint(0, tenuredSize + youngSize);
5959
}
60-
polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp() + event.getPause(), tenuredSize + youngSize);
60+
polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), tenuredSize + youngSize);
6161
lastYoung = youngSize;
6262
lastTenured = tenuredSize;
6363
}

src/main/java/com/tagtraum/perf/gcviewer/view/renderer/UsedHeapRenderer.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.Iterator;
77

88
import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
9-
import com.tagtraum.perf.gcviewer.model.GCEvent;
109
import com.tagtraum.perf.gcviewer.model.GCModel;
1110
import com.tagtraum.perf.gcviewer.view.ModelChart;
1211
import com.tagtraum.perf.gcviewer.view.ModelChartImpl;
@@ -30,16 +29,13 @@ public UsedHeapRenderer(ModelChartImpl modelChart) {
3029

3130
public Polygon computePolygon(ModelChart modelChart, GCModel model) {
3231
ScaledPolygon polygon = createMemoryScaledPolygon();
33-
for (Iterator<AbstractGCEvent<?>> i = model.getStopTheWorldEvents(); i.hasNext();) {
34-
AbstractGCEvent<?> abstractGCEvent = i.next();
35-
if (abstractGCEvent instanceof GCEvent) {
36-
GCEvent event = (GCEvent) abstractGCEvent;
37-
// e.g. "GC remark" of G1 algorithm does not contain memory information
38-
if (event.getTotal() > 0) {
39-
final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp();
40-
polygon.addPoint(timestamp, event.getPreUsed());
41-
polygon.addPoint(timestamp + event.getPause(), event.getPostUsed());
42-
}
32+
for (Iterator<AbstractGCEvent<?>> i = model.getEvents(); i.hasNext();) {
33+
AbstractGCEvent<?> event = i.next();
34+
// e.g. "GC remark" of G1 algorithm does not contain memory information
35+
if (event.getTotal() > 0) {
36+
final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp() - event.getPause();
37+
polygon.addPoint(timestamp, event.getPreUsed());
38+
polygon.addPoint(timestamp + event.getPause(), event.getPostUsed());
4339
}
4440
}
4541
// dummy point to make the polygon complete

src/main/java/com/tagtraum/perf/gcviewer/view/renderer/UsedTenuredRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
3939
// only -XX:+PrintGCDetails adds information about generations
4040
// e.g. "GC remark" of G1 algorithm does not contain memory information
4141
if (tenuredEvent.getTotal() > 0) {
42-
final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp();
42+
final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp() - event.getPause();
4343
polygon.addPoint(timestamp, tenuredEvent.getPreUsed());
4444
polygon.addPoint(timestamp + event.getPause(), tenuredEvent.getPostUsed());
4545
}

src/main/java/com/tagtraum/perf/gcviewer/view/renderer/UsedYoungRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
5454
}
5555
// e.g. "GC remark" of G1 algorithm does not contain memory information
5656
if (youngEvent.getTotal() > 0) {
57-
final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp();
57+
final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp() - event.getPause();
5858
polygon.addPoint(timestamp, lastTenuredTotal + youngEvent.getPreUsed());
5959
polygon.addPoint(timestamp + event.getPause(), tenuredTotal + youngEvent.getPostUsed());
6060
}

0 commit comments

Comments
 (0)