/** Worker is waiting for user input */
USER_INPUT,
/** Block device */
- BLOCK_DEVICE
-
+ BLOCK_DEVICE,
+ /** inter-processor interrupt */
+ IPI,
}
private EdgeType fType;
break;
}
switch (nextEdge.getType()) {
+ case IPI:
case USER_INPUT:
case BLOCK_DEVICE:
case TIMER:
USER_INPUT (new RGB(0x5a, 0x01, 0x01)),
/** Worker is waiting on network */
NETWORK (new RGB(0xff, 0x9b, 0xff)),
+ /** Worker is waiting for an IPI */
+ IPI (new RGB(0x66, 0x66, 0xcc)),
/** Any other reason */
UNKNOWN (new RGB(0x40, 0x3b, 0x33));
return State.USER_INPUT;
case 6:
return State.NETWORK;
+ case 7:
+ return State.IPI;
default:
return State.UNKNOWN;
}
case USER_INPUT:
state = State.USER_INPUT;
break;
+ case IPI:
+ state = State.IPI;
+ break;
case EPS:
case UNKNOWN:
case DEFAULT:
import org.eclipse.tracecompass.analysis.graph.core.base.TmfVertex;
import org.eclipse.tracecompass.analysis.graph.core.base.TmfVertex.EdgeDirection;
import org.eclipse.tracecompass.analysis.graph.core.building.AbstractTmfGraphProvider;
+import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelAnalysisEventLayout;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.handlers.EventContextHandler;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.handlers.TraceEventHandlerExecutionGraph;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.handlers.TraceEventHandlerSched;
*/
public class LttngKernelExecGraphProvider extends AbstractTmfGraphProvider {
- private final LttngEventLayout fEventLayout;
private final LttngSystemModel fSystem;
/**
/** The interrupt is an IRQ */
IRQ,
/** The interrupt is a timer */
- HRTIMER
+ HRTIMER,
+ /** The inter-processor interrupt */
+ IPI,
}
/**
super(trace, "LTTng Kernel"); //$NON-NLS-1$
fSystem = new LttngSystemModel();
- /*
- * TODO: factorize this code because it is duplicated everywhere to
- * access layout
- */
- if (trace instanceof LttngKernelTrace) {
-
- fEventLayout = (LttngEventLayout) ((LttngKernelTrace) trace).getKernelEventLayout();
- } else {
- /* Fall-back to the base LttngEventLayout */
- fEventLayout = (LttngEventLayout) LttngEventLayout.getInstance();
- }
-
registerHandler(new TraceEventHandlerStatedump(this));
registerHandler(new TraceEventHandlerSched(this));
registerHandler(new EventContextHandler(this));
}
/**
- * Returns the event layout for the current trace
+ * Returns the event layout for the given trace
+ *
+ * @param trace
+ * the trace
*
* @return the eventLayout
*/
- public LttngEventLayout getEventLayout() {
- return fEventLayout;
+ public IKernelAnalysisEventLayout getEventLayout(ITmfTrace trace) {
+ if (trace instanceof LttngKernelTrace) {
+ return ((LttngKernelTrace) trace).getKernelEventLayout();
+ }
+ return LttngEventLayout.getInstance();
}
/**
import java.util.Set;
import org.eclipse.tracecompass.analysis.graph.core.building.AbstractTraceEventHandler;
+import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelAnalysisEventLayout;
+import org.eclipse.tracecompass.common.core.NonNullUtils;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.building.LttngKernelExecGraphProvider;
+import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.Lttng27EventLayout;
+import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.Lttng28EventLayout;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.LttngEventLayout;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.ITmfEventType;
public class BaseHandler extends AbstractTraceEventHandler {
private final LttngKernelExecGraphProvider fProvider;
- private Map<ITmfTrace, Boolean> fHasEventSchedTTWU;
+
+ /**
+ * The fWakeupEventMap is populated with the prefered wake-up event for a
+ * given trace. Here is the possible values for LTTng, that are in priority
+ * order:
+ *
+ * <pre>
+ * - linux all versions and lttng all versions: sched_ttwu
+ * - linux >= 4.3 and lttng >= 2.8: sched_waking + sched_wakeup_new
+ * - linux < 3.8.0: sched_wakeup + sched_wakeup_new
+ * </pre>
+ *
+ * The acronym ttwu stands for "Try To Wake Up". The sched_ttwu requires
+ * lttng-modules addons and works with all versions of linux and LTTng. This
+ * event alone is sufficient, because it a placeholder for both sched_wakeup
+ * and sched_wakeup_new. The event sched_wakeup_new is a special case, and
+ * is emitted when a process is created and is scheduled for the first time.
+ * Therefore, we use in priority sched_ttwu if available, then sched_waking
+ * and as a last resort, we use sched_wakup, but this last option will work
+ * only for older kernels.
+ *
+ * If the trace has more than one type of wake-up event enabled, we ensure
+ * that only one type will be processed.
+ */
+ private Map<ITmfTrace, String> fWakeupEventMap;
BaseHandler(LttngKernelExecGraphProvider provider) {
fProvider = provider;
- fHasEventSchedTTWU = new HashMap<>();
+ fWakeupEventMap = new HashMap<>();
ITmfTrace trace = getProvider().getTrace();
- LttngEventLayout layout = getProvider().getEventLayout();
Collection<ITmfTrace> traceSet = TmfTraceManager.getTraceSet(trace);
for (ITmfTrace traceItem : traceSet) {
+ IKernelAnalysisEventLayout layout = getProvider().getEventLayout(traceItem);
if (traceItem instanceof ITmfTraceWithPreDefinedEvents) {
Set<? extends ITmfEventType> content = ((ITmfTraceWithPreDefinedEvents) traceItem).getContainedEventTypes();
Set<String> traceEvents = TmfEventTypeCollectionHelper.getEventNames(content);
- boolean hasEvent = traceEvents.contains(layout.eventSchedProcessTTWU());
- fHasEventSchedTTWU.put(traceItem, hasEvent);
+
+ /* default wake-up event */
+ String wakeupEvent = layout.eventSchedProcessWakeup();
+
+ /*
+ * FIXME: downcast in the client should be avoided
+ */
+ if (layout instanceof LttngEventLayout) {
+ LttngEventLayout lttngLayout = (LttngEventLayout) layout;
+ if (traceEvents.contains(lttngLayout.eventSchedProcessTTWU())) {
+ /* use sched_ttwu if available */
+ wakeupEvent = lttngLayout.eventSchedProcessTTWU();
+ } else if (layout instanceof Lttng28EventLayout) {
+ /* use sched_waking if available */
+ Lttng28EventLayout layout28 = (Lttng28EventLayout) layout;
+ if (traceEvents.contains(layout28.eventSchedProcessWaking())) {
+ wakeupEvent = layout28.eventSchedProcessWaking();
+ }
+ }
+ }
+ fWakeupEventMap.put(traceItem, wakeupEvent);
}
}
}
* @return the graph provider
*/
public LttngKernelExecGraphProvider getProvider() {
- return fProvider;
+ return NonNullUtils.checkNotNull(fProvider);
}
/**
- * Return if the trace has the try to wake-up event
+ * Return if this event is a wake-up event for this trace
*
- * @param trace
+ * @param event
* the trace to check
- * @return if the trace has the try to wake-up event
+ * @return true if this is a wake-up event to process, false otherwise
+ */
+ public boolean isWakeupEvent(ITmfEvent event) {
+ String eventName = event.getName();
+ ITmfTrace trace = event.getTrace();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
+ String wakeupEventName = NonNullUtils.nullToEmptyString(fWakeupEventMap.get(trace));
+
+ /* First, check if sched_ttwu is the current wake-up event for this trace */
+ if (eventLayout instanceof LttngEventLayout) {
+ LttngEventLayout layoutDefault = (LttngEventLayout) eventLayout;
+ if (wakeupEventName.equals(layoutDefault.eventSchedProcessTTWU())) {
+ return eventName.equals(layoutDefault.eventSchedProcessTTWU());
+ }
+ }
+
+ /* Fall back to built-in sched_waking and sched_wakeup_new */
+ if (eventLayout instanceof Lttng28EventLayout) {
+ Lttng28EventLayout layout28 = (Lttng28EventLayout) eventLayout;
+ if (wakeupEventName.equals(layout28.eventSchedProcessWaking())) {
+ return (eventName.equals(layout28.eventSchedProcessWaking()) ||
+ eventName.equals(layout28.eventSchedProcessWakeupNew()));
+ }
+ }
+
+ /* Legacy support using built-in sched_wakeup and sched_wakeup_new */
+ if (eventLayout instanceof LttngEventLayout) {
+ LttngEventLayout layoutDefault = (LttngEventLayout) eventLayout;
+ if (wakeupEventName.equals(layoutDefault.eventSchedProcessWakeup())) {
+ return (eventName.equals(layoutDefault.eventSchedProcessWakeup()) ||
+ eventName.equals(layoutDefault.eventSchedProcessWakeupNew()));
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Return true if this event is an IPI entry
+ *
+ * @param event
+ * the event
+ * @return true of this is an IPI entry, false otherwise
*/
- public boolean traceHasEventSchedTTWU(ITmfTrace trace) {
- Boolean ret = fHasEventSchedTTWU.get(trace);
- if (ret == null) {
- return false;
+ public boolean isIpiEntry(ITmfEvent event) {
+ return layoutContainsEvent(event, true);
+ }
+
+ /**
+ * Return true if this event is an IPI exit
+ *
+ * @param event
+ * the event
+ * @return true of this is an IPI exit, false otherwise
+ */
+ public boolean isIpiExit(ITmfEvent event) {
+ return layoutContainsEvent(event, false);
+ }
+
+ private boolean layoutContainsEvent(ITmfEvent event, boolean entry) {
+ String eventName = event.getName();
+ ITmfTrace trace = event.getTrace();
+ IKernelAnalysisEventLayout layout = getProvider().getEventLayout(trace);
+ /* awkward downcast */
+ if (layout instanceof Lttng27EventLayout) {
+ Lttng27EventLayout layout27 = (Lttng27EventLayout) layout;
+ if (entry) {
+ return layout27.getX86IrqVectorsEntry().contains(eventName);
+ }
+ return layout27.getX86IrqVectorsExit().contains(eventName);
}
- return ret;
+ return false;
}
@Override
@Override
public void handleEvent(ITmfEvent event) {
String eventName = event.getName();
- IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
if (eventName.equals(eventLayout.eventSoftIrqEntry())) {
handleSoftirqEntry(event);
} else if (eventName.equals(eventLayout.eventSoftIrqExit())) {
handleIrqHandlerEntry(event);
} else if (eventName.equals(eventLayout.eventIrqHandlerExit())) {
handleIrqHandlerExit(event);
+ } else if (isIpiEntry(event)) {
+ handleIpiEntry(event);
+ } else if (isIpiExit(event)) {
+ handleIpiExit(event);
}
}
popInterruptContext(event, Context.HRTIMER);
}
+ private void handleIpiEntry(ITmfEvent event) {
+ pushInterruptContext(event, Context.IPI);
+ }
+
+ private void handleIpiExit(ITmfEvent event) {
+ popInterruptContext(event, Context.IPI);
+ }
+
}
import org.eclipse.tracecompass.analysis.graph.core.base.TmfVertex.EdgeDirection;
import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.LinuxValues;
import org.eclipse.tracecompass.analysis.os.linux.core.model.HostThread;
+import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelAnalysisEventLayout;
import org.eclipse.tracecompass.common.core.NonNullUtils;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.TcpEventStrings;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.building.LttngKernelExecGraphProvider;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.model.LttngInterruptContext;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.model.LttngSystemModel;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.model.LttngWorker;
-import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.LttngEventLayout;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.aspect.TmfCpuAspect;
import org.eclipse.tracecompass.tmf.core.event.matching.IMatchProcessingUnit;
@Override
public void handleEvent(ITmfEvent ev) {
String eventName = ev.getName();
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(ev.getTrace());
if (eventName.equals(eventLayout.eventSchedSwitch())) {
handleSchedSwitch(ev);
- } else if (eventName.equals(eventLayout.eventSchedProcessTTWU())) {
- if (traceHasEventSchedTTWU(ev.getTrace())) {
- handleSchedWakeup(ev);
- }
- } else if (eventName.equals(eventLayout.eventSchedProcessWakeup())) {
- if (!traceHasEventSchedTTWU(ev.getTrace())) {
- handleSchedWakeup(ev);
- }
- } else if (eventName.equals(eventLayout.eventSchedProcessWakeupNew())) {
- if (!traceHasEventSchedTTWU(ev.getTrace())) {
- handleSchedWakeup(ev);
- }
} else if (eventName.equals(eventLayout.eventSoftIrqEntry())) {
handleSoftirqEntry(ev);
} else if (eventName.equals(TcpEventStrings.INET_SOCK_LOCAL_IN) ||
} else if (eventName.equals(TcpEventStrings.INET_SOCK_LOCAL_OUT) ||
eventName.equals(TcpEventStrings.NET_DEV_QUEUE)) {
handleInetSockLocalOut(ev);
+ } else if (isWakeupEvent(ev)) {
+ handleSchedWakeup(ev);
}
}
private void handleSchedSwitch(ITmfEvent event) {
String host = event.getTrace().getHostId();
long ts = event.getTimestamp().getValue();
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
LttngSystemModel system = getProvider().getSystem();
Integer next = EventField.getInt(event, eventLayout.fieldNextTid());
TmfGraph graph = NonNullUtils.checkNotNull(getProvider().getAssignedGraph());
String host = event.getTrace().getHostId();
Integer cpu = NonNullUtils.checkNotNull(TmfTraceUtils.resolveIntEventAspectOfClassForEvent(event.getTrace(), TmfCpuAspect.class, event));
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
LttngSystemModel system = getProvider().getSystem();
long ts = event.getTimestamp().getValue();
}
}
- private void waitBlocked(ITmfEvent event, TmfGraph graph, String host, Integer cpu, LttngEventLayout eventLayout, LttngSystemModel system, long ts, LttngWorker target, @Nullable LttngWorker current) {
+ private void waitBlocked(ITmfEvent event, TmfGraph graph, String host, Integer cpu, IKernelAnalysisEventLayout eventLayout, LttngSystemModel system, long ts, LttngWorker target, @Nullable LttngWorker current) {
LttngInterruptContext context = system.peekContextStack(host, cpu);
switch (context.getContext()) {
case HRTIMER:
case SOFTIRQ:
softIrq(event, graph, cpu, eventLayout, ts, target, context);
break;
+ case IPI:
+ graph.append(target, new TmfVertex(ts), EdgeType.IPI);
+ break;
case NONE:
none(ts, target, current);
break;
}
}
- private void softIrq(ITmfEvent event, TmfGraph graph, Integer cpu, LttngEventLayout eventLayout, long ts, LttngWorker target, LttngInterruptContext context) {
+ private void softIrq(ITmfEvent event, TmfGraph graph, Integer cpu, IKernelAnalysisEventLayout eventLayout, long ts, LttngWorker target, LttngInterruptContext context) {
TmfVertex wup = new TmfVertex(ts);
TmfEdge l2 = graph.append(target, wup);
if (l2 != null) {
}
}
- private static void irq(TmfGraph graph, LttngEventLayout eventLayout, long ts, LttngWorker target, LttngInterruptContext context) {
+ private static void irq(TmfGraph graph, IKernelAnalysisEventLayout eventLayout, long ts, LttngWorker target, LttngInterruptContext context) {
TmfEdge link = graph.append(target, new TmfVertex(ts));
if (link != null) {
int vec = EventField.getLong(context.getEvent(), eventLayout.fieldIrq()).intValue();
}
private void handleSoftirqEntry(ITmfEvent event) {
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
TmfGraph graph = NonNullUtils.checkNotNull(getProvider().getAssignedGraph());
Long vec = EventField.getLong(event, eventLayout.fieldVec());
if (vec == LinuxValues.SOFTIRQ_NET_RX || vec == LinuxValues.SOFTIRQ_NET_TX) {
import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.LinuxValues;
import org.eclipse.tracecompass.analysis.os.linux.core.model.HostThread;
+import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelAnalysisEventLayout;
import org.eclipse.tracecompass.common.core.NonNullUtils;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.building.LttngKernelExecGraphProvider;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.building.LttngKernelExecGraphProvider.ProcessStatus;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.model.EventField;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.model.LttngSystemModel;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.model.LttngWorker;
-import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.LttngEventLayout;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.aspect.TmfCpuAspect;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
@Override
public void handleEvent(ITmfEvent ev) {
String eventName = ev.getName();
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(ev.getTrace());
if (eventName.equals(eventLayout.eventSchedSwitch())) {
handleSchedSwitch(ev);
- } else if (eventName.equals(eventLayout.eventSchedProcessTTWU())) {
- if (traceHasEventSchedTTWU(ev.getTrace())) {
- handleSchedWakeup(ev);
- }
- } else if (eventName.equals(eventLayout.eventSchedProcessWakeup())) {
- if (!traceHasEventSchedTTWU(ev.getTrace())) {
- handleSchedWakeup(ev);
- }
- } else if (eventName.equals(eventLayout.eventSchedProcessWakeupNew())) {
- if (!traceHasEventSchedTTWU(ev.getTrace())) {
- handleSchedWakeup(ev);
- }
} else if (eventName.equals(eventLayout.eventSchedProcessFork())) {
handleSchedProcessFork(ev);
} else if (eventName.equals(eventLayout.eventSchedProcessExit())) {
handleSchedProcessExit(ev);
} else if (eventName.equals(eventLayout.eventSchedProcessExec())) {
handleSchedProcessExec(ev);
+ } else if (isWakeupEvent(ev)) {
+ handleSchedWakeup(ev);
}
}
private void handleSchedSwitch(ITmfEvent event) {
Integer cpu = NonNullUtils.checkNotNull(TmfTraceUtils.resolveIntEventAspectOfClassForEvent(event.getTrace(), TmfCpuAspect.class, event));
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
LttngSystemModel system = getProvider().getSystem();
Integer next = EventField.getInt(event, eventLayout.fieldNextTid());
private void handleSchedProcessFork(ITmfEvent event) {
String host = event.getTrace().getHostId();
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
LttngSystemModel system = getProvider().getSystem();
Integer childTid = EventField.getInt(event, eventLayout.fieldChildTid());
private void handleSchedWakeup(ITmfEvent event) {
String host = event.getTrace().getHostId();
Integer cpu = NonNullUtils.checkNotNull(TmfTraceUtils.resolveIntEventAspectOfClassForEvent(event.getTrace(), TmfCpuAspect.class, event));
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
LttngSystemModel system = getProvider().getSystem();
Integer tid = EventField.getInt(event, eventLayout.fieldTid());
LttngWorker target = system.findWorker(targetHt);
LttngWorker current = system.getWorkerOnCpu(host, cpu);
+
if (target == null) {
String name = EventField.getOrDefault(event, eventLayout.fieldComm(), NonNullUtils.checkNotNull(Messages.TraceEventHandlerSched_UnknownThreadName));
target = new LttngWorker(targetHt, name, event.getTimestamp().getValue());
private void handleSchedProcessExit(ITmfEvent event) {
String host = event.getTrace().getHostId();
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
LttngSystemModel system = getProvider().getSystem();
Integer tid = EventField.getInt(event, eventLayout.fieldTid());
private void handleSchedProcessExec(ITmfEvent event) {
String host = event.getTrace().getHostId();
Integer cpu = NonNullUtils.checkNotNull(TmfTraceUtils.resolveIntEventAspectOfClassForEvent(event.getTrace(), TmfCpuAspect.class, event));
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
LttngSystemModel system = getProvider().getSystem();
String filename = EventField.getString(event, eventLayout.fieldFilename());
package org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.handlers;
import org.eclipse.tracecompass.analysis.os.linux.core.model.HostThread;
+import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelAnalysisEventLayout;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.building.LttngKernelExecGraphProvider;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.building.LttngKernelExecGraphProvider.ProcessStatus;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.model.EventField;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.model.LttngSystemModel;
import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.model.LttngWorker;
-import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.LttngEventLayout;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
/**
@Override
public void handleEvent(ITmfEvent event) {
- LttngEventLayout eventLayout = getProvider().getEventLayout();
+ IKernelAnalysisEventLayout eventLayout = getProvider().getEventLayout(event.getTrace());
LttngSystemModel system = getProvider().getSystem();
String eventName = event.getName();
if (!eventName.equals(eventLayout.eventStatedumpProcessState())) {