/******************************************************************************
- * Copyright (c) 2015 Ericsson
+ * Copyright (c) 2015, 2016 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
+import java.text.Format;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
-import org.eclipse.tracecompass.analysis.timing.core.segmentstore.AbstractSegmentStoreAnalysisModule;
import org.eclipse.tracecompass.analysis.timing.core.segmentstore.IAnalysisProgressListener;
+import org.eclipse.tracecompass.analysis.timing.core.segmentstore.ISegmentStoreProvider;
+import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.SubSecondTimeWithUnitFormat;
import org.eclipse.tracecompass.common.core.NonNullUtils;
-import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.density.DensityTimeFormat;
import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.density.MouseDragZoomProvider;
import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.density.MouseSelectionProvider;
import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.density.SimpleTooltipProvider;
import org.eclipse.tracecompass.segmentstore.core.ISegment;
import org.eclipse.tracecompass.segmentstore.core.ISegmentStore;
import org.eclipse.tracecompass.segmentstore.core.SegmentComparators;
+import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import com.google.common.collect.Lists;
/**
- * Displays the segment store analysis data in a density chart.
+ * Displays the segment store provider data in a density chart.
*
* @author Matthew Khouzam
* @author Marc-Andre Laperle
*/
public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
- private static final DensityTimeFormat DENSITY_TIME_FORMATTER = new DensityTimeFormat();
+ private static final Format DENSITY_TIME_FORMATTER = new SubSecondTimeWithUnitFormat();
private static final RGB BAR_COLOR = new RGB(0x42, 0x85, 0xf4);
private final Chart fChart;
private final MouseDragZoomProvider fDragZoomProvider;
private @Nullable ITmfTrace fTrace;
private @Nullable IAnalysisProgressListener fListener;
- private @Nullable AbstractSegmentStoreAnalysisModule fAnalysisModule;
+ private @Nullable ISegmentStoreProvider fSegmentStoreProvider;
private TmfTimeRange fCurrentTimeRange = TmfTimeRange.NULL_RANGE;
private List<ISegmentStoreDensityViewerDataListener> fListeners;
fChart.getTitle().setVisible(false);
fChart.getAxisSet().getXAxis(0).getTitle().setText(nullToEmptyString(Messages.AbstractSegmentStoreDensityViewer_TimeAxisLabel));
fChart.getAxisSet().getYAxis(0).getTitle().setText(nullToEmptyString(Messages.AbstractSegmentStoreDensityViewer_CountAxisLabel));
- fChart.getAxisSet().getXAxis(0).getGrid().setStyle(LineStyle.NONE);
- fChart.getAxisSet().getYAxis(0).getGrid().setStyle(LineStyle.NONE);
+ fChart.getAxisSet().getXAxis(0).getGrid().setStyle(LineStyle.DOT);
+ fChart.getAxisSet().getYAxis(0).getGrid().setStyle(LineStyle.DOT);
fDragZoomProvider = new MouseDragZoomProvider(this);
fDragZoomProvider.register();
}
/**
- * Returns the segment store analysis module
+ * Returns the segment store provider
*
* @param trace
* The trace to consider
- * @return the analysis module
+ * @return the
*/
- protected @Nullable abstract AbstractSegmentStoreAnalysisModule getSegmentStoreAnalysisModule(ITmfTrace trace);
+ protected @Nullable abstract ISegmentStoreProvider getSegmentStoreProvider(ITmfTrace trace);
@Nullable
private static ITmfTrace getTrace() {
yOrigSeries[(int) xBox]++;
minX = Math.min(minX, segment.getLength());
}
+ double timeWidth = (double) maxLength / (double) width;
for (int i = 0; i < width; i++) {
- xOrigSeries[i] = i * maxLength / width;
+ xOrigSeries[i] = i * timeWidth;
}
double maxY = Double.MIN_VALUE;
for (int i = 0; i < width; i++) {
computeDataAsync(fCurrentTimeRange, durationRange).thenAccept((data) -> applyData(data));
}
- private CompletableFuture<List<ISegment>> computeDataAsync(final TmfTimeRange timeRange, final Range durationRange) {
+ private CompletableFuture<@Nullable List<ISegment>> computeDataAsync(final TmfTimeRange timeRange, final Range durationRange) {
return CompletableFuture.supplyAsync(() -> computeData(timeRange, durationRange));
}
- private @Nullable ArrayList<ISegment> computeData(final TmfTimeRange timeRange, final Range durationRange) {
- final AbstractSegmentStoreAnalysisModule analysisModule = fAnalysisModule;
- if (analysisModule == null) {
+ private @Nullable List<ISegment> computeData(final TmfTimeRange timeRange, final Range durationRange) {
+ final ISegmentStoreProvider segmentProvider = fSegmentStoreProvider;
+ if (segmentProvider == null) {
return null;
}
- final ISegmentStore<ISegment> results = analysisModule.getResults();
- if (results == null) {
+ final ISegmentStore<ISegment> segStore = segmentProvider.getSegmentStore();
+ if (segStore == null) {
return null;
}
- Iterator<ISegment> intersectingElements = results.getIntersectingElements(timeRange.getStartTime().getValue(), timeRange.getEndTime().getValue()).iterator();
+ Iterator<ISegment> intersectingElements = segStore.getIntersectingElements(timeRange.getStartTime().getValue(), timeRange.getEndTime().getValue()).iterator();
if (durationRange.lower > Double.MIN_VALUE || durationRange.upper < Double.MAX_VALUE) {
Predicate<? super ISegment> predicate = new Predicate<ISegment>() {
return input != null && input.getLength() >= durationRange.lower && input.getLength() <= durationRange.upper;
}
};
- intersectingElements = Iterators.<ISegment> filter(intersectingElements, predicate);
+ intersectingElements = Iterators.filter(intersectingElements, predicate);
}
return Lists.newArrayList(intersectingElements);
if (trace == null) {
return;
}
- fAnalysisModule = getSegmentStoreAnalysisModule(trace);
+ fSegmentStoreProvider = getSegmentStoreProvider(trace);
fCurrentTimeRange = NonNullUtils.checkNotNull(signal.getCurrentRange());
updateWithRange(fCurrentTimeRange);
}
@Override
public void dispose() {
- if (fAnalysisModule != null && fListener != null) {
- fAnalysisModule.removeListener(fListener);
+ if (fSegmentStoreProvider != null && fListener != null) {
+ fSegmentStoreProvider.removeListener(fListener);
}
fDragZoomProvider.deregister();
fTooltipProvider.deregister();
fCurrentTimeRange = windowRange;
if (trace != null) {
- fAnalysisModule = getSegmentStoreAnalysisModule(trace);
- final AbstractSegmentStoreAnalysisModule module = fAnalysisModule;
- if (module != null) {
- fListener = (activeAnalysis, data) -> updateWithRange(windowRange);
- module.addListener(fListener);
- module.schedule();
+ fSegmentStoreProvider = getSegmentStoreProvider(trace);
+ final ISegmentStoreProvider provider = fSegmentStoreProvider;
+ if (provider != null) {
+ fListener = (segmentProvider, data) -> updateWithRange(windowRange);
+ provider.addListener(fListener);
+ if( provider instanceof IAnalysisModule) {
+ ((IAnalysisModule) provider).schedule();
+ }
}
}
zoom(new Range(0, Long.MAX_VALUE));