From b33eadf097a88e606f0aeeb04f79d30b3e4be931 Mon Sep 17 00:00:00 2001 From: Harsh Date: Tue, 20 Oct 2026 15:51:32 +0530 Subject: [PATCH 1/2] Fix first event timestamp fallback --- .../gctoolkit/parser/jvm/PreUnifiedDiarizer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 +} + From 9fe8113f30ce8e0905e6fcfc88390fbcf4eac6d1 Mon Sep 17 00:00:00 2001 From: Harsh Date: Fri, 13 Nov 2026 12:46:52 +0530 Subject: [PATCH 2/2] Test first timestamp after an early fallback lookup --- .../parser/PreUnifiedDiarizerTest.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 parser/src/test/java/com/microsoft/gctoolkit/parser/PreUnifiedDiarizerTest.java 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()); + } +}