ctf.core: Support traces with empty packets before the end
authorMatthew Khouzam <matthew.khouzam@ericsson.com>
Wed, 22 Mar 2017 18:06:13 +0000 (14:06 -0400)
committerMatthew Khouzam <matthew.khouzam@ericsson.com>
Wed, 3 May 2017 19:14:51 +0000 (15:14 -0400)
This patch allows tracecompass to support CTF traces containing empty
packets.

Change-Id: I8876e26e7224c147620b548220de2f7020b5dd33
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/93647
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-by: Hudson CI
ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/trace/CTFStreamInputPacketIndexTest.java
ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/trace/PacketStub.java
ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/trace/CTFStreamInput.java
ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/trace/CTFStreamInputReader.java
ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/trace/StreamInputPacketIndex.java

index 393ca56b101cf518e1c6c2081786876cc1a56c6b..4d00f681ea41c40a46e3c380063ffec32c02e477 100644 (file)
@@ -134,9 +134,20 @@ public class CTFStreamInputPacketIndexTest {
     @Test
     public void testStreamInputPacketIndexInvalidAppend() {
         fFixture = new StreamInputPacketIndex();
-        assertTrue(fFixture.append(new PacketStub(0, 0, -1)));
-        assertFalse(fFixture.append(new PacketStub(0, 0, 0)));
-        assertFalse(fFixture.append(new PacketStub(0, -1, 0)));
+        assertTrue(fFixture.append(new PacketStub(0, 0, 1)));
+        assertFalse("Same offset", fFixture.append(new PacketStub(0, 1, 2)));
+        assertFalse("Before", fFixture.append(new PacketStub(1, -1, 0)));
+        assertFalse("Empty", fFixture.append(new PacketStub(2, 3, 4) {
+            @Override
+            public long getContentSizeBits() {
+                return 0;
+            }
+
+            @Override
+            public long getPayloadStartBits() {
+                return 0;
+            }
+        }));
     }
 
 }
\ No newline at end of file
index 45ec8f0b494f2ed02ce2b8714906008507040f9a..17afc4719289c4c6df2d795d20276cdfce44222e 100644 (file)
@@ -25,8 +25,8 @@ class PacketStub implements ICTFPacketDescriptor {
     private final long fTsStart;
     private final long fTsEnd;
 
-    public PacketStub(long offset, long start, long end) {
-        fOffsetBytes = offset;
+    public PacketStub(long packetNumber, long start, long end) {
+        fOffsetBytes = packetNumber * getPacketSizeBits();
         fTsStart = start;
         fTsEnd = end;
     }
@@ -43,12 +43,12 @@ class PacketStub implements ICTFPacketDescriptor {
 
     @Override
     public long getPacketSizeBits() {
-        return 0;
+        return 3;
     }
 
     @Override
     public long getContentSizeBits() {
-        return 0;
+        return 2;
     }
 
     @Override
@@ -88,7 +88,7 @@ class PacketStub implements ICTFPacketDescriptor {
 
     @Override
     public long getPayloadStartBits() {
-        return 0;
+        return 1;
     }
 
     @Override
index 673fe6202a55ac848c842423975887ade0615ab4..c42642c2f6cc798459be1bce59cc30e8e91c1fb2 100644 (file)
@@ -228,8 +228,7 @@ public class CTFStreamInput implements IDefinitionScope {
             currentPosBits = pos.getOffsetBits() + pos.getPacketSizeBits();
         }
         if (currentPosBits < getStreamSizeBits()) {
-            fIndex.append(createPacketIndexEntry(currentPosBits));
-            return true;
+            return fIndex.append(createPacketIndexEntry(currentPosBits));
         }
         return false;
     }
index 093d083ddba4338eac66b7b3abf8c2126254a8d3..54e37cbfe29eb3c47667f4461a60a659d5088f94 100644 (file)
@@ -299,12 +299,15 @@ public class CTFStreamInputReader implements AutoCloseable {
         /*
          * Change packet if needed
          */
-        if (!fPacketReader.hasMoreEvents()) {
+        while (!fPacketReader.hasMoreEvents()) {
             final ICTFPacketDescriptor prevPacket = fPacketReader.getCurrentPacket();
-            if (prevPacket != null || fLive) {
-                goToNextPacket();
+            if (prevPacket == null) {
+                if (fLive) {
+                    goToNextPacket();
+                }
+                break;
             }
-
+            goToNextPacket();
         }
 
         /*
@@ -496,10 +499,11 @@ public class CTFStreamInputReader implements AutoCloseable {
     }
 
     private @Nullable ICTFPacketDescriptor getPacket() {
-        if (getPacketIndex() >= fStreamInput.getIndex().size()) {
+        int packetIndex = getPacketIndex();
+        if (packetIndex >= fStreamInput.getIndex().size()) {
             return null;
         }
-        return fStreamInput.getIndex().getElement(getPacketIndex());
+        return fStreamInput.getIndex().getElement(packetIndex);
     }
 
     /**
index bb6aa86f73e3b67542104b1ae1be9016910c904e..70f90ca94c04835d1a83f6343afc077b906a90d1 100644 (file)
@@ -102,9 +102,9 @@ public class StreamInputPacketIndex {
          * Validate entries are inserted in monotonic increasing timestamp
          * order.
          */
-        if (!fEntries.isEmpty() &&
+        if (!fEntries.isEmpty() && ((entryToAdd.getContentSizeBits() <= entryToAdd.getPayloadStartBits()) ||
                 (entryToAdd.getTimestampBegin() < lastElement().getTimestampBegin() ||
-                        entryToAdd.getOffsetBytes() <= lastElement().getOffsetBytes())) {
+                        entryToAdd.getOffsetBytes() <= lastElement().getOffsetBytes()))) {
             return false;
         }
 
This page took 0.028664 seconds and 5 git commands to generate.