From: Marc-Andre Laperle Date: Fri, 14 Aug 2015 18:27:54 +0000 (-0400) Subject: [CTF] Events wrongly parsed as Lost Events X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=dd7f18790ea50e1c5e8167845fe53e3ec5ff648a;p=deliverable%2Ftracecompass.git [CTF] Events wrongly parsed as Lost Events In CTFStreamInputPacketReader, setCurrentPacket can be called multiple times without necessarily calling readNextEvent, which means that the cached value for fHasLost can be wrong the next time readNextEvent is called. Bug: 475007 Change-Id: I36c22c22c144cb8307403f93c76c996c60ff52aa Signed-off-by: Marc-Andre Laperle Reviewed-on: https://git.eclipse.org/r/53811 Reviewed-by: Hudson CI Reviewed-by: Matthew Khouzam --- diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/trace/CTFStreamInputPacketReader.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/trace/CTFStreamInputPacketReader.java index 4f82c1e7af..88e1a9ea9a 100644 --- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/trace/CTFStreamInputPacketReader.java +++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/trace/CTFStreamInputPacketReader.java @@ -235,6 +235,7 @@ public class CTFStreamInputPacketReader implements IDefinitionScope, AutoCloseab */ public void setCurrentPacket(ICTFPacketDescriptor currentPacket) throws CTFException { fCurrentPacket = currentPacket; + fHasLost = false; if (fCurrentPacket != null) { /* diff --git a/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/shared/org/eclipse/tracecompass/tmf/ctf/core/tests/shared/CtfTmfTestTrace.java b/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/shared/org/eclipse/tracecompass/tmf/ctf/core/tests/shared/CtfTmfTestTrace.java index 0b629b44c4..1abbdbd8fb 100644 --- a/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/shared/org/eclipse/tracecompass/tmf/ctf/core/tests/shared/CtfTmfTestTrace.java +++ b/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/shared/org/eclipse/tracecompass/tmf/ctf/core/tests/shared/CtfTmfTestTrace.java @@ -56,7 +56,9 @@ public enum CtfTmfTestTrace { /** Autogenerated Syntetic trace */ SYNTHETIC_TRACE, /** Trace with non-standard field sizes */ - FUNKY_TRACE; + FUNKY_TRACE, + /** Example dynamic scope, timestamp in field, empty stream trace */ + DYNSCOPE; private final String fPath; diff --git a/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfLostEventsTest.java b/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfLostEventsTest.java index 4baa894fd5..be188527cb 100644 --- a/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfLostEventsTest.java +++ b/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfLostEventsTest.java @@ -95,6 +95,34 @@ public class CtfTmfLostEventsTest { assertEquals(expectedLost, req.getLost()); } + /** + * Test that the number of events is reported correctly (a range of lost + * events is counted as one event). Events could be wrongly counted as lost + * events in certain situations. + */ + @Test + public void testNbEventsBug475007() { + final CtfTmfTestTrace tmfTestTrace = CtfTmfTestTrace.DYNSCOPE; + assumeTrue(tmfTestTrace.exists()); + try (CtfTmfTrace trace = tmfTestTrace.getTrace()) { + trace.indexTrace(true); + + final long expectedReal = 100003; + final long expectedLost = 1; + + EventCountRequest req = new EventCountRequest(); + trace.sendRequest(req); + try { + req.waitForCompletion(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + assertEquals(expectedReal, req.getReal()); + assertEquals(expectedLost, req.getLost()); + } + } + /** * Test getting the first lost event from the trace. */