Before, it was updated when the parent's windowRangeUpdated requested an
updateContent and when the viewer itself requested and updateRange, also
in the windowRangeUpdated signal. Now the updateRange method overrides
the updateContent, so the update is done once only.
Change-Id: I8b92367f441c0db62e70e7cc7f2a7c7251b2e598
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
Reviewed-on: https://git.eclipse.org/r/83526
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Tested-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-by: Hudson CI
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.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.Activator;
import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.scatter.Messages;
import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.scatter.SegmentStoreScatterGraphTooltipProvider;
import org.eclipse.tracecompass.internal.analysis.timing.ui.Activator;
import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.scatter.Messages;
import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.scatter.SegmentStoreScatterGraphTooltipProvider;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
-import org.eclipse.tracecompass.tmf.core.signal.TmfWindowRangeUpdatedSignal;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
private final class CompactingSegmentStoreQuery extends Job {
private static final long MAX_POINTS = 1000;
private final class CompactingSegmentStoreQuery extends Job {
private static final long MAX_POINTS = 1000;
- private final TmfTimeRange fCurrentRange;
+ private final long fStart;
+ private final long fEnd;
- private CompactingSegmentStoreQuery(TmfTimeRange currentRange) {
+ private CompactingSegmentStoreQuery(long start, long end) {
super(Messages.SegmentStoreScatterGraphViewer_compactTitle);
super(Messages.SegmentStoreScatterGraphViewer_compactTitle);
- fCurrentRange = currentRange;
+ fStart = start;
+ fEnd = end;
}
ISegmentStoreProvider segmentProvider = getSegmentProvider();
}
ISegmentStoreProvider segmentProvider = getSegmentProvider();
- final long startTimeInNanos = fCurrentRange.getStartTime().toNanos();
- final long endTimeInNanos = fCurrentRange.getEndTime().toNanos();
+ final long startTime = fStart;
+ final long endTime = fEnd;
if (segmentProvider == null) {
if (segmentProvider == null) {
- setWindowRange(startTimeInNanos, endTimeInNanos);
- redraw(statusMonitor, startTimeInNanos, startTimeInNanos, Collections.EMPTY_LIST);
+ redraw(statusMonitor, startTime, startTime, Collections.EMPTY_LIST);
return new Status(IStatus.WARNING, Activator.PLUGIN_ID, "segment provider not available"); //$NON-NLS-1$
}
final ISegmentStore<ISegment> segStore = segmentProvider.getSegmentStore();
if (segStore == null) {
return new Status(IStatus.WARNING, Activator.PLUGIN_ID, "segment provider not available"); //$NON-NLS-1$
}
final ISegmentStore<ISegment> segStore = segmentProvider.getSegmentStore();
if (segStore == null) {
- setWindowRange(startTimeInNanos, endTimeInNanos);
- redraw(statusMonitor, startTimeInNanos, startTimeInNanos, Collections.EMPTY_LIST);
+ redraw(statusMonitor, startTime, startTime, Collections.EMPTY_LIST);
return new Status(IStatus.INFO, Activator.PLUGIN_ID, "Segment provider does not have segments"); //$NON-NLS-1$
}
return new Status(IStatus.INFO, Activator.PLUGIN_ID, "Segment provider does not have segments"); //$NON-NLS-1$
}
- final long startTime = fCurrentRange.getStartTime().getValue();
- final long endTime = fCurrentRange.getEndTime().getValue();
fPixelStart = startTime;
fPixelSize = Math.max(1, (endTime - startTime) / MAX_POINTS);
final Iterable<ISegment> intersectingElements = segStore.getIntersectingElements(startTime, endTime);
fPixelStart = startTime;
fPixelSize = Math.max(1, (endTime - startTime) / MAX_POINTS);
final Iterable<ISegment> intersectingElements = segStore.getIntersectingElements(startTime, endTime);
final List<ISegment> list = convertIterableToList(intersectingElements, statusMonitor);
final List<ISegment> displayData = (!list.isEmpty()) ? compactList(startTime, list, statusMonitor) : list;
final List<ISegment> list = convertIterableToList(intersectingElements, statusMonitor);
final List<ISegment> displayData = (!list.isEmpty()) ? compactList(startTime, list, statusMonitor) : list;
- setWindowRange(startTimeInNanos, endTimeInNanos);
redraw(statusMonitor, startTime, endTime, displayData);
if (statusMonitor.isCanceled()) {
redraw(statusMonitor, startTime, endTime, displayData);
if (statusMonitor.isCanceled()) {
fDisplayData = list;
}
setWindowRange(currentStart, currentEnd);
fDisplayData = list;
}
setWindowRange(currentStart, currentEnd);
- updateRange(currentRange);
timeRange.getStartTime().toNanos(),
timeRange.getEndTime().toNanos());
setData(getSegmentStoreProvider(trace));
timeRange.getStartTime().toNanos(),
timeRange.getEndTime().toNanos());
setData(getSegmentStoreProvider(trace));
- updateRange(timeRange);
- private void updateRange(final @Nullable TmfTimeRange timeRange) {
+ @Override
+ protected void updateContent() {
- * Update is request, content is not up to date, fDirty will be
+ * Update is requested, content is not up to date, fDirty will be
* decremented in the compacting job
*/
fDirty.incrementAndGet();
* decremented in the compacting job
*/
fDirty.incrementAndGet();
if (compactingJob != null && compactingJob.getState() == Job.RUNNING) {
compactingJob.cancel();
}
if (compactingJob != null && compactingJob.getState() == Job.RUNNING) {
compactingJob.cancel();
}
- compactingJob = new CompactingSegmentStoreQuery(NonNullUtils.checkNotNull(timeRange));
+ compactingJob = new CompactingSegmentStoreQuery(getWindowStartTime(), getWindowEndTime());
fCompactingJob = compactingJob;
compactingJob.schedule();
}
fCompactingJob = compactingJob;
compactingJob.schedule();
}
- /**
- * @param signal
- * Signal received when window range is updated
- */
- @Override
- @TmfSignalHandler
- public void windowRangeUpdated(@Nullable TmfWindowRangeUpdatedSignal signal) {
- super.windowRangeUpdated(signal);
- if (signal == null) {
- return;
- }
- if (getTrace() != null) {
- final TmfTimeRange currentRange = signal.getCurrentRange();
- updateRange(currentRange);
- } else {
- Activator.getDefault().logInfo("No Trace to update"); //$NON-NLS-1$
- }
- }
-
private @Nullable ISegmentStoreProvider getSegmentProvider() {
return fSegmentProvider;
}
private @Nullable ISegmentStoreProvider getSegmentProvider() {
return fSegmentProvider;
}