ctf: Make packet descriptor information available to event
authorMatthew Khouzam <matthew.khouzam@ericsson.com>
Wed, 2 Dec 2015 21:01:14 +0000 (16:01 -0500)
committerMatthew Khouzam <matthew.khouzam@ericsson.com>
Thu, 17 Dec 2015 00:45:01 +0000 (19:45 -0500)
This allows the event to know what the packet context is for
its parent packet. This is especially useful if one puts non-
LTTng information in the packet such as the source gpu.

Change-Id: I21ff283c1032e5a3157408b304b2611d1113d4f7
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/61816
Reviewed-by: Hudson CI
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
Tested-by: Patrick Tasse <patrick.tasse@gmail.com>
ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/event/CTFEventDefinitionTest.java
ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/trace/CTFStreamInputReaderTest.java
ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/EventDefinition.java
ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/event/EventDeclaration.java
ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/trace/CTFPacketReader.java

index 67fdb0df9f59e9b8fda19e30b298e5c05c152395..62c5e6201a5f2b20e97b256a9af8a2b32afe50c9 100644 (file)
@@ -80,22 +80,22 @@ public class CTFEventDefinitionTest {
 
         int cpu = EventDefinition.UNKNOWN_CPU;
 
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, null, null));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, null, fields));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, pContext, null));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, pContext, fields));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, null, null));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, null, fields));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, pContext, null));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, pContext, fields));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, null, null));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, null, fields));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, pContext, null));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, pContext, fields));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, null, null));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, null, fields));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, pContext, null));
-        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, pContext, fields));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, null, null, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, null, fields, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, pContext, null, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, pContext, fields, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, null, null, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, null, fields, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, pContext, null, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, pContext, fields, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, null, null, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, null, fields, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, pContext, null, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, pContext, fields, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, null, null, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, null, fields, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, pContext, null, null));
+        fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, pContext, fields, null));
     }
 
     /**
index ccfab8e98543b9d8031cc8bbdcf8e60c86697bcf..01b501b6ace948a5d61c76105f24b9e7b6475929 100644 (file)
@@ -63,13 +63,13 @@ public class CTFStreamInputReaderTest {
         fixture = getStreamInputReader();
         fixture.setName(1);
         fixture.setCurrentEvent(new EventDefinition(new EventDeclaration(),
-                getStreamInputReader().getCPU(), 0, null, null, null,
+                fixture.getCPU(), 0, null, null, null,
                 new StructDefinition(
                         new StructDeclaration(0),
                         null,
                         "packet",
                         new Definition[] { new StringDefinition(StringDeclaration.getStringDeclaration(Encoding.UTF8), null, "field", "test") }),
-                null));
+                null, fixture.getCurrentPacketReader().getCurrentPacket()));
     }
 
     private static CTFStreamInputReader getStreamInputReader() throws CTFException {
@@ -218,11 +218,16 @@ public class CTFStreamInputReaderTest {
      * given the timestamp we want.
      *
      * @throws CTFException
+     *             error
+     * @throws IOException
+     *             file not there
      */
     @Test
-    public void testSeek_eventDefinition() throws CTFException {
-        EventDefinition eventDefinition = new EventDefinition(
-                new EventDeclaration(), getStreamInputReader().getCPU(), 1L, null, null, null, null, null);
-        fixture.setCurrentEvent(eventDefinition);
+    public void testSeek_eventDefinition() throws CTFException, IOException {
+        try (CTFStreamInputReader streamInputReader = getStreamInputReader()) {
+            EventDefinition eventDefinition = new EventDefinition(
+                    new EventDeclaration(), streamInputReader.getCPU(), 1L, null, null, null, null, null, streamInputReader.getCurrentPacketReader().getCurrentPacket());
+            fixture.setCurrentEvent(eventDefinition);
+        }
     }
 }
index 2f1003cf4593ff26acb8364d4b8cc63da8bbdc00..5b90a63392e3a72d8b1a7b773cc9c61a71f83867 100644 (file)
 package org.eclipse.tracecompass.ctf.core.event;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.tracecompass.ctf.core.event.scope.IDefinitionScope;
 import org.eclipse.tracecompass.ctf.core.event.scope.ILexicalScope;
 import org.eclipse.tracecompass.ctf.core.event.scope.LexicalScope;
@@ -24,6 +27,7 @@ import org.eclipse.tracecompass.ctf.core.event.types.ICompositeDefinition;
 import org.eclipse.tracecompass.ctf.core.event.types.IDefinition;
 import org.eclipse.tracecompass.ctf.core.event.types.StructDeclaration;
 import org.eclipse.tracecompass.ctf.core.event.types.StructDefinition;
+import org.eclipse.tracecompass.ctf.core.trace.ICTFPacketDescriptor;
 import org.eclipse.tracecompass.internal.ctf.core.event.EventDeclaration;
 
 /**
@@ -45,7 +49,7 @@ public final class EventDefinition implements IDefinitionScope {
     /**
      * A null event, can be used for testing or poison pilling
      */
-    public static final @NonNull EventDefinition NULL_EVENT = new EventDefinition(new EventDeclaration(), UNKNOWN_CPU, -1L, null, null, null, null, null);
+    public static final @NonNull EventDefinition NULL_EVENT = new EventDefinition(new EventDeclaration(), UNKNOWN_CPU, -1L, null, null, null, null, null, null);
 
     /**
      * The corresponding event declaration.
@@ -78,6 +82,8 @@ public final class EventDefinition implements IDefinitionScope {
      */
     private final int fCpu;
 
+    private final @NonNull Map<String, Object> fPacketAttributes;
+
     // ------------------------------------------------------------------------
     // Constructors
     // ------------------------------------------------------------------------
@@ -98,11 +104,14 @@ public final class EventDefinition implements IDefinitionScope {
      * @param eventContext
      *            The event context
      * @param packetContext
-     *            the packet context (the one with content size, not magic number)
+     *            the packet context (the one with content size, not magic
+     *            number)
      * @param streamContext
      *            the stream context
      * @param fields
      *            The event fields
+     * @param packetDescriptor
+     *            descriptor of the packet containing this event
      * @since 2.0
      */
     public EventDefinition(IEventDeclaration declaration,
@@ -112,7 +121,8 @@ public final class EventDefinition implements IDefinitionScope {
             ICompositeDefinition streamContext,
             ICompositeDefinition eventContext,
             ICompositeDefinition packetContext,
-            ICompositeDefinition fields) {
+            ICompositeDefinition fields,
+            @Nullable ICTFPacketDescriptor packetDescriptor) {
         fDeclaration = declaration;
         fEventHeaderDefinition = eventHeaderDefinition;
         fCpu = cpu;
@@ -121,6 +131,7 @@ public final class EventDefinition implements IDefinitionScope {
         fEventContext = eventContext;
         fPacketContext = packetContext;
         fStreamContext = streamContext;
+        fPacketAttributes = packetDescriptor != null ? packetDescriptor.getAttributes() : Collections.EMPTY_MAP;
     }
 
     // ------------------------------------------------------------------------
@@ -258,6 +269,15 @@ public final class EventDefinition implements IDefinitionScope {
         return fTimestamp;
     }
 
+    /**
+     * Get the packet attributes.
+     *
+     * @return the packet attributes, such as "device" and "timestamp_begin"
+     * @since 2.0
+     */
+    public @NonNull Map<String, Object> getPacketAttributes() {
+        return fPacketAttributes;
+    }
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
index 3172b9daa219862dc9553c5abe5af7d0f952d887..e10cfd1d03bd5208c660cd4a8ce1bfe447a816fd 100644 (file)
@@ -126,7 +126,8 @@ public class EventDeclaration implements IEventDeclaration {
                 streamEventContext,
                 eventContext,
                 packetContext,
-                eventPayload);
+                eventPayload,
+                packetDescriptor);
     }
 
     private static long calculateTimestamp(@Nullable ICompositeDefinition eventHeaderDef, long prevTimestamp, StructDefinition eventPayload, StructDefinition eventContext) throws CTFIOException {
@@ -176,7 +177,8 @@ public class EventDeclaration implements IEventDeclaration {
                 streamEventContext,
                 eventContext,
                 packetContext,
-                eventPayload);
+                eventPayload,
+                streamInputReader.getCurrentPacketReader().getCurrentPacket());
     }
 
     // ------------------------------------------------------------------------
index 36e73697c5fb3c4129a359a227958bb22c0763f0..c04ecf6096eabb74bfa4e171ba247d3e5c45f70c 100644 (file)
@@ -223,7 +223,8 @@ public final class CTFPacketReader implements IPacketReader, IDefinitionScope {
                 new StructDefinition(
                         lostFields,
                         this, "fields", //$NON-NLS-1$
-                        fields));
+                        fields),
+                fPacketContext);
     }
 
     @Override
This page took 0.03114 seconds and 5 git commands to generate.