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 @@ -57,31 +57,19 @@ public class FlameChartDataProviderFactory implements IDataProviderFactory {
if (provider != null) {
return provider;
}
// Otherwise, see if it's an experiment and create a composite if that's
// the case
// Otherwise, it may be an experiment and the analysis does not apply to an experiment:
Collection<ITmfTrace> traces = TmfTraceManager.getTraceSet(trace);
if (traces.size() > 1) {
// Try creating a composite only if there are many traces,
// otherwise, the previous call to create should have returned the
// data provider
return TmfTimeGraphCompositeDataProvider.create(traces, FlameChartDataProvider.ID, secondaryId);
}
return null;
}

private static @Nullable ITmfTreeDataProvider<? extends ITmfTreeDataModel> create(ITmfTrace trace, String secondaryId) {
// The trace can be an experiment, so we need to know if there are
// multiple analysis modules with the same ID
Iterable<IFlameChartProvider> modules = TmfTraceUtils.getAnalysisModulesOfClass(trace, IFlameChartProvider.class);
Iterable<IFlameChartProvider> filteredModules = Iterables.filter(modules, m -> m.getId().equals(secondaryId));
Iterator<IFlameChartProvider> iterator = filteredModules.iterator();
if (iterator.hasNext()) {
IFlameChartProvider module = iterator.next();
if (iterator.hasNext()) {
// More than one module, must be an experiment, return null so
// the factory can try with individual traces
return null;
}
Iterable<IAnalysisModule> modules = trace.getAnalysisModules();
modules = Iterables.filter(modules, m -> m.getId().equals(secondaryId));
Iterator<IAnalysisModule> iterator = modules.iterator();
if (iterator.hasNext() && iterator.next() instanceof IFlameChartProvider module) {
module.schedule();
return new FlameChartDataProvider(trace, module, secondaryId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchActionConstants;

import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
Expand Down Expand Up @@ -372,16 +373,32 @@ protected String getProviderId() {
return (secondaryId == null) ? FlameChartDataProvider.ID : FlameChartDataProvider.ID + ':' + secondaryId.split(TmfViewFactory.INTERNAL_SECONDARY_ID_SEPARATOR)[0]; // NOSONAR
}

@Override
protected Iterable<ITmfTrace> getTracesToBuild(@Nullable ITmfTrace trace) {
if (trace == null) {
return ImmutableSet.of();
}
return ImmutableSet.of(trace);
}

@Override
protected void buildEntryList(final ITmfTrace trace, final ITmfTrace parentTrace, final IProgressMonitor monitor) {
FlameChartDataProvider provider = DataProviderManager
.getInstance().getOrCreateDataProvider(trace, getProviderId(), FlameChartDataProvider.class);
ITimeGraphDataProvider<? extends TimeGraphEntryModel> provider = DataProviderManager
.getInstance().fetchOrCreateDataProvider(trace, getProviderId(), ITimeGraphDataProvider.class);
if (provider == null) {
addUnavailableEntry(trace, parentTrace);
return;
}

provider.resetFunctionNames(monitor);
/*
* TODO: the reset function names method is not available in the TSP. A
* solution should be added to either support the call or get rid of
* this function and make the symbol cache flushing implicit. It will
* also make this function work with the composite data provider as the
* cache flushing is only available on the flame chart data provider.
*/
if (provider instanceof FlameChartDataProvider flameChartDataProvider) {
flameChartDataProvider.resetFunctionNames(monitor);
}
super.buildEntryList(trace, parentTrace, monitor);
}

Expand Down Expand Up @@ -626,7 +643,8 @@ public void run() {
if (dialog.open() == IDialogConstants.OK_ID) {
/*
* Nothing to do. SymbolProviderConfigDialog will send a
* TmfSymbolProviderUpdatedSignal to notify registered components.
* TmfSymbolProviderUpdatedSignal to notify registered
* components.
*/
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ public void createPartControl(Composite parent) {
@Override
protected void buildEntryList(@NonNull ITmfTrace trace, @NonNull ITmfTrace parentTrace, @NonNull IProgressMonitor monitor) {
ITimeGraphDataProvider<@NonNull TimeGraphEntryModel> dataProvider = DataProviderManager
.getInstance().getOrCreateDataProvider(trace, getProviderId(), ITimeGraphDataProvider.class);
.getInstance().fetchOrCreateDataProvider(trace, getProviderId(), ITimeGraphDataProvider.class);
if (dataProvider == null) {
return;
}
Expand Down
Loading