X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=analysis%2Forg.eclipse.tracecompass.analysis.os.linux.core%2Fsrc%2Forg%2Feclipse%2Ftracecompass%2Fanalysis%2Fos%2Flinux%2Fcore%2Fkernel%2FKernelTidAspect.java;h=a6dcbbd78b9f0dd8963e034050356c292e907ed5;hb=7858428e8f9736a7c77e96fc338af04589e41341;hp=e2a2a6d9cd9630724ff01e72e4bde525f277a68e;hpb=e2f5644360b0ff9198f406f36416f255f43a1a08;p=deliverable%2Ftracecompass.git diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/kernel/KernelTidAspect.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/kernel/KernelTidAspect.java index e2a2a6d9cd..a6dcbbd78b 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/kernel/KernelTidAspect.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/kernel/KernelTidAspect.java @@ -12,6 +12,9 @@ package org.eclipse.tracecompass.analysis.os.linux.core.kernel; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.tracecompass.analysis.os.linux.core.event.aspect.LinuxTidAspect; import org.eclipse.tracecompass.analysis.os.linux.core.tid.TidAnalysisModule; @@ -31,11 +34,23 @@ public final class KernelTidAspect extends LinuxTidAspect { /** The singleton instance */ public static final KernelTidAspect INSTANCE = new KernelTidAspect(); + private static final IProgressMonitor NULL_MONITOR = new NullProgressMonitor(); + private KernelTidAspect() { } @Override public @Nullable Integer resolve(ITmfEvent event) { + try { + return resolve(event, false, NULL_MONITOR); + } catch (InterruptedException e) { + /* Should not happen since there is nothing to interrupt */ + return null; + } + } + + @Override + public @Nullable Integer resolve(@NonNull ITmfEvent event, boolean block, final IProgressMonitor monitor) throws InterruptedException { /* Find the CPU this event is run on */ Integer cpu = TmfTraceUtils.resolveIntEventAspectOfClassForEvent(event.getTrace(), TmfCpuAspect.class, event); @@ -49,7 +64,11 @@ public final class KernelTidAspect extends LinuxTidAspect { if (analysis == null) { return null; } - return analysis.getThreadOnCpuAtTime(cpu, event.getTimestamp().toNanos()); + long ts = event.getTimestamp().toNanos(); + while (block && !analysis.isQueryable(ts) && !monitor.isCanceled()) { + Thread.sleep(100); + } + return analysis.getThreadOnCpuAtTime(cpu, ts); } }