Skip to content

Commit d487cf2

Browse files
committed
tmf: Add GANTT_CHART data provider type and use it for flame graphs
[Added] GANTT_CHART data provider type and use it for flame graphs Signed-off-by: Bernd Hufmann <[email protected]>
1 parent 7226f6f commit d487cf2

File tree

6 files changed

+61
-4
lines changed

6 files changed

+61
-4
lines changed

analysis/org.eclipse.tracecompass.analysis.profiling.core/src/org/eclipse/tracecompass/internal/analysis/profiling/core/flamegraph/FlameGraphDataProviderFactory.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,28 @@
1414
import java.util.ArrayList;
1515
import java.util.Collection;
1616
import java.util.HashMap;
17+
import java.util.HashSet;
1718
import java.util.List;
1819
import java.util.Map;
20+
import java.util.Objects;
21+
import java.util.Set;
1922

2023
import org.eclipse.jdt.annotation.Nullable;
24+
import org.eclipse.osgi.util.NLS;
25+
import org.eclipse.tracecompass.analysis.profiling.core.instrumented.IFlameChartProvider;
2126
import org.eclipse.tracecompass.analysis.profiling.core.tree.IWeightedTreeProvider;
2227
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
28+
import org.eclipse.tracecompass.tmf.core.component.DataProviderConstants;
29+
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor;
30+
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor.ProviderType;
2331
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderFactory;
32+
import org.eclipse.tracecompass.tmf.core.model.DataProviderDescriptor;
2433
import org.eclipse.tracecompass.tmf.core.model.timegraph.TmfTimeGraphCompositeDataProvider;
2534
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataModel;
2635
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataProvider;
2736
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
2837
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
38+
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
2939

3040
import com.google.common.annotations.VisibleForTesting;
3141

@@ -97,4 +107,27 @@ public static void registerDataProviderWithId(String id, @Nullable FlameGraphDat
97107
}
98108
INSTANCES.put(id, dataProvider);
99109
}
110+
@Override
111+
public Collection<IDataProviderDescriptor> getDescriptors(ITmfTrace trace) {
112+
Iterable<IFlameChartProvider> modules = TmfTraceUtils.getAnalysisModulesOfClass(trace, IFlameChartProvider.class);
113+
List<IDataProviderDescriptor> descriptors = new ArrayList<>();
114+
Set<String> existingModules = new HashSet<>();
115+
for (IFlameChartProvider module : modules) {
116+
IAnalysisModule analysis = module;
117+
// Only add analysis once per trace (which could be an experiment)
118+
if (!existingModules.contains(analysis.getId())) {
119+
DataProviderDescriptor.Builder builder = new DataProviderDescriptor.Builder();
120+
builder.setId(FlameGraphDataProvider.ID + DataProviderConstants.ID_SEPARATOR + analysis.getId())
121+
.setParentId(analysis.getConfiguration() != null ? analysis.getId() : null)
122+
.setName(Objects.requireNonNull(analysis.getName() + " - " + Messages.FlameGraphDataProvider_Title)) //$NON-NLS-1$
123+
.setDescription(Objects.requireNonNull(NLS.bind(Messages.FlameGraphDataProvider_Description, analysis.getHelpText())))
124+
.setProviderType(ProviderType.GANTT_CHART)
125+
.setConfiguration(analysis.getConfiguration());
126+
descriptors.add(builder.build());
127+
existingModules.add(analysis.getId());
128+
}
129+
}
130+
return descriptors;
131+
}
132+
100133
}

analysis/org.eclipse.tracecompass.analysis.profiling.core/src/org/eclipse/tracecompass/internal/analysis/profiling/core/flamegraph/Messages.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2016 Ericsson
2+
* Copyright (c) 2016, 2025 Ericsson
33
*
44
* All rights reserved. This program and the accompanying materials are
55
* made available under the terms of the Eclipse Public License 2.0 which
@@ -12,6 +12,7 @@
1212
package org.eclipse.tracecompass.internal.analysis.profiling.core.flamegraph;
1313

1414
import org.eclipse.jdt.annotation.NonNullByDefault;
15+
import org.eclipse.jdt.annotation.Nullable;
1516
import org.eclipse.osgi.util.NLS;
1617

1718
/**
@@ -40,6 +41,13 @@ public class Messages extends NLS {
4041
/** Label for the goto max action */
4142
public static String FlameGraph_GoToMax;
4243

44+
/** Title of the dataprovider */
45+
public static @Nullable String FlameGraphDataProvider_Title;
46+
47+
/** Description of the dataprovider */
48+
public static @Nullable String FlameGraphDataProvider_Description;
49+
50+
4351
static {
4452
// initialize resource bundle
4553
NLS.initializeMessages(BUNDLE_NAME, Messages.class);

analysis/org.eclipse.tracecompass.analysis.profiling.core/src/org/eclipse/tracecompass/internal/analysis/profiling/core/flamegraph/messages.properties

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
###############################################################################
2-
# Copyright (c) 2019 École Polytechnique de Montréal
2+
# Copyright (c) 2019, 2025 École Polytechnique de Montréal and others
33
#
44
# All rights reserved. This program and the accompanying materials
55
# are made available under the terms of the Eclipse Public License 2.0
@@ -17,3 +17,6 @@ FlameGraph_Max=Maximum
1717
FlameGraph_Deviation=Deviation
1818
FlameGraph_GoToMin=Go to minimum
1919
FlameGraph_GoToMax=Go to maximum
20+
21+
FlameGraphDataProvider_Title=Flame Graph
22+
FlameGraphDataProvider_Description=Show Flame Graph provided by {0}

releng/org.eclipse.tracecompass.integration.core.tests/src/org/eclipse/tracecompass/integration/core/tests/dataproviders/DataProviderManagerTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,11 @@ public class DataProviderManagerTest {
341341
.setProviderType(ProviderType.TREE_TIME_XY)
342342
.setId("org.eclipse.tracecompass.internal.analysis.timing.core.segmentstore.scatter.dataprovider:org.eclipse.tracecompass.lttng2.ust.core.analysis.callstack");
343343
EXPECTED_UST_DP_DESCRIPTORS.add(builder.build());
344+
builder.setName("LTTng-UST CallStack (new) - Flame Graph")
345+
.setDescription("Show Flame Graph provided by Analysis module: LTTng-UST CallStack (new)")
346+
.setProviderType(ProviderType.GANTT_CHART)
347+
.setId("org.eclipse.tracecompass.analysis.profiling.core.flamegraph:org.eclipse.tracecompass.lttng2.ust.core.analysis.callstack");
348+
EXPECTED_UST_DP_DESCRIPTORS.add(builder.build());
344349
}
345350

346351
/**

tmf/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %Bundle-Name
44
Bundle-Vendor: %Bundle-Vendor
5-
Bundle-Version: 10.1.0.qualifier
5+
Bundle-Version: 10.2.0.qualifier
66
Bundle-Localization: plugin
77
Bundle-SymbolicName: org.eclipse.tracecompass.tmf.core;singleton:=true
88
Bundle-Activator: org.eclipse.tracecompass.internal.tmf.core.Activator

tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/dataprovider/IDataProviderDescriptor.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,15 @@ public enum ProviderType {
6565
* A provider with no data. Can be used for grouping purposes and/or as data provider configurator.
6666
* @since 9.5
6767
*/
68-
NONE
68+
NONE,
69+
/**
70+
* A provider for a generic GANTT_CHART model. It uses the same data
71+
* provider interface than TIME_GRAPH, but has a different x-axis other
72+
* than time, e.g. durations.
73+
*
74+
* @since 10.2
75+
*/
76+
GANTT_CHART
6977
}
7078

7179
/**

0 commit comments

Comments
 (0)