Skip to content

Commit 718cdf7

Browse files
author
Christian Mötzing
committed
Correct data/chart for IBM J9 tenured space
Due to wrong timestamps the last size of tenured space was used as value for the whole graph.
1 parent 07ab817 commit 718cdf7

File tree

4 files changed

+48
-12
lines changed

4 files changed

+48
-12
lines changed

src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderIBM_J9_R28.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.io.InputStream;
55
import java.io.LineNumberReader;
66
import java.io.UnsupportedEncodingException;
7+
import java.sql.Timestamp;
78
import java.time.LocalDateTime;
89
import java.time.ZoneId;
910
import java.time.ZonedDateTime;
@@ -158,9 +159,10 @@ else if (event.isEndElement()) {
158159
private GCEvent handleExclusiveStart(StartElement startElement) {
159160
GCEvent event = new GCEvent();
160161
try {
161-
event.setDateStamp(ZonedDateTime.of(
162-
LocalDateTime.parse(getAttributeValue(startElement, "timestamp"), dateTimeFormatter),
163-
ZoneId.systemDefault()));
162+
String timestamp = getAttributeValue(startElement, "timestamp");
163+
LocalDateTime local = LocalDateTime.parse(timestamp, dateTimeFormatter);
164+
event.setDateStamp(ZonedDateTime.of(local, ZoneId.systemDefault()));
165+
event.setTimestamp(Timestamp.valueOf(local).getTime() / 1000);
164166
}
165167
catch (DateTimeParseException e) {
166168
if (getLogger().isLoggable(Level.WARNING)) getLogger().warning("line " + in.getLineNumber() + ": " + e.toString());
@@ -211,6 +213,7 @@ else if (startEl.getName().getLocalPart().equals("mem")) {
211213
switch (getAttributeValue(startEl, "type")) {
212214
case "nursery":
213215
GCEvent young = new GCEvent();
216+
young.setTimestamp(event.getTimestamp());
214217
young.setType(Type.lookup("nursery"));
215218
setTotalAndPreUsed(young, startEl);
216219
event.add(young);
@@ -219,6 +222,7 @@ else if (startEl.getName().getLocalPart().equals("mem")) {
219222
// scavenge prints tenure space but does not change it as it is young only
220223
if(!typeName.contains("scavenge")) {
221224
GCEvent tenured = new GCEvent();
225+
tenured.setTimestamp(event.getTimestamp());
222226
tenured.setType(Type.lookup("tenure"));
223227
setTotalAndPreUsed(tenured, startEl);
224228
event.add(tenured);

src/main/java/com/tagtraum/perf/gcviewer/model/AbstractGCEvent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,8 @@ public boolean isSystem() {
277277
}
278278

279279
public boolean isInc() {
280-
return getExtendedType().getType() == GCEvent.Type.INC_GC;
280+
Type type = getExtendedType().getType();
281+
return type == GCEvent.Type.INC_GC || type == Type.IBM_AF_SCAVENGE;
281282
}
282283

283284
public boolean isConcurrent() {

src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM_J9_R27.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.tagtraum.perf.gcviewer.imp;
22

33
import static com.tagtraum.perf.gcviewer.UnittestHelper.toKiloBytes;
4+
import static com.tagtraum.perf.gcviewer.imp.TestDataReaderIBM_J9_R28.*;
45
import static org.hamcrest.Matchers.is;
6+
import static org.hamcrest.Matchers.startsWith;
57
import static org.hamcrest.number.IsCloseTo.closeTo;
68
import static org.junit.Assert.assertThat;
79

@@ -23,6 +25,8 @@
2325
*/
2426
public class TestDataReaderIBM_J9_R27 {
2527

28+
public static final String EXPECTED_ERROR_MESSAGE = "line 233: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[234,1]";
29+
2630
private InputStream getInputStream(String fileName) throws IOException {
2731
return UnittestHelper.getResourceAsStream(FOLDER.IBM, fileName);
2832
}
@@ -58,11 +62,13 @@ public void testFullHeaderWithAfGcs() throws Exception {
5862
assertThat("tenured before", event.getTenured().getPreUsed(), is(toKiloBytes(805306368 - 804158480)));
5963
assertThat("tenured after", event.getTenured().getPostUsed(), is(toKiloBytes(805306368 - 804158480)));
6064

61-
assertThat("timestamp 1", event.getTimestamp(), closeTo(0.0, 0.0001));
62-
assertThat("timestamp 2", model.get(1).getTimestamp(), closeTo(1.927, 0.0001));
63-
assertThat("timestamp 3", model.get(2).getTimestamp(), closeTo(3.982, 0.0001));
65+
verifyTimestamp("timestamp 1", event.getTimestamp(), "2014-09-24T15:57:32.116");
66+
verifyTimestamp("timestamp 2", model.get(1).getTimestamp(), "2014-09-24T15:57:34.043");
67+
verifyTimestamp("timestamp 3", model.get(2).getTimestamp(), "2014-09-24T15:57:36.098");
6468

6569
assertThat("number of errors", handler.getCount(), is(1));
70+
String message = handler.getLogRecords().get(0).getMessage();
71+
assertThat("missing close tag </verbosegc>", message, startsWith(EXPECTED_ERROR_MESSAGE));
6672
}
6773

6874
@Test

src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM_J9_R28.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
import java.io.IOException;
1010
import java.io.InputStream;
11+
import java.sql.Timestamp;
12+
import java.time.LocalDateTime;
13+
import java.time.format.DateTimeFormatter;
1114
import java.util.logging.Level;
1215

1316
import com.tagtraum.perf.gcviewer.UnittestHelper;
@@ -56,12 +59,16 @@ public void testAfScavenge() throws Exception {
5659
assertThat("tenured before", event.getTenured().getPreUsed(), is(toKiloBytes(402653184 - 401882552)));
5760
assertThat("tenured after", event.getTenured().getPostUsed(), is(toKiloBytes(402653184 - 401882552)));
5861

59-
assertThat("timestamp 1", event.getTimestamp(), closeTo(0.0, 0.0001));
60-
assertThat("timestamp 2", model.get(1).getTimestamp(), closeTo(1.272, 0.0001));
6162

6263
assertThat("type", event.getTypeAsString(), equalTo("af scavenge; nursery"));
6364
assertThat("generation", event.getExtendedType().getGeneration(), is(AbstractGCEvent.Generation.YOUNG));
6465
assertThat("full", event.isFull(), is(false));
66+
assertThat("full", event.isInc(), is(true));
67+
68+
verifyTimestamp("first pause timestamp", model.getFirstPauseTimeStamp(), "2015-12-31T15:22:46.957");
69+
verifyTimestamp("event timestamp", event.getTimestamp(), "2015-12-31T15:22:46.957");
70+
verifyTimestamp("event timestamp 2", model.get(1).getTimestamp(), "2015-12-31T15:22:48.229");
71+
6572
assertThat("number of errors", handler.getCount(), is(0));
6673
}
6774

@@ -81,6 +88,9 @@ public void testAfGlobal() throws Exception {
8188
assertThat("pause", event.getPause(), closeTo(1.255648, 0.0000001));
8289
assertThat("type", event.getTypeAsString(), equalTo("af global; tenure"));
8390

91+
verifyTimestamp("event timestamp", event.getTimestamp(), "2016-08-09T14:58:58.343");
92+
verifyTimestamp("first pause timestamp", model.getFirstPauseTimeStamp(), "2016-08-09T14:58:58.343");
93+
8494
assertThat("number of errors", handler.getCount(), is(0));
8595
}
8696

@@ -100,6 +110,9 @@ public void testSysGlobal() throws Exception {
100110
assertThat("pause", event.getPause(), closeTo(0.097756, 0.0000001));
101111
assertThat("type", event.getTypeAsString(), equalTo("sys explicit global; nursery; tenure"));
102112

113+
verifyTimestamp("event timestamp", event.getTimestamp(), "2015-12-31T15:23:00.646");
114+
verifyTimestamp("first pause timestamp", model.getFirstPauseTimeStamp(), "2015-12-31T15:23:00.646");
115+
103116
assertThat("number of errors", handler.getCount(), is(0));
104117
}
105118

@@ -131,10 +144,22 @@ public void testConcurrentCollection() throws Exception {
131144
AbstractGCEvent<?> event = model.get(0);
132145
assertThat("model size", model.size(), is(1));
133146
assertThat("duration", event.getPause(), closeTo(1.182375, 0.00000001));
134-
assertThat("number of errors", handler.getCount(), is(0));
135147

136-
assertThat("", event.getExtendedType().getConcurrency(), is(AbstractGCEvent.Concurrency.CONCURRENT));
137-
assertThat("", event.getExtendedType().getGeneration(), is(AbstractGCEvent.Generation.ALL));
148+
assertThat("concurrency", event.getExtendedType().getConcurrency(), is(AbstractGCEvent.Concurrency.CONCURRENT));
149+
assertThat("generation", event.getExtendedType().getGeneration(), is(AbstractGCEvent.Generation.ALL));
150+
assertThat("full", event.isFull(), is(true));
151+
assertThat("full", event.isInc(), is(false));
152+
153+
verifyTimestamp("event timestamp", event.getTimestamp(), "2016-08-09T15:14:56.110");
154+
verifyTimestamp("first pause timestamp", model.getFirstPauseTimeStamp(), "2016-08-09T15:14:56.110");
155+
156+
assertThat("number of errors", handler.getCount(), is(0));
138157
}
139158

159+
public static void verifyTimestamp(String reason, double actual, String dateTime) {
160+
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
161+
LocalDateTime localDateTime = LocalDateTime.parse(dateTime, formatter);
162+
double expected = Long.valueOf(Timestamp.valueOf(localDateTime).getTime()/1000).doubleValue();
163+
assertThat(reason, actual, is(expected));
164+
}
140165
}

0 commit comments

Comments
 (0)