diff --git a/parser/src/main/java/com/microsoft/gctoolkit/parser/jvm/PreUnifiedDiarizer.java b/parser/src/main/java/com/microsoft/gctoolkit/parser/jvm/PreUnifiedDiarizer.java index 1bf6beb6a..aa46b134e 100644 --- a/parser/src/main/java/com/microsoft/gctoolkit/parser/jvm/PreUnifiedDiarizer.java +++ b/parser/src/main/java/com/microsoft/gctoolkit/parser/jvm/PreUnifiedDiarizer.java @@ -228,9 +228,8 @@ public boolean diarize(String line) { @Override public DateTimeStamp getTimeOfFirstEvent() { - if (timeOfFirstEvent == null) - timeOfFirstEvent = new DateTimeStamp(0.0d); - return timeOfFirstEvent; + // Keep the fallback transient so a timestamp found on a later line can still be recorded. + return timeOfFirstEvent == null ? new DateTimeStamp(0.0d) : timeOfFirstEvent; } private void timeOfFirstEvent(String line) { @@ -1047,4 +1046,5 @@ private void setGCCause(String gcCause) { } } } -} \ No newline at end of file +} + diff --git a/parser/src/test/java/com/microsoft/gctoolkit/parser/PreUnifiedDiarizerTest.java b/parser/src/test/java/com/microsoft/gctoolkit/parser/PreUnifiedDiarizerTest.java new file mode 100644 index 000000000..250e2eeab --- /dev/null +++ b/parser/src/test/java/com/microsoft/gctoolkit/parser/PreUnifiedDiarizerTest.java @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +package com.microsoft.gctoolkit.parser; + +import com.microsoft.gctoolkit.parser.jvm.PreUnifiedDiarizer; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class PreUnifiedDiarizerTest { + + @Test + void earlyTimestampLookupDoesNotPreventRecordingFirstEvent() { + PreUnifiedDiarizer diarizer = new PreUnifiedDiarizer(); + assertEquals(0.0, diarizer.getTimeOfFirstEvent().toSeconds()); + + diarizer.diarize("1.250: [GC (Allocation Failure) 100K->50K(200K), 0.001 secs]"); + assertEquals(1.250, diarizer.getTimeOfFirstEvent().toSeconds()); + assertEquals(1.250, diarizer.getDiary().getTimeOfFirstEvent().toSeconds()); + + diarizer.diarize("2.500: [GC (Allocation Failure) 100K->50K(200K), 0.001 secs]"); + assertEquals(1.250, diarizer.getTimeOfFirstEvent().toSeconds()); + assertEquals(1.250, diarizer.getDiary().getTimeOfFirstEvent().toSeconds()); + } +}