xml: support any aspects to be used in XML analysis
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Tue, 29 Nov 2016 22:36:11 +0000 (23:36 +0100)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Tue, 13 Dec 2016 11:01:32 +0000 (06:01 -0500)
Some traces have aspects to show special data in a column. With this
commit it is possible to use any aspect in the XML anlysis.

Change-Id: I9dedc910e9465ac94f82912dc9095e9d315b0882
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/86002
Reviewed-by: Hudson CI
Tested-by: Jean-Christian Kouame <jean-christian.kouame@ericsson.com>
Reviewed-by: Jean-Christian Kouame <jean-christian.kouame@ericsson.com>
tmf/org.eclipse.tracecompass.tmf.analysis.xml.core/src/org/eclipse/tracecompass/internal/tmf/analysis/xml/core/model/TmfXmlStateAttribute.java
tmf/org.eclipse.tracecompass.tmf.analysis.xml.core/src/org/eclipse/tracecompass/internal/tmf/analysis/xml/core/model/TmfXmlStateValue.java

index aa31e945d6914c1a8d8c57698c2ee01aa889e42e..94ae688090016be474db5746cf563848d088bd79 100644 (file)
 
 package org.eclipse.tracecompass.internal.tmf.analysis.xml.core.model;
 
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
+
 import java.util.LinkedList;
 import java.util.List;
 
 import org.eclipse.jdt.annotation.Nullable;
-import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
-import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
-
 import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.Activator;
 import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.IXmlStateSystemContainer;
 import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlUtils;
@@ -31,6 +31,7 @@ import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue;
 import org.eclipse.tracecompass.statesystem.core.statevalue.TmfStateValue;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
+import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
 import org.eclipse.tracecompass.tmf.core.event.aspect.TmfCpuAspect;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.w3c.dom.Element;
@@ -223,6 +224,8 @@ public abstract class TmfXmlStateAttribute implements ITmfXmlStateAttribute {
                 if (name == null) {
                     throw new IllegalStateException("Invalid attribute name"); //$NON-NLS-1$
                 }
+
+                Object fieldValue = null;
                 /* First, look for a field with the given name */
                 ITmfEventField field = event.getContent().getField(name);
                 /* Field not found, see if it is a special case field */
@@ -234,10 +237,18 @@ public abstract class TmfXmlStateAttribute implements ITmfXmlStateAttribute {
                         if (cpu != null) {
                             return getQuarkRelativeAndAdd(startQuark, cpu.toString());
                         }
+                        return IXmlStateSystemContainer.ERROR_QUARK;
+                    }
+                    /* Search between the trace event aspects */
+                    for (ITmfEventAspect<?> aspect : event.getTrace().getEventAspects()) {
+                        if (aspect.getName().equals(fName)) {
+                            fieldValue = aspect.resolve(event);
+                            break;
+                        }
                     }
-                    return IXmlStateSystemContainer.ERROR_QUARK;
+                } else {
+                    fieldValue = field.getValue();
                 }
-                Object fieldValue = field.getValue();
 
                 if (fieldValue instanceof String) {
                     String fieldString = (String) fieldValue;
@@ -249,6 +260,7 @@ public abstract class TmfXmlStateAttribute implements ITmfXmlStateAttribute {
                     Integer fieldInterger = (Integer) fieldValue;
                     quark = getQuarkRelativeAndAdd(startQuark, fieldInterger.toString());
                 }
+
                 return quark;
             }
             case QUERY: {
index 2f0360a7bb740d9b1b11852e78b4785b60fb770d..c4ea951b96ee30ff8d596b150e7d7849c3226935 100644 (file)
@@ -30,6 +30,7 @@ import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue;
 import org.eclipse.tracecompass.statesystem.core.statevalue.TmfStateValue;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
+import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
 import org.eclipse.tracecompass.tmf.core.event.aspect.TmfCpuAspect;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.w3c.dom.Element;
@@ -297,9 +298,10 @@ public abstract class TmfXmlStateValue implements ITmfXmlStateValue {
 
         final ITmfEventField field = event.getContent().getField(fieldName);
 
+        Object fieldValue = null;
+
         /* If the field does not exist, see if it's a special case */
         if (field == null) {
-
             if (fieldName.equalsIgnoreCase(TmfXmlStrings.CPU)) {
                 /* A "CPU" field will return the CPU aspect if available */
                 Integer cpu = TmfTraceUtils.resolveIntEventAspectOfClassForEvent(event.getTrace(), TmfCpuAspect.class, event);
@@ -313,11 +315,20 @@ public abstract class TmfXmlStateValue implements ITmfXmlStateValue {
                  */
                 return TmfStateValue.newValueLong(event.getTimestamp().getValue());
             }
-            return value;
+            // This will allow to use any column as input
+            for (ITmfEventAspect<?> aspect : event.getTrace().getEventAspects()) {
+                if (aspect.getName().equals(fieldName)) {
+                    fieldValue = aspect.resolve(event);
+                    break;
+                }
+            }
+            if (fieldValue == null) {
+                return value;
+            }
+        } else {
+            fieldValue = field.getValue();
         }
 
-        Object fieldValue = field.getValue();
-
         /*
          * Try to find the right type. The type can be forced by
          * "forcedType" argument.
This page took 0.027184 seconds and 5 git commands to generate.