Source:
<code>protected void zoomEntries(@NonNull Iterable<ITimeGraphEntry> entries, long zoomStartTime, long zoomEndTime, long resolution, @NonNull IProgressMonitor monitor) { boolean isZoomThread = Thread.currentThread() instanceof ZoomThreadVisible; Table<ITmfStateSystem, Integer, ControlFlowEntry> table = filterGroupEntries(entries, zoomStartTime, zoomEndTime); TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(), Comparator.comparingLong(ITmfStateInterval::getStartTime)); for (Entry<ITmfStateSystem, Map<Integer, ControlFlowEntry>> ssEntries : table.rowMap().entrySet()) { ITmfStateSystem ss = ssEntries.getKey(); long start = Long.max(zoomStartTime, ss.getStartTime()); long end = Long.min(zoomEndTime, ss.getCurrentEndTime()); if (start > end) { continue; } List<Long> times = StateSystemUtils.getTimes(start, end, resolution); Map<Integer, ControlFlowEntry> quarksToEntries = ssEntries.getValue(); try { <START> for (ITmfStateInterval interval : ss.query2D(quarksToEntries.keySet(), times)) { <END> if (monitor.isCanceled()) { return; } intervals.put(interval.getAttribute(), interval); } for (Entry<Integer, Collection<ITmfStateInterval>> e : intervals.asMap().entrySet()) { if (monitor.isCanceled()) { return; } addTimeEvents(quarksToEntries.get(e.getKey()), e.getValue(), isZoomThread); } } catch (TimeRangeException e) { Activator.getDefault().logError("CFV: incorrect query times for zoomEvent", e); } catch (StateSystemDisposedException e) { } finally { intervals.clear(); } } }</code><technical_language>While state system is built, this query2D zoom thread miss some events. case I consistently reproducing, missing interval is in middle of query. gap is filled a transparent event, this incomplete zoomed list is longer updated subsequent zoom threads (until window range is changed)</technical_language>

Target:
protected void zoomEntries(@NonNull Iterable<ITimeGraphEntry> entries, long zoomStartTime, long zoomEndTime, long resolution, @NonNull IProgressMonitor monitor) { boolean isZoomThread = Thread.currentThread() instanceof ZoomThreadVisible; Table<ITmfStateSystem, Integer, ControlFlowEntry> table = filterGroupEntries(entries, zoomStartTime, zoomEndTime); TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(), Comparator.comparingLong(ITmfStateInterval::getStartTime)); for (Entry<ITmfStateSystem, Map<Integer, ControlFlowEntry>> ssEntries : table.rowMap().entrySet()) { ITmfStateSystem ss = ssEntries.getKey(); long start = Long.max(zoomStartTime, ss.getStartTime()); long end = Long.min(zoomEndTime, ss.getCurrentEndTime()); if (start > end) { continue; } Sampling clampedSampling = new Sampling(start, end, resolution); List<Long> times = StateSystemUtils.getTimes(start, end, resolution); Map<Integer, ControlFlowEntry> quarksToEntries = ssEntries.getValue(); try { for (ITmfStateInterval interval : ss.query2D(quarksToEntries.keySet(), times)) { if (monitor.isCanceled()) { return; } intervals.put(interval.getAttribute(), interval); } for (Entry<Integer, Collection<ITmfStateInterval>> e : intervals.asMap().entrySet()) { ControlFlowEntry controlFlowEntry = quarksToEntries.get(e.getKey()); if(controlFlowEntry == null) { return; } List<ITimeEvent> events = createTimeEvents(controlFlowEntry, e.getValue()); if (monitor.isCanceled()) { return; } if (isZoomThread) { applyResults(() -> { controlFlowEntry.setZoomedEventList(events); controlFlowEntry.setSampling(clampedSampling); }); } else { controlFlowEntry.setEventList(events); } } } catch (TimeRangeException e) { Activator.getDefault().logError("CFV: incorrect query times for zoomEvent", e); } catch (StateSystemDisposedException e) { } finally { intervals.clear(); } } }