trace event: set timestamp at init time

The start time may be accessed before any event request has been done,
so it is important to set the start time of the trace in the
initialization phase.

Change-Id: I82b87d199c3df9ae129eb84ccee9d1388b1419ff
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
Reviewed-on: https://git.eclipse.org/r/139961
Tested-by: CI Bot
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/TraceEventTraceTest.java b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/TraceEventTraceTest.java
index 652e748..465f7d3 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/TraceEventTraceTest.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/TraceEventTraceTest.java
@@ -200,6 +200,10 @@
             IStatus validate = trace.validate(null, path);
             assertTrue(validate.getMessage(), validate.isOK());
             trace.initTrace(null, path, ITmfEvent.class);
+            // Make sure start and end time have been set at this point to timestamp of first event
+            assertEquals(startTime, trace.getStartTime());
+            assertEquals(startTime, trace.getEndTime());
+
             ITmfContext context = trace.seekEvent(0.0);
             ITmfEvent event = trace.getNext(context);
             long count = 0;
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/trace/TraceEventTrace.java b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/trace/TraceEventTrace.java
index 578b4a5..dddbd99 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/trace/TraceEventTrace.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/trace/TraceEventTrace.java
@@ -36,6 +36,7 @@
 import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
 import org.eclipse.tracecompass.tmf.core.io.BufferedRandomAccessFile;
+import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
@@ -183,6 +184,18 @@
         try {
             fFileInput = new BufferedRandomAccessFile(fFile, "r"); //$NON-NLS-1$
             goToCorrectStart(fFileInput);
+            /* Set the start and (current) end times for this trace */
+            ITmfContext ctx = seekEvent(0L);
+            if (ctx == null) {
+                return;
+            }
+            ITmfEvent event = getNext(ctx);
+            if (event != null) {
+                final ITmfTimestamp curTime = event.getTimestamp();
+                setStartTime(curTime);
+                setEndTime(curTime);
+            }
+            ctx.dispose();
         } catch (IOException e) {
             throw new TmfTraceException(e.getMessage(), e);
         }