diff options
Diffstat (limited to 'dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui')
5 files changed, 176 insertions, 4 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/META-INF/MANIFEST.MF b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/META-INF/MANIFEST.MF index 49da4433543..8d28b26c45e 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/META-INF/MANIFEST.MF +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/META-INF/MANIFEST.MF @@ -15,7 +15,8 @@ Require-Bundle: org.eclipse.ui, org.eclipse.cdt.visualizer.core, org.eclipse.cdt.visualizer.ui, org.eclipse.debug.ui, - org.eclipse.cdt.core + org.eclipse.cdt.core, + org.eclipse.cdt.debug.ui Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Import-Package: com.ibm.icu.text diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/resources/messages.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/resources/messages.properties index 9cee7975be6..030ad42477a 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/resources/messages.properties +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/resources/messages.properties @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (c) 2012, 2013 Tilera Corporation and others. +# Copyright (c) 2012, 2014 Tilera Corporation and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at @@ -9,6 +9,7 @@ # William R. Swanson (Tilera Corporation) # Marc Dumais (Ericsson) - Add CPU/core load information to the multicore visualizer (Bug 396268) # Marc Dumais (Ericsson) - Bug 405390 +# Marc Dumais (Ericsson) - Bug 441713 # ============================================================================= # ----------------------------------------------------------------------------- @@ -36,6 +37,10 @@ MulticoreVisualizer.actions.LoadMetersRefreshSubSubmenu.text=Refresh Speed MulticoreVisualizer.actions.ClearFilter.text=Clear filter MulticoreVisualizer.actions.SetFilter.text=Filter to selection + +MulticoreVisualizer.actions.PinToDebugSession.text=Pin view to debug session +MulticoreVisualizer.actions.PinToDebugSession.description=Pin this view to the current debug session + MulticoreVisualizer.view.CanvasFilter.Active.text=Filter Active: MulticoreVisualizer.view.CanvasFilter.cpu.text=CPUs: MulticoreVisualizer.view.CanvasFilter.core.text=Cores: diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/actions/PinToDebugSessionAction.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/actions/PinToDebugSessionAction.java new file mode 100644 index 00000000000..e1a01e2b2d8 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/actions/PinToDebugSessionAction.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * Copyright (c) 2014 Ericsson and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Marc Dumais (Ericsson) - Initial API and implementation (Bug 441713) + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.actions; + +import org.eclipse.cdt.debug.internal.ui.CDebugImages; +import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.MulticoreVisualizerUIPlugin; +import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.view.MulticoreVisualizer; +import org.eclipse.cdt.visualizer.ui.VisualizerAction; + +/** Pins the multicore visualizer to the current debug session */ +public class PinToDebugSessionAction extends VisualizerAction { + + // --- members --- + + /** current active state of pinning */ + private boolean m_pinActive; + + /** Visualizer instance we're associated with. */ + MulticoreVisualizer m_visualizer = null; + + + // --- constructors/destructors --- + + /** Constructor. */ + public PinToDebugSessionAction() { + super(MulticoreVisualizerUIPlugin.getString("MulticoreVisualizer.actions.PinToDebugSession.text"), //$NON-NLS-1$ + MulticoreVisualizerUIPlugin.getString("MulticoreVisualizer.actions.PinToDebugSession.description"), //$NON-NLS-1$ + CDebugImages.DESC_LCL_PIN_VIEW + ); + + // at first, this action is disabled (un-pinned) + setChecked(false); + m_pinActive = false; + } + + /** Dispose method. */ + @Override + public void dispose() { + m_visualizer = null; + super.dispose(); + } + + + // --- init methods --- + + /** Initializes this action for the specified view. */ + public void init(MulticoreVisualizer visualizer) + { + m_visualizer = visualizer; + } + + // --- methods --- + + /** Invoked when action is triggered. */ + @Override + public void run() { + // Toggle pinned state + m_pinActive = !m_pinActive; + + if (m_pinActive) { + m_visualizer.pin(); + } + else { + m_visualizer.unpin(); + } + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/IPinnable.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/IPinnable.java new file mode 100644 index 00000000000..1fe20587c32 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/IPinnable.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2014 Ericsson and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Marc Dumais (Ericsson) - Initial API and implementation (Bug 441713) + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.view; + +/** Interface for pinnable objects */ +public interface IPinnable { + + /** + * Pins to the current context + */ + public void pin(); + + /** + * Unpins + */ + public void unpin(); + + /** Returns whether currently pinned */ + public boolean isPinned(); +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java index 028ee21f688..f4509f2de14 100755 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java @@ -17,6 +17,7 @@ * Marc-Andre Laperle (Ericsson) - Bug 411634 * Marc Dumais (Ericsson) - Bug 409965 * Xavier Raynaud (kalray) - Bug 431935 + * Marc Dumais (Ericsson) - Bug 441713 *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.view; @@ -37,6 +38,7 @@ import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.MulticoreVisualizerUIPlugin; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.actions.EnableLoadMetersAction; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.actions.FilterCanvasAction; +import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.actions.PinToDebugSessionAction; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.actions.RefreshAction; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.actions.SelectAllAction; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.actions.SetLoadMeterPeriodAction; @@ -95,7 +97,7 @@ import org.eclipse.swt.widgets.Composite; */ @SuppressWarnings("restriction") public class MulticoreVisualizer extends GraphicCanvasVisualizer - implements DSFDebugModelListener + implements DSFDebugModelListener, IPinnable { // --- constants --- @@ -158,6 +160,9 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer private static final int LOAD_METER_TIMER_MEDIUM = 1000; private static final int LOAD_METER_TIMER_SLOW = 5000; + /** Currently pinned session id, if any */ + private String m_currentPinedSessionId = null; + // --- UI members --- @@ -210,6 +215,9 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer /** Menu action */ FilterCanvasAction m_clearFilterAction = null; + + /** Menu action */ + PinToDebugSessionAction m_pinToDbgSessionAction = null; // --- constructors/destructors --- @@ -456,6 +464,10 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer m_clearFilterAction.init(this); m_clearFilterAction.setEnabled(false); + m_pinToDbgSessionAction = new PinToDebugSessionAction(); + m_pinToDbgSessionAction.init(this); + m_pinToDbgSessionAction.setEnabled(false); + // Note: debug view may not be initialized at startup, // so we'll pretend the actions are not yet updated, // and reinitialize them later. @@ -481,6 +493,9 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer // show the load meter refresh speed sub-menu only // if the load meters are enabled m_loadMetersRefreshSubSubmenu.setVisible(m_loadMetersEnabled); + + // Enable pinning menu item when there is a current debug session + m_pinToDbgSessionAction.setEnabled(m_sessionState != null); // We should not change the enablement of the debug view // actions, as they are automatically enabled/disabled @@ -572,6 +587,11 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer m_clearFilterAction.dispose(); m_clearFilterAction = null; } + + if (m_pinToDbgSessionAction != null) { + m_pinToDbgSessionAction.dispose(); + m_pinToDbgSessionAction = null; + } m_actionsInitialized = false; } @@ -596,6 +616,7 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer toolBarManager.add(m_stepOverAction); toolBarManager.add(m_stepIntoAction); toolBarManager.add(m_dropToFrameAction); + toolBarManager.add(m_pinToDbgSessionAction); updateActions(); } @@ -862,7 +883,10 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer } else { // thread VisualizerThread thread = model.getThread(tid); - if (thread != null) { + // here "tid" is the "GDB thread id", which is not + // unique across sessions, so make sure the thread + // belongs to the correct process, before selecting it + if (thread != null && thread.getPID() == pid) { selected.add(thread); } } @@ -875,6 +899,39 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer return visualizerSelection; } + + // --- IPinnable implementation --- + + /** + * Pins the multicore visualizer to the current debug session, preventing + * it from switching to a different session. + */ + @Override + public void pin() { + // No current session - do nothing + if (m_sessionState == null) + return; + + m_currentPinedSessionId = m_sessionState.getSessionID(); + } + + /** + * Unpins the visualizer. + */ + @Override + public void unpin() { + m_currentPinedSessionId = null; + // force visualizer to re-evaluate its current session and + // display the correct one, if needed + workbenchSelectionChanged(null); + } + + /** Returns whether the MV is currently pinned to a session */ + @Override + public boolean isPinned() { + return m_currentPinedSessionId != null; + } + // --- DSF Context Management --- @@ -883,6 +940,10 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer */ public boolean updateDebugContext() { + // is the visualizer pinned? Then inhibit context change + if (isPinned()) + return false; + String sessionId = null; IAdaptable debugContext = DebugUITools.getDebugContext(); if (debugContext instanceof IDMVMContext) { |