Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import static org.junit.Assert.assertTrue;

import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
Expand All @@ -31,6 +32,8 @@
import org.eclipse.tracecompass.lttng2.ust.core.tests.shared.LttngUstTestTraceUtils;
import org.eclipse.tracecompass.lttng2.ust.core.trace.LttngUstTrace;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration;
import org.eclipse.tracecompass.tmf.core.config.TmfConfiguration;
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderManager;
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor;
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor.ProviderType;
Expand Down Expand Up @@ -63,6 +66,14 @@ public class DataProviderManagerTest {
private static final Set<IDataProviderDescriptor> EXPECTED_UST_DP_DESCRIPTORS = new HashSet<>();
private static final String SEGMENTSTORE_SCATTER_FUTEX_DP_ID = "org.eclipse.tracecompass.internal.analysis.timing.core.segmentstore.scatter.dataprovider:lttng.analysis.futex";

private static final String PATH = "/tmp/my-test.xml";
private static final String ID = "my-test.xml";
private static final String DESC = "descriptor";
private static final String SOURCE_ID = "my-source-id";

private static ITmfConfiguration sfCconfig;
private static ITmfConfiguration sfCconfig2;

private static final String CPU_USAGE_DP_ID = "org.eclipse.tracecompass.analysis.os.linux.core.cpuusage.CpuUsageDataProvider";

static {
Expand Down Expand Up @@ -350,6 +361,16 @@ public static void init() {
TmfTraceOpenedSignal openTraceSignal = new TmfTraceOpenedSignal(fExperiment, fExperiment, null);
TmfSignalManager.dispatchSignal(openTraceSignal);
fExperiment.indexTrace(true);

TmfConfiguration.Builder builder = new TmfConfiguration.Builder()
.setName(PATH)
.setId(ID)
.setDescription(DESC)
.setSourceTypeId(SOURCE_ID)
.setParameters(Collections.emptyMap());
sfCconfig = builder.build();
builder.setSourceTypeId(SOURCE_ID + "-1");
sfCconfig2 = builder.build();
}

/**
Expand Down Expand Up @@ -467,6 +488,10 @@ public void testRemoveDataProviderMethods() {
ITimeGraphDataProvider<?> dp = DataProviderManager.getInstance().getOrCreateDataProvider(trace, myId, ITimeGraphDataProvider.class);
assertNotNull(dp);

List<IDataProviderDescriptor> configDescriptors = DataProviderManager.getInstance().getAvailableProviders(trace, sfCconfig);
assertEquals(1, configDescriptors.size());
assertEquals(myId, configDescriptors.get(0).getId());

// test remove by ID
DataProviderManager.getInstance().removeDataProvider(trace, myId);
assertNull(DataProviderManager.getInstance().getExistingDataProvider(trace, myId, ITimeGraphDataProvider.class));
Expand Down Expand Up @@ -501,12 +526,17 @@ private static IDataProviderFactory createCustomFactory(@NonNull String myId) {
@SuppressWarnings("null")
@Override
public @NonNull Collection<IDataProviderDescriptor> getDescriptors(@NonNull ITmfTrace trace) {
return List.of(new DataProviderDescriptor.Builder()
DataProviderDescriptor.Builder builder = new DataProviderDescriptor.Builder()
.setId(myId)
.setName(Objects.requireNonNull(""))
.setDescription(Objects.requireNonNull(""))
.setProviderType(ProviderType.TIME_GRAPH)
.build());
.setConfiguration(sfCconfig);
IDataProviderDescriptor desc1 = builder.build();
builder.setId(myId + "-1");
builder.setConfiguration(sfCconfig2);
IDataProviderDescriptor desc2 = builder.build();
return List.of(desc1, desc2);
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
Expand All @@ -43,6 +44,7 @@
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.internal.tmf.core.Activator;
import org.eclipse.tracecompass.tmf.core.component.DataProviderConstants;
import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration;
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataModel;
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataProvider;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
Expand Down Expand Up @@ -307,11 +309,39 @@ public List<IDataProviderDescriptor> getAvailableProviders(@Nullable ITmfTrace t
if (trace == null) {
return Collections.emptyList();
}
return getAvailableProviders(trace, desc -> true);
}

/**
* Get the list of available providers for this trace / experiment without
* triggering the analysis or creating the provider
*
* @param trace
* queried trace
* @param configuration
* a configuration used to create data providers (and descriptors)
* @return list of the available providers for this trace / experiment
* @since 9.7
*/
public List<IDataProviderDescriptor> getAvailableProviders(@Nullable ITmfTrace trace, @Nullable ITmfConfiguration configuration) {
if (trace == null || configuration == null) {
return Collections.emptyList();
}
Predicate<IDataProviderDescriptor> predicate = desc -> {
ITmfConfiguration cfg = desc.getConfiguration();
return cfg != null &&
cfg.getSourceTypeId().equals(configuration.getSourceTypeId()) &&
cfg.getId().equals(configuration.getId());
};
return getAvailableProviders(trace, predicate);
}

private List<IDataProviderDescriptor> getAvailableProviders(@NonNull ITmfTrace trace, @NonNull Predicate<IDataProviderDescriptor> predicate) {
List<IDataProviderDescriptor> list = new ArrayList<>();
for (IDataProviderFactory factory : fDataProviderFactories.values()) {
Collection<IDataProviderDescriptor> descriptors = factory.getDescriptors(trace);
for (IDataProviderDescriptor descriptor : descriptors) {
if (!isHidden(descriptor.getId(), trace)) {
if (!isHidden(descriptor.getId(), trace) && predicate.test(descriptor)) {
list.add(descriptor);
}
}
Expand Down
Loading