Commit | Line | Data |
---|---|---|
aa19e48b NA |
1 | /********************************************************************** |
2 | * Copyright (c) 2016 École Polytechnique de Montréal | |
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 | package org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.kernelmemoryusage; | |
10 | ||
5ddfceb6 JCK |
11 | import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; |
12 | ||
aa19e48b NA |
13 | import org.eclipse.jdt.annotation.NonNull; |
14 | import org.eclipse.jface.viewers.ISelection; | |
15 | import org.eclipse.jface.viewers.ISelectionChangedListener; | |
16 | import org.eclipse.jface.viewers.IStructuredSelection; | |
17 | import org.eclipse.jface.viewers.SelectionChangedEvent; | |
18 | import org.eclipse.swt.events.ControlAdapter; | |
19 | import org.eclipse.swt.events.ControlEvent; | |
20 | import org.eclipse.swt.widgets.Composite; | |
21 | import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal; | |
22 | import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; | |
5ddfceb6 | 23 | import org.eclipse.tracecompass.tmf.core.trace.TmfTraceContext; |
aa19e48b NA |
24 | import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager; |
25 | import org.eclipse.tracecompass.tmf.ui.viewers.TmfViewer; | |
26 | import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.TmfXYChartViewer; | |
27 | import org.eclipse.tracecompass.tmf.ui.views.TmfChartView; | |
28 | ||
29 | /** | |
30 | * Memory usage view | |
31 | * | |
32 | * @author Samuel Gagnon | |
33 | * @author Mahdi Zolnouri | |
34 | * @author Wassim Nasrallah | |
35 | */ | |
36 | public class KernelMemoryUsageView extends TmfChartView { | |
37 | ||
38 | /** ID string */ | |
39 | public static final String ID = "org.eclipse.tracecompass.analysis.os.linux.ui.kernelmemoryusageview"; //$NON-NLS-1$ | |
5ddfceb6 JCK |
40 | /** ID of the Kernel Memory Usage view data in the data map of {@link TmfTraceContext} */ |
41 | public static final @NonNull String KERNEL_MEMORY = ID + ".KERNEL_MEMORY"; //$NON-NLS-1$ | |
aa19e48b NA |
42 | |
43 | /* | |
44 | * We need this reference to update the viewer when there is a new selection | |
45 | */ | |
46 | private KernelMemoryUsageTreeViewer fTreeViewerReference = null; | |
47 | ||
48 | /** | |
49 | * Constructor | |
50 | */ | |
51 | public KernelMemoryUsageView() { | |
52 | super(Messages.MemoryUsageView_title); | |
53 | } | |
54 | ||
55 | @Override | |
56 | protected TmfXYChartViewer createChartViewer(Composite parent) { | |
57 | return new KernelMemoryUsageViewer(parent); | |
58 | } | |
59 | ||
60 | private final class SelectionChangeListener implements ISelectionChangedListener { | |
61 | @Override | |
62 | public void selectionChanged(SelectionChangedEvent event) { | |
63 | ISelection selection = event.getSelection(); | |
64 | if (selection instanceof IStructuredSelection) { | |
65 | Object structSelection = ((IStructuredSelection) selection).getFirstElement(); | |
66 | if (structSelection instanceof KernelMemoryUsageEntry) { | |
67 | KernelMemoryUsageEntry entry = (KernelMemoryUsageEntry) structSelection; | |
68 | fTreeViewerReference.setSelectedThread(entry.getTid()); | |
69 | ((KernelMemoryUsageViewer) getChartViewer()).setSelectedThread(entry.getTid()); | |
5ddfceb6 JCK |
70 | TmfTraceContext ctx = TmfTraceManager.getInstance().getCurrentTraceContext(); |
71 | ctx.setData(KERNEL_MEMORY, checkNotNull(entry.getTid())); | |
aa19e48b NA |
72 | } |
73 | } | |
74 | } | |
75 | } | |
76 | ||
77 | @Override | |
78 | protected @NonNull TmfViewer createLeftChildViewer(Composite parent) { | |
79 | @NonNull | |
80 | KernelMemoryUsageTreeViewer fTreeViewer = new KernelMemoryUsageTreeViewer(parent); | |
81 | fTreeViewerReference = fTreeViewer; | |
82 | ||
83 | fTreeViewer.addSelectionChangeListener(new SelectionChangeListener()); | |
84 | ||
85 | /* Initialize the viewers with the currently selected trace */ | |
86 | ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace(); | |
87 | if (trace != null) { | |
88 | TmfTraceSelectedSignal signal = new TmfTraceSelectedSignal(this, trace); | |
89 | fTreeViewer.traceSelected(signal); | |
90 | fTreeViewerReference.traceSelected(signal); | |
91 | } | |
92 | ||
93 | fTreeViewer.getControl().addControlListener(new ControlAdapter() { | |
94 | @Override | |
95 | public void controlResized(ControlEvent e) { | |
96 | super.controlResized(e); | |
97 | } | |
98 | }); | |
99 | return fTreeViewer; | |
100 | } | |
101 | } |