|
14 | 14 | import java.util.ArrayList; |
15 | 15 | import java.util.Collection; |
16 | 16 | import java.util.HashMap; |
| 17 | +import java.util.HashSet; |
17 | 18 | import java.util.List; |
18 | 19 | import java.util.Map; |
| 20 | +import java.util.Objects; |
| 21 | +import java.util.Set; |
19 | 22 |
|
20 | 23 | import org.eclipse.jdt.annotation.Nullable; |
| 24 | +import org.eclipse.osgi.util.NLS; |
| 25 | +import org.eclipse.tracecompass.analysis.profiling.core.instrumented.IFlameChartProvider; |
21 | 26 | import org.eclipse.tracecompass.analysis.profiling.core.tree.IWeightedTreeProvider; |
22 | 27 | 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; |
23 | 31 | import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderFactory; |
| 32 | +import org.eclipse.tracecompass.tmf.core.model.DataProviderDescriptor; |
24 | 33 | import org.eclipse.tracecompass.tmf.core.model.timegraph.TmfTimeGraphCompositeDataProvider; |
25 | 34 | import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataModel; |
26 | 35 | import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataProvider; |
27 | 36 | import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; |
28 | 37 | import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager; |
| 38 | +import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils; |
29 | 39 |
|
30 | 40 | import com.google.common.annotations.VisibleForTesting; |
31 | 41 |
|
@@ -97,4 +107,27 @@ public static void registerDataProviderWithId(String id, @Nullable FlameGraphDat |
97 | 107 | } |
98 | 108 | INSTANCES.put(id, dataProvider); |
99 | 109 | } |
| 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 | + |
100 | 133 | } |
0 commit comments