tmf: Bug 491548: Do not incrementally build full time graph event list
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.os.linux.ui / src / org / eclipse / tracecompass / analysis / os / linux / ui / views / cpuusage / CpuUsageView.java
1 /*******************************************************************************
2 * Copyright (c) 2014, 2016 École Polytechnique de Montréal and others
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Geneviève Bastien - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.tracecompass.analysis.os.linux.ui.views.cpuusage;
14
15 import org.eclipse.jdt.annotation.Nullable;
16 import org.eclipse.jface.viewers.ISelection;
17 import org.eclipse.jface.viewers.ISelectionChangedListener;
18 import org.eclipse.jface.viewers.IStructuredSelection;
19 import org.eclipse.jface.viewers.SelectionChangedEvent;
20 import org.eclipse.swt.events.ControlAdapter;
21 import org.eclipse.swt.events.ControlEvent;
22 import org.eclipse.swt.widgets.Composite;
23 import org.eclipse.tracecompass.analysis.os.linux.core.signals.TmfCpuSelectedSignal;
24 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
25 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
26 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
27 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
28 import org.eclipse.tracecompass.tmf.ui.viewers.TmfViewer;
29 import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.TmfXYChartViewer;
30 import org.eclipse.tracecompass.tmf.ui.views.TmfChartView;
31
32 /**
33 * CPU usage view. It contains 2 viewers: one tree viewer showing all the
34 * threads who were on the CPU in the time range, and one XY chart viewer
35 * plotting the total time spent on CPU and the time of the threads selected in
36 * the tree viewer.
37 *
38 * @author Geneviève Bastien
39 */
40 public class CpuUsageView extends TmfChartView {
41
42 /** ID string */
43 public static final String ID = "org.eclipse.tracecompass.analysis.os.linux.views.cpuusage"; //$NON-NLS-1$
44
45 private @Nullable CpuUsageComposite fTreeViewer = null;
46 private @Nullable CpuUsageXYViewer fXYViewer = null;
47
48 /**
49 * Constructor
50 */
51 public CpuUsageView() {
52 super(Messages.CpuUsageView_Title);
53 }
54
55 @Override
56 public void createPartControl(Composite parent) {
57 super.createPartControl(parent);
58
59 /* Initialize the viewers with the currently selected trace */
60 ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace();
61 if (trace != null) {
62 TmfTraceSelectedSignal signal = new TmfTraceSelectedSignal(this, trace);
63 if (fTreeViewer != null) {
64 fTreeViewer.traceSelected(signal);
65 }
66 if (fXYViewer != null) {
67 fXYViewer.traceSelected(signal);
68 }
69 }
70 }
71
72 @Override
73 protected TmfXYChartViewer createChartViewer(Composite parent) {
74 CpuUsageXYViewer viewer = new CpuUsageXYViewer(parent);
75 viewer.setSendTimeAlignSignals(true);
76 fXYViewer = viewer;
77 return viewer;
78 }
79
80 @Override
81 public TmfViewer createLeftChildViewer(Composite parent) {
82 final CpuUsageComposite viewer = new CpuUsageComposite(parent);
83
84 /* Add selection listener to tree viewer */
85 viewer.addSelectionChangeListener(new ISelectionChangedListener() {
86 @Override
87 public void selectionChanged(SelectionChangedEvent event) {
88 ISelection selection = event.getSelection();
89 if (selection instanceof IStructuredSelection) {
90 Object structSelection = ((IStructuredSelection) selection).getFirstElement();
91 if (structSelection instanceof CpuUsageEntry) {
92 CpuUsageEntry entry = (CpuUsageEntry) structSelection;
93 if (fTreeViewer != null) {
94 fTreeViewer.setSelectedThread(entry.getTid());
95 }
96 if (fXYViewer != null) {
97 fXYViewer.setSelectedThread(Long.valueOf(entry.getTid()));
98 }
99 }
100 }
101 }
102 });
103
104 viewer.getControl().addControlListener(new ControlAdapter() {
105 @Override
106 public void controlResized(ControlEvent e) {
107 super.controlResized(e);
108 }
109 });
110
111 fTreeViewer = viewer;
112 return fTreeViewer;
113 }
114
115 @Override
116 public void setFocus() {
117 if (fXYViewer != null) {
118 fXYViewer.getControl().setFocus();
119 }
120 }
121
122 /**
123 * Signal handler for when a cpu is selected
124 *
125 * @param signal
126 * the cpu being selected
127 * @since 2.0
128 */
129 @TmfSignalHandler
130 public void cpuSelect(TmfCpuSelectedSignal signal) {
131 final @Nullable CpuUsageXYViewer xyViewer = fXYViewer;
132 final @Nullable CpuUsageComposite treeViewer = fTreeViewer;
133 if (xyViewer != null && treeViewer != null) {
134 int core = signal.getCore();
135 if (core >= 0) {
136 xyViewer.addCpu(core);
137 treeViewer.addCpu(core);
138 } else {
139 xyViewer.clearCpu();
140 treeViewer.clearCpu();
141 }
142 }
143 }
144
145 }
This page took 0.039396 seconds and 5 git commands to generate.