import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Composite;
import org.eclipse.tracecompass.analysis.os.linux.core.kernel.KernelAnalysisModule;
import org.eclipse.tracecompass.analysis.os.linux.core.signals.TmfCpuSelectedSignal;
import org.eclipse.tracecompass.internal.analysis.os.linux.core.kernel.Attributes;
import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.resources.ResourcesEntry.Type;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignal;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule;
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.experiment.TmfExperiment;
import org.eclipse.tracecompass.tmf.ui.views.timegraph.AbstractStateSystemTimeGraphView;
import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeEvent;
import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;
// Timeout between updates in the build thread in ms
private static final long BUILD_UPDATE_TIMEOUT = 500;
+ /** The tab label */
+ private String fOriginalTabLabel;
+
+ /** Pin state related toggle switch */
+ private boolean fShowFollowCpuActions = true;
+
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
}
}
-
/**
* @since 2.0
*/
TmfTraceContext ctx = TmfTraceManager.getInstance().getCurrentTraceContext();
Integer data = (Integer) ctx.getData(RESOURCES_FOLLOW_CPU);
int cpu = data != null ? data.intValue() : -1;
- if (cpu >= 0) {
- menuManager.add(new UnfollowCpuAction(ResourcesView.this, resourcesEntry.getId(), resourcesEntry.getTrace()));
- } else {
- menuManager.add(new FollowCpuAction(ResourcesView.this, resourcesEntry.getId(), resourcesEntry.getTrace()));
+ if (fShowFollowCpuActions) {
+ if (cpu >= 0) {
+ menuManager.add(new UnfollowCpuAction(ResourcesView.this, resourcesEntry.getId(), resourcesEntry.getTrace()));
+ } else {
+ menuManager.add(new FollowCpuAction(ResourcesView.this, resourcesEntry.getId(), resourcesEntry.getTrace()));
+ }
}
}
}
}
+ @Override
+ public void createPartControl(Composite parent) {
+ super.createPartControl(parent);
+ fOriginalTabLabel = getPartName();
+ }
+
// ------------------------------------------------------------------------
// Internal
// ------------------------------------------------------------------------
}
List<ITimeEvent> eventList = getEventList(entry, ssq, fullStates, prevFullState, monitor);
if (eventList != null) {
- /* Start a new event list on first iteration, then append to it */
+ /*
+ * Start a new event list on first iteration, then
+ * append to it
+ */
if (prevFullState == null) {
entry.setEventList(eventList);
} else {
@Override
protected boolean canBePinned() {
- //TODO: actionPin is not defined
- return false;
+ return true;
+ }
+
+ @Override
+ protected synchronized void setPinned(boolean pinned) {
+
+ /* Is pinned */
+ if (pinned) {
+ /* Ignore all outbound and inbound signals */
+ TmfSignalManager.addIgnoredOutboundSignal(this, TmfSignal.class);
+ TmfSignalManager.addIgnoredInboundSignal(this, TmfSignal.class);
+
+ String objectType = Messages.ControlFlowView_TraceLabel;
+ if (getTrace() instanceof TmfExperiment) {
+ objectType = Messages.ControlFlowView_ExperimentLabel;
+ }
+ setPartName(String.format("%s [%s][%s:%s]", fOriginalTabLabel, Messages.ControlFlowView_PinnedLabel, objectType, getTrace().getName())); //$NON-NLS-1$
+ } else {
+ TmfSignalManager.clearIgnoredInboundSignalList(this);
+ TmfSignalManager.clearIgnoredOutboundSignalList(this);
+
+ setPartName(fOriginalTabLabel);
+
+ loadTrace(TmfTraceManager.getInstance().getActiveTrace());
+ }
+
+ fShowFollowCpuActions = !pinned;
+
+ /* Propagate pin state to viewer */
+ if (getTimeGraphCombo() != null) {
+ getTimeGraphCombo().setPinned(pinned);
+ } else {
+ getTimeGraphViewer().setPinned(pinned);
+ }
+
+ redraw();
}
+
}