package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.cpuusage;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.linuxtools.internal.lttng2.kernel.core.Attributes;
private static final long BUILD_UPDATE_TIMEOUT = 500;
private LttngKernelCpuUsageAnalysis fModule = null;
+ private String fSelectedThread = null;
private static final String[] COLUMN_NAMES = new String[] {
Messages.CpuUsageComposite_ColumnTID,
// Operations
// ------------------------------------------------------------------------
+ @Override
+ protected void contentChanged(ITmfTreeViewerEntry rootEntry) {
+ String selectedThread = fSelectedThread;
+ if (selectedThread != null) {
+ /* Find the selected thread among the inputs */
+ for (ITmfTreeViewerEntry entry : rootEntry.getChildren()) {
+ if (entry instanceof CpuUsageEntry) {
+ if (selectedThread.equals(((CpuUsageEntry) entry).getTid())) {
+ @SuppressWarnings("null")
+ @NonNull List<ITmfTreeViewerEntry> list = Collections.singletonList(entry);
+ super.setSelection(list);
+ return;
+ }
+ }
+ }
+ }
+ }
+
@Override
public void initializeDataSource() {
fModule = getTrace().getAnalysisModuleOfClass(LttngKernelCpuUsageAnalysis.class, LttngKernelCpuUsageAnalysis.ID);
return tid;
}
+ /**
+ * Set the currently selected thread ID
+ *
+ * @param tid
+ * The selected thread ID
+ */
+ public void setSelectedThread(String tid) {
+ fSelectedThread = tid;
+ }
+
}
package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.cpuusage;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.ui.viewers.xycharts.TmfXYChartViewer;
import org.eclipse.linuxtools.tmf.ui.views.TmfView;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
public static final String ID = "org.eclipse.linuxtools.lttng2.kernel.ui.views.cpuusage"; //$NON-NLS-1$
private CpuUsageComposite fTreeViewer = null;
- private TmfXYChartViewer fXYViewer = null;
+ private CpuUsageXYViewer fXYViewer = null;
/**
* Constructor
fTreeViewer = new CpuUsageComposite(sash);
/* Build the XY chart part of the view */
- fXYViewer = new CpuUsageXYViewer(sash, fTreeViewer);
+ fXYViewer = new CpuUsageXYViewer(sash);
+
+ /* Add selection listener to tree viewer */
+ fTreeViewer.addSelectionChangeListener(new ISelectionChangedListener() {
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ ISelection selection = event.getSelection();
+ if (selection instanceof IStructuredSelection) {
+ Object structSelection = ((IStructuredSelection) selection).getFirstElement();
+ if (structSelection instanceof CpuUsageEntry) {
+ CpuUsageEntry entry = (CpuUsageEntry) structSelection;
+ fTreeViewer.setSelectedThread(entry.getTid());
+ fXYViewer.setSelectedThread(Long.valueOf(entry.getTid()));
+ }
+ }
+ }
+ });
sash.setLayout(new FillLayout());
import java.util.Map.Entry;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.linuxtools.internal.lttng2.kernel.ui.Activator;
import org.eclipse.linuxtools.lttng2.kernel.core.cpuusage.LttngKernelCpuUsageAnalysis;
import org.eclipse.linuxtools.statesystem.core.ITmfStateSystem;
*
* @param parent
* parent composite
- * @param treeViewer
- * The tree viewer containing the list of threads with CPU usage.
- * A listener will be added to that viewer so it can synchronize
- * with the selection from the viewer.
*/
- public CpuUsageXYViewer(Composite parent, CpuUsageComposite treeViewer) {
+ public CpuUsageXYViewer(Composite parent) {
super(parent, Messages.CpuUsageXYViewer_Title, Messages.CpuUsageXYViewer_TimeXAxis, Messages.CpuUsageXYViewer_CpuYAxis);
setResolution(RESOLUTION);
-
- /* Add selection listener to tree viewer */
- treeViewer.addSelectionChangeListener(new ISelectionChangedListener() {
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- if (event.getSelection() instanceof IStructuredSelection) {
- Object selection = ((IStructuredSelection) event.getSelection()).getFirstElement();
- if (selection instanceof CpuUsageEntry) {
- CpuUsageEntry entry = (CpuUsageEntry) selection;
- setSelectedThread(Long.valueOf(entry.getTid()));
- }
- }
- }
- });
}
@Override
import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableFontProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.linuxtools.tmf.core.signal.TmfRangeSynchSignal;
// Operations
// ------------------------------------------------------------------------
+ /**
+ * Set the currently selected items in the treeviewer
+ *
+ * @param selection
+ * The list of selected items
+ * @since 3.1
+ */
+ public void setSelection(@NonNull List<ITmfTreeViewerEntry> selection) {
+ IStructuredSelection sel = new StructuredSelection(selection);
+ fTreeViewer.setSelection(sel, true);
+ }
+
/**
* Add a selection listener to the tree viewer. This will be called when the
* selection changes and contain all the selected items.
fTreeViewer.setInput(null);
}
+ /**
+ * Method called after the content has been updated and the new input has
+ * been set on the tree.
+ *
+ * @param rootEntry
+ * The new input of this viewer, or null if none
+ * @since 3.1
+ */
+ protected void contentChanged(ITmfTreeViewerEntry rootEntry) {
+
+ }
+
/**
* Requests an update of the viewer's content in a given time range or
* selection time range. An extra parameter defines whether these times
public void run() {
if (rootEntry != fTreeViewer.getInput()) {
fTreeViewer.setInput(rootEntry);
+ contentChanged(rootEntry);
} else {
fTreeViewer.refresh();
}