Copyright header update, 2015 edition
[deliverable/tracecompass.git] / org.eclipse.tracecompass.lttng2.ust.core / src / org / eclipse / tracecompass / lttng2 / ust / core / analysis / memory / UstMemoryAnalysisModule.java
1 /*******************************************************************************
2 * Copyright (c) 2014, 2015 É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 * Contributors:
10 * Geneviève Bastien - Initial API and implementation
11 * Guilliano Molaire - Provide the requirements of the analysis
12 *******************************************************************************/
13
14 package org.eclipse.tracecompass.lttng2.ust.core.analysis.memory;
15
16 import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
17
18 import java.util.Set;
19
20 import org.eclipse.jdt.annotation.NonNull;
21 import org.eclipse.tracecompass.internal.lttng2.ust.core.memoryusage.MemoryUsageStateProvider;
22 import org.eclipse.tracecompass.internal.lttng2.ust.core.memoryusage.UstMemoryStrings;
23 import org.eclipse.tracecompass.lttng2.control.core.session.SessionConfigStrings;
24 import org.eclipse.tracecompass.lttng2.ust.core.trace.LttngUstTrace;
25 import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisRequirement;
26 import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisRequirement.ValuePriorityLevel;
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.statesystem.TmfStateSystemAnalysisModule;
30 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
31
32 import com.google.common.collect.ImmutableSet;
33
34 /**
35 * This analysis build a state system from the libc memory instrumentation on a
36 * UST trace
37 *
38 * @author Geneviève Bastien
39 * @since 3.0
40 */
41 public class UstMemoryAnalysisModule extends TmfStateSystemAnalysisModule {
42
43 /**
44 * Analysis ID, it should match that in the plugin.xml file
45 */
46 public static String ID = "org.eclipse.linuxtools.lttng2.ust.analysis.memory"; //$NON-NLS-1$
47
48 private static final ImmutableSet<String> REQUIRED_EVENTS = ImmutableSet.of(
49 UstMemoryStrings.MALLOC,
50 UstMemoryStrings.FREE,
51 UstMemoryStrings.CALLOC,
52 UstMemoryStrings.REALLOC,
53 UstMemoryStrings.MEMALIGN,
54 UstMemoryStrings.POSIX_MEMALIGN
55 );
56
57 /** The requirements as an immutable set */
58 private static final @NonNull Set<TmfAnalysisRequirement> REQUIREMENTS;
59
60 static {
61 /* Initialize the requirements for the analysis: domain and events */
62 TmfAnalysisRequirement eventsReq = new TmfAnalysisRequirement(SessionConfigStrings.CONFIG_ELEMENT_EVENT, REQUIRED_EVENTS, ValuePriorityLevel.MANDATORY);
63 /*
64 * In order to have these events, the libc wrapper with probes should be
65 * loaded
66 */
67 eventsReq.addInformation(Messages.UstMemoryAnalysisModule_EventsLoadingInformation);
68 eventsReq.addInformation(Messages.UstMemoryAnalysisModule_EventsLoadingExampleInformation);
69
70 /* The domain type of the analysis */
71 TmfAnalysisRequirement domainReq = new TmfAnalysisRequirement(SessionConfigStrings.CONFIG_ELEMENT_DOMAIN);
72 domainReq.addValue(SessionConfigStrings.CONFIG_DOMAIN_TYPE_UST, ValuePriorityLevel.MANDATORY);
73
74 REQUIREMENTS = checkNotNull(ImmutableSet.of(domainReq, eventsReq));
75 }
76
77 @Override
78 protected ITmfStateProvider createStateProvider() {
79 return new MemoryUsageStateProvider(checkNotNull(getTrace()));
80 }
81
82 @Override
83 public void setTrace(ITmfTrace trace) throws TmfAnalysisException {
84 if (!(trace instanceof LttngUstTrace)) {
85 throw new IllegalStateException("UstMemoryAnalysisModule: trace should be of type LttngUstTrace"); //$NON-NLS-1$
86 }
87 super.setTrace(trace);
88 }
89
90 @Override
91 protected LttngUstTrace getTrace() {
92 return (LttngUstTrace) super.getTrace();
93 }
94
95 @Override
96 public Iterable<TmfAnalysisRequirement> getAnalysisRequirements() {
97 return REQUIREMENTS;
98 }
99 }
This page took 0.033766 seconds and 5 git commands to generate.