blob: 42fe84149a5f05a6d04415d8c1e8c51c4fcdab02 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 École Polytechnique de Montréal
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.provider;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.callstack.core.instrumented.statesystem.InstrumentedCallStackAnalysis;
import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
/**
* Provide arrows for a flame chart. These arrows may come from any other flame
* chart analysis.
*
* @author Geneviève Bastien
*/
public class FlameChartArrowProvider {
private final ITmfTrace fTrace;
/**
* Constructor
*
* @param trace
* The trace for which this data provider applies
*/
public FlameChartArrowProvider(ITmfTrace trace) {
fTrace = trace;
}
/**
* Fetch arrows with query
* @param fetchParameters
* the parameters
* @param monitor
* the monitor
* @return the corresponding state intervals
*/
public List<ITmfStateInterval> fetchArrows(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
TimeQueryFilter filter = FetchParametersUtils.createTimeQuery(fetchParameters);
if (filter == null) {
return Collections.emptyList();
}
long start = filter.getStart();
long end = filter.getEnd();
InstrumentedCallStackAnalysis csModule = null;
Iterable<InstrumentedCallStackAnalysis> modules = TmfTraceUtils.getAnalysisModulesOfClass(fTrace, InstrumentedCallStackAnalysis.class);
Iterator<InstrumentedCallStackAnalysis> iterator = modules.iterator();
List<@NonNull ITmfStateInterval> allEdges = new ArrayList<>();
while (iterator.hasNext()) {
csModule = iterator.next();
List<@NonNull ITmfStateInterval> moduleEdges = csModule.getLinks(start, end, monitor == null ? new NullProgressMonitor() : monitor);
allEdges.addAll(moduleEdges);
}
return allEdges;
}
}