1 /*******************************************************************************
2 * Copyright (c) 2014, 2016 Ericsson
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
10 * Alexandre Montplaisir - Initial API and implementation
11 * Bernd Hufmann - Added analysis requirements
12 *******************************************************************************/
14 package org
.eclipse
.tracecompass
.lttng2
.ust
.ui
.analysis
.callstack
;
16 import static org
.eclipse
.tracecompass
.common
.core
.NonNullUtils
.checkNotNull
;
20 import org
.eclipse
.jdt
.annotation
.NonNull
;
21 import org
.eclipse
.jdt
.annotation
.Nullable
;
22 import org
.eclipse
.tracecompass
.internal
.lttng2
.ust
.core
.callstack
.LttngUstCallStackProvider
;
23 import org
.eclipse
.tracecompass
.internal
.lttng2
.ust
.ui
.analysis
.callstack
.LttngUstCallStackAnalysisRequirement
;
24 import org
.eclipse
.tracecompass
.lttng2
.ust
.core
.trace
.LttngUstTrace
;
25 import org
.eclipse
.tracecompass
.lttng2
.ust
.core
.trace
.layout
.ILttngUstEventLayout
;
26 import org
.eclipse
.tracecompass
.tmf
.core
.analysis
.requirements
.TmfAbstractAnalysisRequirement
;
27 import org
.eclipse
.tracecompass
.tmf
.core
.exceptions
.TmfAnalysisException
;
28 import org
.eclipse
.tracecompass
.tmf
.core
.statesystem
.ITmfStateProvider
;
29 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.ITmfTrace
;
30 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.callstack
.AbstractCallStackAnalysis
;
32 import com
.google
.common
.collect
.ImmutableSet
;
35 * Call-stack analysis to populate the TMF CallStack View from UST cyg-profile
38 * @author Alexandre Montplaisir
40 public class LttngUstCallStackAnalysis
extends AbstractCallStackAnalysis
{
47 public static final String ID
= "org.eclipse.linuxtools.lttng2.ust.analysis.callstack"; //$NON-NLS-1$
49 private @Nullable Set
<@NonNull TmfAbstractAnalysisRequirement
> fAnalysisRequirements
= null;
55 public boolean setTrace(ITmfTrace trace
) throws TmfAnalysisException
{
56 if (!(trace
instanceof LttngUstTrace
)) {
59 return super.setTrace(trace
);
63 protected LttngUstTrace
getTrace() {
64 return (LttngUstTrace
) super.getTrace();
68 protected ITmfStateProvider
createStateProvider() {
69 return new LttngUstCallStackProvider(checkNotNull(getTrace()));
73 public @NonNull Iterable
<@NonNull TmfAbstractAnalysisRequirement
> getAnalysisRequirements() {
75 Set
<@NonNull TmfAbstractAnalysisRequirement
> requirements
= fAnalysisRequirements
;
76 if (requirements
== null) {
77 LttngUstTrace trace
= getTrace();
78 ILttngUstEventLayout layout
= ILttngUstEventLayout
.DEFAULT_LAYOUT
;
80 layout
= trace
.getEventLayout();
82 requirements
= ImmutableSet
.of(new LttngUstCallStackAnalysisRequirement(layout
));
83 fAnalysisRequirements
= requirements
;