1 /*******************************************************************************
2 * Copyright (c) 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
8 *******************************************************************************/
9 package org
.eclipse
.tracecompass
.internal
.lttng2
.ust
.ui
.analysis
.callstack
;
11 import static org
.eclipse
.tracecompass
.common
.core
.NonNullUtils
.nullToEmptyString
;
13 import java
.util
.Collection
;
16 import org
.eclipse
.jdt
.annotation
.NonNull
;
17 import org
.eclipse
.jdt
.annotation
.NonNullByDefault
;
18 import org
.eclipse
.tracecompass
.lttng2
.ust
.core
.trace
.layout
.ILttngUstEventLayout
;
19 import org
.eclipse
.tracecompass
.tmf
.core
.analysis
.requirements
.TmfAbstractAnalysisRequirement
;
20 import org
.eclipse
.tracecompass
.tmf
.core
.analysis
.requirements
.TmfAnalysisEventFieldRequirement
;
21 import org
.eclipse
.tracecompass
.tmf
.core
.analysis
.requirements
.TmfCompositeAnalysisRequirement
;
23 import com
.google
.common
.collect
.ImmutableSet
;
26 * Analysis requirement implementation for LTTng Call Stack Analysis.
28 * @author Bernd Hufmann
32 public class LttngUstCallStackAnalysisRequirement
extends TmfCompositeAnalysisRequirement
{
38 * The event layout (non-null)
40 public LttngUstCallStackAnalysisRequirement(ILttngUstEventLayout layout
) {
41 super(getSubRequirements(layout
), PriorityLevel
.AT_LEAST_ONE
);
43 addInformation(nullToEmptyString(Messages
.LttnUstCallStackAnalysisModule_EventsLoadingInformation
));
46 private static Collection
<TmfAbstractAnalysisRequirement
> getSubRequirements(ILttngUstEventLayout layout
) {
47 Set
<@NonNull String
> requiredEventsFields
= ImmutableSet
.of(
48 layout
.contextProcname(),
49 layout
.contextVtid());
51 // Requirement for the cyg_profile events
52 TmfAnalysisEventFieldRequirement entryReq
= new TmfAnalysisEventFieldRequirement(
53 layout
.eventCygProfileFuncEntry(),
55 PriorityLevel
.MANDATORY
);
57 TmfAbstractAnalysisRequirement exitReq
= new TmfAnalysisEventFieldRequirement(
58 layout
.eventCygProfileFuncExit(),
60 PriorityLevel
.MANDATORY
);
62 TmfAbstractAnalysisRequirement cygProfile
= new TmfCompositeAnalysisRequirement(ImmutableSet
.of(entryReq
, exitReq
), PriorityLevel
.MANDATORY
);
64 // Requirement for the cyg_profile_fast events
65 entryReq
= new TmfAnalysisEventFieldRequirement(
66 layout
.eventCygProfileFastFuncEntry(),
68 PriorityLevel
.MANDATORY
);
70 exitReq
= new TmfAnalysisEventFieldRequirement(
71 layout
.eventCygProfileFastFuncExit(),
73 PriorityLevel
.MANDATORY
);
74 TmfAbstractAnalysisRequirement cygProfileFast
= new TmfCompositeAnalysisRequirement(ImmutableSet
.of(entryReq
, exitReq
), PriorityLevel
.MANDATORY
);
76 return ImmutableSet
.of(cygProfile
, cygProfileFast
);