diff --git a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderGo.java b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderGo.java index a21f1a25..9956eb6e 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderGo.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderGo.java @@ -38,7 +38,14 @@ public class DataReaderGo extends AbstractDataReader { + "(\\d+)->" + "(\\d+) MB, " + "(\\d+) MB goal, " - + "(\\d+) P"); + // Go 1.19 + + "(?:" + + "(\\d+) MB stacks, " + + "(\\d+) MB globals, " + + ")?" + + "(\\d+) P" + // Go 1.19 + + "(?: \\(forced\\))?"); public DataReaderGo(GCResource gcResource, InputStream in) throws UnsupportedEncodingException { super(gcResource, in); diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderGo.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderGo.java index d16d9713..12904f84 100644 --- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderGo.java +++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderGo.java @@ -29,25 +29,29 @@ public void test() throws IOException { + "gc starting...\n" // Such a line is not produced by the Go GC; it is just for testing + "gc 1 @0.058s 0%: 0+1.9+0 ms clock, 0+0.94/1.9/2.9+0 ms cpu, 4->5->1 MB, 5 MB goal, 4 P\n" + "a line unrelated to GC logging\n" + // Number too large. + "gc 2 @0.073s 3%: 68+0.36+0.51 ms clock, 205+0/16/89+1.5 ms cpu, 11111111111111111111111111111111111->84->42 MB, 86 MB goal, 3 P\n" - + "gc 58 @17.837s 0%: 0.48+17+0 ms clock, 1.9+9.3/7.9/15+0 ms cpu, 30->30->15 MB, 31 MB goal, 4 P\n"; + + "gc 58 @17.837s 0%: 0.48+17+0 ms clock, 1.9+9.3/7.9/15+0 ms cpu, 30->30->15 MB, 31 MB goal, 4 P\n" + // Go 1.19 + + "gc 19 @5.294s 0%: 0+11+0 ms clock, 0+11/13/1.5+0 ms cpu, 18->19->11 MB, 19 MB goal, 0 MB stacks, 0 MB globals, 8 P\n" + + "gc 38 @661.724s 3%: 0+0+0 ms clock, 0+0/0/0+0 ms cpu, 48->48->0 MB, 97 MB goal, 0 MB stacks, 0 MB globals, 8 P (forced)\n"; ByteArrayInputStream in = new ByteArrayInputStream(gcLog.getBytes("US-ASCII")); DataReader reader = new DataReaderGo(gcResource, in); GCModel model = reader.read(); assertThat("gc 2 -> warning", handler.getCount(), is(1)); - assertThat("size", model.size(), is(2)); + assertThat("size", model.size(), is(4)); AbstractGCEvent<?> event1 = model.get(0); - assertThat("timestamp", event1.getTimestamp(), closeTo(0.058, 0.0001)); - assertThat("pause", event1.getPause(), closeTo(0 + 0, 0.1)); + assertThat("timestamp", event1.getTimestamp(), closeTo(0.058, 0.0)); + assertThat("pause", event1.getPause(), closeTo(0.0, 0.0)); assertThat("preused", event1.getPreUsed(), is(4096)); assertThat("postused", event1.getPostUsed(), is(1024)); assertThat("heap", event1.getTotal(), is(5120)); } @Test - public void exampleLog() throws IOException { + public void exampleLogGo19() throws IOException { TestLogHandler handler = new TestLogHandler(); handler.setLevel(Level.WARNING); GCResource gcResource = new GcResourceFile("go1.9.txt"); @@ -60,4 +64,19 @@ public void exampleLog() throws IOException { assertThat("warnings", handler.getCount(), is(0)); assertThat("size", model.size(), is(635)); } + + @Test + public void exampleLogGo119() throws IOException { + TestLogHandler handler = new TestLogHandler(); + handler.setLevel(Level.WARNING); + GCResource gcResource = new GcResourceFile("go1.19.txt"); + gcResource.getLogger().addHandler(handler); + + InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER.GO, gcResource.getResourceName()); + DataReader reader = new DataReaderGo(gcResource, in); + GCModel model = reader.read(); + + assertThat("warnings", handler.getCount(), is(0)); + assertThat("size", model.size(), is(38)); + } } diff --git a/src/test/resources/go/go1.19.txt b/src/test/resources/go/go1.19.txt new file mode 100644 index 00000000..55a4335d --- /dev/null +++ b/src/test/resources/go/go1.19.txt @@ -0,0 +1,38 @@ +gc 1 @0.077s 0%: 0+1.1+0 ms clock, 0+0.53/1.1/0.53+0 ms cpu, 3->4->1 MB, 4 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 2 @0.102s 0%: 0+0+0 ms clock, 0+0/0/0+0 ms cpu, 3->3->2 MB, 4 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 3 @0.112s 0%: 0+0+0 ms clock, 0+0/0/0+0 ms cpu, 3->4->2 MB, 4 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 4 @0.113s 1%: 0+9.2+0 ms clock, 0+0/17/44+0 ms cpu, 5->5->4 MB, 5 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 5 @0.133s 1%: 0+0+0 ms clock, 0+0/0/0+0 ms cpu, 8->8->5 MB, 8 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 6 @0.163s 1%: 0+0+0 ms clock, 0+0/0/0+0 ms cpu, 10->10->5 MB, 10 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 7 @0.183s 2%: 0+10+0 ms clock, 0+0.061/20/40+0 ms cpu, 11->11->6 MB, 11 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 8 @0.209s 2%: 0+5.2+0 ms clock, 0+0/5.5/5.8+0 ms cpu, 11->12->7 MB, 12 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 9 @0.244s 2%: 0+4.9+0 ms clock, 0+0.53/8.2/8.2+0 ms cpu, 13->14->7 MB, 14 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 10 @0.266s 3%: 1.0+7.7+0 ms clock, 8.3+3.9/8.5/0+0 ms cpu, 14->14->9 MB, 14 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 11 @0.311s 3%: 0+10+0 ms clock, 0+0/13/10+0 ms cpu, 19->19->8 MB, 20 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 12 @0.349s 3%: 0+2.5+0 ms clock, 0+0/2.5/2.5+0 ms cpu, 16->17->9 MB, 17 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 13 @0.381s 3%: 0+10+0 ms clock, 0+0/20/10+0 ms cpu, 16->18->10 MB, 18 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 14 @0.434s 3%: 0+12+0 ms clock, 0+0/24/24+0 ms cpu, 19->20->10 MB, 21 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 15 @2.492s 0%: 0+6.9+0 ms clock, 0+0/8.1/12+0 ms cpu, 21->21->8 MB, 22 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 16 @5.218s 0%: 0.54+12+0.50 ms clock, 4.3+0.50/14/3.0+4.0 ms cpu, 16->16->8 MB, 16 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 17 @5.244s 0%: 0.51+13+0 ms clock, 4.1+3.2/11/1.5+0 ms cpu, 17->18->10 MB, 18 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 18 @5.274s 0%: 0+12+0 ms clock, 0+0/2.0/10+0 ms cpu, 20->21->9 MB, 21 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 19 @5.294s 0%: 0+11+0 ms clock, 0+11/13/1.5+0 ms cpu, 18->19->11 MB, 19 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 20 @5.317s 0%: 0+17+0 ms clock, 0+17/26/36+0 ms cpu, 21->23->11 MB, 23 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 21 @5.357s 0%: 0+14+0 ms clock, 0+0/28/14+0 ms cpu, 19->22->12 MB, 23 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 22 @5.388s 0%: 0+17+0 ms clock, 0+0/29/2.0+0 ms cpu, 23->24->9 MB, 24 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 23 @5.502s 0%: 0+11+4.3 ms clock, 0+0/14/8.6+34 ms cpu, 17->18->12 MB, 19 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 24 @5.648s 0%: 0+10+0 ms clock, 0+0/15/16+0 ms cpu, 22->23->12 MB, 24 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 25 @5.813s 0%: 0+10+0 ms clock, 0+0/13/20+0 ms cpu, 23->24->14 MB, 25 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 26 @6.012s 0%: 0+18+0 ms clock, 0+0/30/30+0 ms cpu, 25->26->13 MB, 28 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 27 @6.133s 0%: 0+12+0 ms clock, 0+1.1/19/42+0 ms cpu, 26->28->15 MB, 28 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 28 @6.672s 0%: 0+3.0+0 ms clock, 0+0/3.0/6.0+0 ms cpu, 26->27->14 MB, 31 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 29 @6.727s 0%: 0+7.0+0 ms clock, 0+0/3.0/5.5+0 ms cpu, 24->26->13 MB, 29 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 30 @6.776s 0%: 0+8.1+0 ms clock, 0+0/15/6.3+0 ms cpu, 22->25->15 MB, 26 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 31 @6.856s 0%: 0+9.5+0 ms clock, 0+0/0/0+0 ms cpu, 29->30->13 MB, 32 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 32 @6.923s 0%: 0+5.7+0 ms clock, 0+0/9.8/10+0 ms cpu, 26->27->13 MB, 27 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 33 @7.003s 0%: 0+10+0 ms clock, 0+0.50/9.1/4.1+0 ms cpu, 24->26->12 MB, 28 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 34 @7.090s 0%: 0+5.5+0 ms clock, 0+0/11/5.5+0 ms cpu, 23->25->14 MB, 25 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 35 @660.868s 3%: 0+20+0 ms clock, 0+0/40/20+0 ms cpu, 131->137->67 MB, 143 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 36 @660.975s 3%: 0+20+0 ms clock, 0+0/40/20+0 ms cpu, 126->126->61 MB, 135 MB goal, 0 MB stacks, 0 MB globals, 8 P +gc 37 @661.543s 3%: 0+27+0 ms clock, 0+0/27/8.0+0 ms cpu, 76->76->48 MB, 122 MB goal, 0 MB stacks, 0 MB globals, 8 P (forced) +gc 38 @661.724s 3%: 0+0+0 ms clock, 0+0/0/0+0 ms cpu, 48->48->0 MB, 97 MB goal, 0 MB stacks, 0 MB globals, 8 P (forced)