bed3e4af17cfb108e817bad8306cbe097dd16117
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.timing.ui / src / org / eclipse / tracecompass / internal / analysis / timing / ui / flamegraph / FlameGraphView.java
1 /*******************************************************************************
2 * Copyright (c) 2016 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are made
5 * 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 * Author:
10 * Sonia Farrah
11 *******************************************************************************/
12 package org.eclipse.tracecompass.internal.analysis.timing.ui.flamegraph;
13
14 import org.eclipse.core.runtime.IProgressMonitor;
15 import org.eclipse.core.runtime.IStatus;
16 import org.eclipse.core.runtime.Status;
17 import org.eclipse.core.runtime.jobs.Job;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.widgets.Composite;
20 import org.eclipse.swt.widgets.Display;
21 import org.eclipse.tracecompass.internal.analysis.timing.core.callgraph.CallGraphAnalysis;
22 import org.eclipse.tracecompass.internal.analysis.timing.ui.callgraph.CallGraphAnalysisUI;
23 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
24 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
25 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
26 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
27 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
28 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
29 import org.eclipse.tracecompass.tmf.ui.editors.ITmfTraceEditor;
30 import org.eclipse.tracecompass.tmf.ui.views.TmfView;
31 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider;
32 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.TimeGraphViewer;
33 import org.eclipse.ui.IEditorPart;
34
35 /**
36 * View to display the flame graph .This uses the flameGraphNode tree generated
37 * by CallGraphAnalysisUI.
38 *
39 * @author Sonia Farrah
40 */
41 public class FlameGraphView extends TmfView {
42
43 /**
44 *
45 */
46 public static final String ID = FlameGraphView.class.getPackage().getName() + ".flamegraphView"; //$NON-NLS-1$
47
48 private TimeGraphViewer fTimeGraphViewer;
49
50 private FlameGraphContentProvider fTimeGraphContentProvider;
51
52 private TimeGraphPresentationProvider fPresentationProvider;
53
54 private ITmfTrace fTrace;
55
56 /**
57 * Constructor
58 */
59 public FlameGraphView() {
60 super(ID);
61 }
62
63 @Override
64 public void createPartControl(Composite parent) {
65 super.createPartControl(parent);
66 fTimeGraphViewer = new TimeGraphViewer(parent, SWT.NONE);
67 fTimeGraphContentProvider = new FlameGraphContentProvider();
68 fPresentationProvider = new FlameGraphPresentationProvider();
69 fTimeGraphViewer.setTimeGraphContentProvider(fTimeGraphContentProvider);
70 fTimeGraphViewer.setTimeGraphProvider(fPresentationProvider);
71 IEditorPart editor = getSite().getPage().getActiveEditor();
72 if (editor instanceof ITmfTraceEditor) {
73 ITmfTrace trace = ((ITmfTraceEditor) editor).getTrace();
74 if (trace != null) {
75 traceSelected(new TmfTraceSelectedSignal(this, trace));
76 }
77 }
78 }
79
80 /**
81 * Handler for the trace opened signal
82 *
83 * @param signal
84 * The incoming signal
85 */
86 @TmfSignalHandler
87 public void TraceOpened(TmfTraceOpenedSignal signal) {
88 fTrace = signal.getTrace();
89 if (fTrace != null) {
90 CallGraphAnalysis flamegraphModule = TmfTraceUtils.getAnalysisModuleOfClass(fTrace, CallGraphAnalysis.class, CallGraphAnalysisUI.ID);
91 buildFlameGraph(flamegraphModule);
92 }
93 }
94
95 /**
96 * Handler for the trace selected signal
97 *
98 * @param signal
99 * The incoming signal
100 */
101 @TmfSignalHandler
102 public void traceSelected(final TmfTraceSelectedSignal signal) {
103 fTrace = signal.getTrace();
104 if (fTrace != null) {
105 CallGraphAnalysis flamegraphModule = TmfTraceUtils.getAnalysisModuleOfClass(fTrace, CallGraphAnalysis.class, CallGraphAnalysisUI.ID);
106 buildFlameGraph(flamegraphModule);
107 }
108 }
109
110 /**
111 * Get the necessary data for the flame graph and display it
112 *
113 * @param flamegraphModule
114 * the callGraphAnalysis
115 */
116 private void buildFlameGraph(CallGraphAnalysis callGraphAnalysis) {
117 fTimeGraphViewer.setInput(null);
118 callGraphAnalysis.schedule();
119 Job j = new Job(Messages.CallGraphAnalysis_Execution) {
120
121 @Override
122 protected IStatus run(IProgressMonitor monitor) {
123 if (monitor.isCanceled()) {
124 return Status.CANCEL_STATUS;
125 }
126 callGraphAnalysis.waitForCompletion(monitor);
127 Display.getDefault().asyncExec(() -> {
128 fTimeGraphViewer.setInput(callGraphAnalysis.getThreadNodes());
129 });
130 return Status.OK_STATUS;
131 }
132 };
133 j.schedule();
134 }
135
136 /**
137 * Trace is closed: clear the data structures and the view
138 *
139 * @param signal
140 * the signal received
141 */
142 @TmfSignalHandler
143 public void traceClosed(final TmfTraceClosedSignal signal) {
144 if (signal.getTrace() == fTrace) {
145 fTimeGraphViewer.setInput(null);
146 }
147 }
148
149 @Override
150 public void setFocus() {
151 fTimeGraphViewer.setFocus();
152 }
153
154 }
This page took 0.0342 seconds and 5 git commands to generate.