lttng.ust: Update callstack requirement with composite requirements
authorGeneviève Bastien <gbastien+lttng@versatic.net>
Thu, 28 Apr 2016 16:44:40 +0000 (12:44 -0400)
committerGenevieve Bastien <gbastien+lttng@versatic.net>
Thu, 12 May 2016 21:18:51 +0000 (17:18 -0400)
This also allows to verify that entry and exit events match

Change-Id: I4d59ea02d6d4c376b4f8d1b92e3b899d874c8d8e
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
lttng/org.eclipse.tracecompass.lttng2.ust.ui.tests/src/org/eclipse/tracecompass/lttng2/ust/ui/tests/analysis/callstack/LTTngUstCallStackAnalysisRequirementTest.java
lttng/org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/internal/lttng2/ust/ui/analysis/callstack/LttngUstCallStackAnalysisRequirement.java

index e1b68396206c4c74b6b06d6a0ecdcd1b79ecb59f..c423c969acc71e6ce59e479d7b923d82668c4354 100644 (file)
@@ -83,7 +83,8 @@ public class LTTngUstCallStackAnalysisRequirementTest {
         TRACE_WITH_VALID_EVENTS_WRONG_FIELDS(EventType.EVT_ENTRY_FAST_EMPTY_FIELDS,
                 EventType.EVT_EXIT_FAST, false),
         TRACE_WITH_MISSING_EVENTS(EventType.EVT_OTHER,
-                    EventType.EVT_EXIT_FAST, false);
+                    EventType.EVT_EXIT_FAST, false),
+        TRACE_MISMATCH_EVENTS(EventType.EVT_ENTRY_FAST, EventType.EVT_EXIT, false);
 
         private final @NonNull LttngUstTrace fTrace;
         private final boolean fIsValid;
index 150eadecc839fa3b1588da57033b906b6290cbce..3e0ee700b26f4f84fafcaa96ba64e7e27f2bbff3 100644 (file)
@@ -10,9 +10,7 @@ package org.eclipse.tracecompass.internal.lttng2.ust.ui.analysis.callstack;
 
 import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import java.util.Collection;
 import java.util.Set;
 
 import org.eclipse.jdt.annotation.NonNull;
@@ -20,7 +18,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.tracecompass.lttng2.ust.core.trace.layout.ILttngUstEventLayout;
 import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisEventFieldRequirement;
 import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisRequirement;
-import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfCompositeAnalysisRequirement;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -31,10 +29,8 @@ import com.google.common.collect.ImmutableSet;
  *
  */
 @NonNullByDefault
-public class LttngUstCallStackAnalysisRequirement extends TmfAnalysisRequirement {
+public class LttngUstCallStackAnalysisRequirement extends TmfCompositeAnalysisRequirement {
 
-    private List<TmfAnalysisEventFieldRequirement> fEntryRequirements = new ArrayList<>();
-    private List<TmfAnalysisEventFieldRequirement> fExitRequirements = new ArrayList<>();
     /**
      * Constructor
      *
@@ -42,50 +38,42 @@ public class LttngUstCallStackAnalysisRequirement extends TmfAnalysisRequirement
      *            The event layout (non-null)
      */
     public LttngUstCallStackAnalysisRequirement(ILttngUstEventLayout layout) {
-        super(Collections.EMPTY_SET, PriorityLevel.MANDATORY);
+        super(getSubRequirements(layout), PriorityLevel.AT_LEAST_ONE);
 
+        addInformation(nullToEmptyString(Messages.LttnUstCallStackAnalysisModule_EventsLoadingInformation));
+    }
+
+    private static Collection<TmfAnalysisRequirement> getSubRequirements(ILttngUstEventLayout layout) {
         Set<@NonNull String> requiredEventsFields = ImmutableSet.of(
                 layout.contextProcname(),
                 layout.contextVtid());
-        TmfAnalysisEventFieldRequirement requirement = new TmfAnalysisEventFieldRequirement(
+
+        // Requirement for the cyg_profile events
+        TmfAnalysisEventFieldRequirement entryReq = new TmfAnalysisEventFieldRequirement(
                 layout.eventCygProfileFuncEntry(),
                 requiredEventsFields,
                 PriorityLevel.MANDATORY);
-        fEntryRequirements.add(requirement);
 
-        requirement = new TmfAnalysisEventFieldRequirement(
-                layout.eventCygProfileFastFuncEntry(),
+        TmfAnalysisRequirement exitReq = new TmfAnalysisEventFieldRequirement(
+                layout.eventCygProfileFuncExit(),
                 requiredEventsFields,
                 PriorityLevel.MANDATORY);
-        fEntryRequirements.add(requirement);
 
-        requirement = new TmfAnalysisEventFieldRequirement(
-                layout.eventCygProfileFuncExit(),
+        TmfAnalysisRequirement cygProfile = new TmfCompositeAnalysisRequirement(ImmutableSet.of(entryReq, exitReq), PriorityLevel.MANDATORY);
+
+        // Requirement for the cyg_profile_fast events
+        entryReq = new TmfAnalysisEventFieldRequirement(
+                layout.eventCygProfileFastFuncEntry(),
                 requiredEventsFields,
                 PriorityLevel.MANDATORY);
-        fExitRequirements.add(requirement);
 
-        requirement = new TmfAnalysisEventFieldRequirement(
+        exitReq = new TmfAnalysisEventFieldRequirement(
                 layout.eventCygProfileFastFuncExit(),
                 requiredEventsFields,
                 PriorityLevel.MANDATORY);
-        fExitRequirements.add(requirement);
+        TmfAnalysisRequirement cygProfileFast = new TmfCompositeAnalysisRequirement(ImmutableSet.of(entryReq, exitReq), PriorityLevel.MANDATORY);
 
-        // Add mandatory values (event names and context names)
-        addInformation(nullToEmptyString(Messages.LttnUstCallStackAnalysisModule_EventsLoadingInformation));
+        return ImmutableSet.of(cygProfile, cygProfileFast);
     }
 
-    @Override
-    public boolean test(ITmfTrace trace) {
-        boolean fullfilled = fEntryRequirements.stream().anyMatch(requirement -> {
-            return requirement.test(trace);
-        });
-
-        if (fullfilled) {
-            fullfilled = fExitRequirements.stream().anyMatch(requirement -> {
-                return requirement.test(trace);
-            });
-        }
-        return fullfilled;
-    }
 }
This page took 0.028331 seconds and 5 git commands to generate.