From 2e96ebdcaef76878cb9f2a435f219e6421744c5a Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Mon, 7 Nov 2016 16:38:36 -0500 Subject: [PATCH] Implement setPinned for Resources View When pinned the resource view does not scroll/seek on position change, trace change, and its filters do not change. Also: - Ignores all outbound and inbound signalling. - Disables all modifiers of the visible time range windows. - Disables time based scrolling/seeking (horizontal scrolling). - Hides the thread presentation menu. - Changes the tab label to enhance visibility of the pinned state. - Allows vertical scrolling and expand/collapse operation. Change-Id: I844098aa1d3259daed9fb92a1faac75592ad465b Signed-off-by: Jonathan Rajotte --- .../ui/views/resources/ResourcesView.java | 71 ++++++++++++++++--- .../ui/swtbot/tests/ResourcesViewTest.java | 3 +- 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/resources/ResourcesView.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/resources/ResourcesView.java index c8ac12f1fd..cc6621ab85 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/resources/ResourcesView.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/resources/ResourcesView.java @@ -28,6 +28,7 @@ import org.eclipse.jdt.annotation.Nullable; 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; @@ -37,11 +38,14 @@ import org.eclipse.tracecompass.internal.analysis.os.linux.ui.actions.UnfollowCp 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; @@ -69,6 +73,12 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView { // 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 // ------------------------------------------------------------------------ @@ -98,7 +108,6 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView { } } - /** * @since 2.0 */ @@ -113,10 +122,12 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView { 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())); + } } } } @@ -135,6 +146,12 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView { } + @Override + public void createPartControl(Composite parent) { + super.createPartControl(parent); + fOriginalTabLabel = getPartName(); + } + // ------------------------------------------------------------------------ // Internal // ------------------------------------------------------------------------ @@ -219,7 +236,10 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView { } List 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 { @@ -442,7 +462,42 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView { @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(); } + } diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesViewTest.java b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesViewTest.java index fdfb05c7ff..e2e5d7455d 100644 --- a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesViewTest.java +++ b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesViewTest.java @@ -95,7 +95,8 @@ public class ResourcesViewTest extends KernelTimeGraphViewTestBase { @Override protected List getToolbarTooltips() { - return Arrays.asList("Align Views", "Show View Filters", "Show Legend", SEPARATOR, + return Arrays.asList("Pin View", SEPARATOR, + "Align Views", "Show View Filters", "Show Legend", SEPARATOR, "Reset the Time Scale to Default", "Select Previous State Change", "Select Next State Change", SEPARATOR, "Add Bookmark...", "Previous Marker", "Next Marker", SEPARATOR, "Select Previous Resource", "Select Next Resource", "Zoom In", "Zoom Out" ); -- 2.34.1