From f450c256d549c6c9bd7fe12306b6f5bed7d3643a Mon Sep 17 00:00:00 2001 From: Patrick Tasse Date: Mon, 30 Nov 2015 15:56:19 -0500 Subject: [PATCH] ctf: Fix lost events timestamp in CTFPacketReader The lost events should be inserted after the last event in the packet, not before the first event in the packet. This was a regression where the changes to CTFStreamInputPacketReader from https://git.eclipse.org/r/50683 were not ported to CTFPacketReader. Change-Id: I055887b02212bd43052d36fbbd0dde3ca36edb6e Signed-off-by: Patrick Tasse Reviewed-on: https://git.eclipse.org/r/61598 Reviewed-by: Matthew Khouzam Reviewed-by: Hudson CI --- .../core/tests/trace/CTFPacketReaderTest.java | 10 ++++---- .../ctf/core/trace/CTFPacketReader.java | 4 ++-- .../event/CtfTmfLostEventStatisticsTest.java | 2 +- .../tests/event/CtfTmfLostEventsTest.java | 24 +++++++++---------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/trace/CTFPacketReaderTest.java b/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/trace/CTFPacketReaderTest.java index 8d76ee260d..7defd85c7d 100644 --- a/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/trace/CTFPacketReaderTest.java +++ b/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/trace/CTFPacketReaderTest.java @@ -212,17 +212,17 @@ public class CTFPacketReaderTest { assertTrue(cpr.hasMoreEvents()); EventDefinition event = cpr.readNextEvent(); assertEquals(0L, event.getTimestamp()); - assertEquals(event.getDeclaration().getName(), CTFStrings.LOST_EVENT_NAME); - assertEquals(512L, ((IntegerDefinition) event.getFields().getDefinition(CTFStrings.LOST_EVENTS_FIELD)).getValue()); - assertTrue(cpr.hasMoreEvents()); - event = cpr.readNextEvent(); - assertEquals(0L, event.getTimestamp()); assertEquals(1L, ((IntegerDefinition) event.getFields().getDefinition("field")).getValue()); assertNotNull(cpr); assertTrue(cpr.hasMoreEvents()); event = cpr.readNextEvent(); assertEquals(256L, event.getTimestamp()); assertEquals(0x5a, ((IntegerDefinition) event.getFields().getDefinition("field")).getValue()); + assertTrue(cpr.hasMoreEvents()); + event = cpr.readNextEvent(); + assertEquals(256L, event.getTimestamp()); + assertEquals(event.getDeclaration().getName(), CTFStrings.LOST_EVENT_NAME); + assertEquals(512L, ((IntegerDefinition) event.getFields().getDefinition(CTFStrings.LOST_EVENTS_FIELD)).getValue()); assertFalse(cpr.hasMoreEvents()); } diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/trace/CTFPacketReader.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/trace/CTFPacketReader.java index 940490a80e..36e73697c5 100644 --- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/trace/CTFPacketReader.java +++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/trace/CTFPacketReader.java @@ -114,7 +114,7 @@ public final class CTFPacketReader implements IPacketReader, IDefinitionScope { @Override public boolean hasMoreEvents() { - return fInput.position() < fPacketContext.getContentSizeBits(); + return fHasLost || (fInput.position() < fPacketContext.getContentSizeBits()); } @Override @@ -125,7 +125,7 @@ public final class CTFPacketReader implements IPacketReader, IDefinitionScope { * Return the Lost Event after all other events in this packet. We need * to check if the bytebuffer is at the beginning too. */ - if (fHasLost && (posStart == fPacketContext.getPayloadStartBits())) { + if (fHasLost && (posStart >= fPacketContext.getContentSizeBits())) { fHasLost = false; return createLostEvent(fPacketContext); } diff --git a/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfLostEventStatisticsTest.java b/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfLostEventStatisticsTest.java index fd4b642c75..0cfedc2970 100644 --- a/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfLostEventStatisticsTest.java +++ b/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfLostEventStatisticsTest.java @@ -157,6 +157,6 @@ public class CtfTmfLostEventStatisticsTest { Map eventsInRange = fStats.getEventTypesInRange(rangeStart, rangeEnd); Long lostEventsInRange = eventsInRange.get(CTFStrings.LOST_EVENT_NAME); assertNotNull(lostEventsInRange); - assertEquals(363494L, lostEventsInRange.longValue()); + assertEquals(365752L, lostEventsInRange.longValue()); } } 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 96a0295766..81c1d67695 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 @@ -129,10 +129,10 @@ public class CtfTmfLostEventsTest { */ @Test public void testFirstLostEvent() { - final long rank = 152; - final long startTime = 1376592664828848222L; + final long rank = 190; + final long startTime = 1376592664828900165L; final ITmfTimestamp start = new TmfNanoTimestamp(startTime); - final ITmfTimestamp end = new TmfNanoTimestamp(startTime + 554854L); + final ITmfTimestamp end = new TmfNanoTimestamp(startTime + 502911L); final long nbLost = 859; validateLostEvent(rank, start, end, nbLost); @@ -143,10 +143,10 @@ public class CtfTmfLostEventsTest { */ @Test public void testSecondLostEvent() { - final long rank = 191; - final long startTime = 1376592664829402521L; + final long rank = 229; + final long startTime = 1376592664829477058L; final ITmfTimestamp start = new TmfNanoTimestamp(startTime); - final ITmfTimestamp end = new TmfNanoTimestamp(startTime + 421993L); + final ITmfTimestamp end = new TmfNanoTimestamp(startTime + 347456L); final long nbLost = 488; validateLostEvent(rank, start, end, nbLost); @@ -173,8 +173,8 @@ public class CtfTmfLostEventsTest { */ @Test public void testNormalEvent() { - final long rank = 193; - final ITmfTimestamp ts = new TmfNanoTimestamp(1376592664829411423L); + final long rank = 200; + final ITmfTimestamp ts = new TmfNanoTimestamp(1376592664829425780L); final CtfTmfEvent event = getOneEventTime(ts); /* Make sure seeking by rank yields the same event */ @@ -195,9 +195,9 @@ public class CtfTmfLostEventsTest { trace.setTimestampTransform(TimestampTransformFactory.createWithOffset(offset)); trace.indexTrace(true); - final long rank = 152; - final ITmfTimestamp start = new TmfNanoTimestamp(1376592664828848222L + offset); - final ITmfTimestamp end = new TmfNanoTimestamp(1376592664828848222L + 554854L + offset); + final long rank = 190; + final ITmfTimestamp start = new TmfNanoTimestamp(1376592664828900165L + offset); + final ITmfTimestamp end = new TmfNanoTimestamp(1376592664828900165L + 502911L + offset); final long nbLost = 859; ITmfContext context = trace.seekEvent(rank); @@ -268,7 +268,7 @@ public class CtfTmfLostEventsTest { public OneEventRequestPerTs(@NonNull ITmfTimestamp ts) { super(CtfTmfEvent.class, new TmfTimeRange(ts, ts), - 0, 1, ExecutionType.FOREGROUND); + 0, ITmfEventRequest.ALL_DATA, ExecutionType.FOREGROUND); } @Override -- 2.34.1