Source:
protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException { try (FlowScopeLog scope = new FlowScopeLogBuilder(LOCAL_LOGGER, Level.FINE, "AbstractTimeGraphDataProvider#fetchRowModel") .setCategory(getClass().getSimpleName()).build()) { TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(), Comparator.comparing(ITmfStateInterval::getStartTime)); Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime()); Set<Integer> quarks = new HashSet<>(); for (Integer quark : getSelectedQuarks(filter)) { quarks.addAll(ss.getSubAttributes(quark, true)); } for (ITmfStateInterval interval : ss.query2D(quarks, times)) { if (monitor != null && monitor.isCanceled()) { return Collections.emptyList(); } if (interval.getValue() instanceof Integer) { int attribute = interval.getAttribute(); intervals.put(attribute, interval); } } if (monitor != null && monitor.isCanceled()) { return Collections.emptyList(); } List<ITimeGraphState> markerList = new ArrayList<>(); for (Entry<Integer, Collection<ITmfStateInterval>> intervalEntry : intervals.asMap().entrySet()) { String[] attribs = ss.getFullAttributePathArray(intervalEntry.getKey()); for (ITmfStateInterval interval : intervalEntry.getValue()) { long startTime = interval.getStartTime(); long duration = interval.getEndTime() - startTime + 1; markerList.add(new MarkerModel(startTime, duration, attribs)); } } return Collections.singletonList(new TimeGraphRowModel(getId(ITmfStateSystem.ROOT_ATTRIBUTE), markerList)); } catch (StateSystemDisposedException | TimeRangeException | IndexOutOfBoundsException e) { return Collections.emptyList(); } }

Target:
protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException { try (ScopeLog scope = new ScopeLog(LOCAL_LOGGER, Level.FINE, "AbstractTimeGraphDataProvider#fetchRowModel", getClass().getSimpleName())) { Set<ITmfStateInterval> intervals = new HashSet<>(); Map<Integer, String[]> paths = new HashMap<>(); Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime()); Set<Integer> quarks = new HashSet<>(); for (Integer quark : getSelectedQuarks(filter)) { quarks.addAll(ss.getSubAttributes(quark, true)); } for (Integer quark : quarks) { paths.put(quark, ss.getFullAttributePathArray(quark)); } for (ITmfStateInterval interval : ss.query2D(quarks, times)) { if (monitor != null && monitor.isCanceled()) { return Collections.emptyList(); } if (interval.getValue() instanceof Integer) { intervals.add(interval); } } if (monitor != null && monitor.isCanceled()) { return Collections.emptyList(); } List<ITimeGraphState> markerList = new ArrayList<>(); for (ITmfStateInterval interval : intervals) { long startTime = interval.getStartTime(); long duration = interval.getEndTime() - startTime + 1; markerList.add(new MarkerModel(startTime, duration, paths.get(interval.getAttribute()))); } return Collections.singletonList(new TimeGraphRowModel(getId(ITmfStateSystem.ROOT_ATTRIBUTE), markerList)); } }