import org.eclipse.tracecompass.internal.analysis.os.linux.ui.Activator;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateValueTypeException;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
+import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
+import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceContext;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfCommonXLineChartViewer;
*/
public class CpuUsageXYViewer extends TmfCommonXLineChartViewer {
+ private static final int NOT_SELECTED = -1;
+
private KernelCpuUsageAnalysis fModule = null;
/* Maps a thread ID to a list of y values */
// Timeout between updates in the updateData thread
private static final long BUILD_UPDATE_TIMEOUT = 500;
- private long fSelectedThread = -1;
+ private long fSelectedThread = NOT_SELECTED;
private final @NonNull Set<@NonNull Integer> fCpus = new TreeSet<>();
public CpuUsageXYViewer(Composite parent) {
super(parent, Messages.CpuUsageXYViewer_Title, Messages.CpuUsageXYViewer_TimeXAxis, Messages.CpuUsageXYViewer_CpuYAxis);
setResolution(RESOLUTION);
+ getSwtChart().getTitle().setVisible(true);
+ getSwtChart().getLegend().setVisible(false);
}
@Override
setXAxis(xvalues);
boolean complete = false;
- long currentEnd = start;
+ long currentEnd = Math.max(ss.getStartTime(), start);
while (!complete && currentEnd < end) {
return;
}
- long traceStart = getStartTime();
+ long traceStart = Math.max(getStartTime(), ss.getStartTime());
long traceEnd = getEndTime();
long offset = getTimeOffset();
long selectedThread = fSelectedThread;
fYValues.clear();
fYValues.put(Messages.CpuUsageXYViewer_Total, zeroFill(xvalues.length));
String stringSelectedThread = Long.toString(selectedThread);
- if (selectedThread != -1) {
+ if (selectedThread != NOT_SELECTED) {
fYValues.put(stringSelectedThread, zeroFill(xvalues.length));
}
getSwtChart().getTitle().setText(Messages.CpuUsageView_Title);
}
+ @Override
+ @TmfSignalHandler
+ public void traceSelected(TmfTraceSelectedSignal signal) {
+ initSelection();
+ initCPU();
+ super.traceSelected(signal);
+ }
+
+ @Override
+ @TmfSignalHandler
+ public void traceOpened(TmfTraceOpenedSignal signal) {
+ initSelection();
+ initCPU();
+ super.traceOpened(signal);
+ }
+
+ private void initSelection() {
+ TmfTraceContext ctx = TmfTraceManager.getInstance().getCurrentTraceContext();
+ String data = (String) ctx.getData(CpuUsageView.CPU_USAGE_SELECTED_THREAD);
+ long thread = data != null ? Long.valueOf(data) : NOT_SELECTED;
+ setSelectedThread(thread);
+ }
+
+ private void initCPU() {
+ clearCpu();
+ TmfTraceContext ctx = TmfTraceManager.getInstance().getCurrentTraceContext();
+ Object data = ctx.getData(CpuUsageView.CPU_USAGE_FOLLOW_CPU);
+ if (data instanceof Set<?>) {
+ Set<?> set = (Set<?>) data;
+ for (Object coreObject : set) {
+ Integer core = (Integer) coreObject;
+ if (core != null && core >= 0) {
+ addCpu(core);
+ }
+ }
+ }
+ }
+
}