Source:
<code>protected @Nullable List<ITimeEvent> getEventList(@NonNull TimeGraphEntry tgentry, ITmfStateSystem ss, @NonNull List<List<ITmfStateInterval>> fullStates, @Nullable List<ITmfStateInterval> prevFullState, @NonNull IProgressMonitor monitor) { List<ITimeEvent> eventList = null; if (!(tgentry instanceof ControlFlowEntry)) { return eventList; } ControlFlowEntry entry = (ControlFlowEntry) tgentry; try { int threadQuark = ss.getQuarkAbsolute(Attributes.THREADS, Integer.toString(entry.getThreadId())); int statusQuark = ss.getQuarkRelative(threadQuark, Attributes.STATUS); eventList = new ArrayList<>(fullStates.size()); <START> long lastEndTime = prevFullState == null ? -1 : prevFullState.get(statusQuark).getEndTime() + 1; <END> for (List<ITmfStateInterval> fullState : fullStates) { if (statusQuark >= fullState.size()) { continue; } ITmfStateInterval statusInterval = fullState.get(statusQuark); if (monitor.isCanceled()) { return null; } long time = statusInterval.getStartTime(); long duration = statusInterval.getEndTime() - time + 1; if (time + duration == lastEndTime) { continue; } int status = -1; try { status = statusInterval.getStateValue().unboxInt(); } catch (StateValueTypeException e) { e.printStackTrace(); } if (lastEndTime != time && lastEndTime != -1) { eventList.add(new TimeEvent(entry, lastEndTime, time - lastEndTime)); } if (!statusInterval.getStateValue().isNull()) { eventList.add(new TimeEvent(entry, time, duration, status)); } else { eventList.add(new NullTimeEvent(entry, time, duration)); } lastEndTime = time + duration; } } catch (AttributeNotFoundException | TimeRangeException e) { Activator.getDefault().logError(e.getMessage()); } return eventList; }</code><technical_language>need store lastStartTime: long lastStartTime = prevFullState == null ? -1 : prevFullState.get(statusQuark).getStartTime(); Also, lastEndTime change for attribute while build below..</technical_language>

Target:
protected @Nullable List<ITimeEvent> getEventList(@NonNull TimeGraphEntry tgentry, ITmfStateSystem ss, @NonNull List<List<ITmfStateInterval>> fullStates, @Nullable List<ITmfStateInterval> prevFullState, @NonNull IProgressMonitor monitor) { List<ITimeEvent> eventList = null; if (!(tgentry instanceof ControlFlowEntry)) { return eventList; } ControlFlowEntry entry = (ControlFlowEntry) tgentry; try { int threadQuark = ss.getQuarkAbsolute(Attributes.THREADS, Integer.toString(entry.getThreadId())); int statusQuark = ss.getQuarkRelative(threadQuark, Attributes.STATUS); eventList = new ArrayList<>(fullStates.size()); ITmfStateInterval lastInterval = prevFullState == null ? null : prevFullState.get(statusQuark); long lastStartTime = lastInterval == null ? -1 : lastInterval.getStartTime(); long lastEndTime = lastInterval == null ? -1 : lastInterval.getEndTime() + 1; for (List<ITmfStateInterval> fullState : fullStates) { if (monitor.isCanceled()) { return null; } if (statusQuark >= fullState.size()) { continue; } ITmfStateInterval statusInterval = fullState.get(statusQuark); long time = statusInterval.getStartTime(); if (time == lastStartTime) { continue; } long duration = statusInterval.getEndTime() - time + 1; int status = -1; try { status = statusInterval.getStateValue().unboxInt(); } catch (StateValueTypeException e) { Activator.getDefault().logError(e.getMessage()); } if (lastEndTime != time && lastEndTime != -1) { eventList.add(new TimeEvent(entry, lastEndTime, time - lastEndTime)); } if (!statusInterval.getStateValue().isNull()) { eventList.add(new TimeEvent(entry, time, duration, status)); } else { eventList.add(new NullTimeEvent(entry, time, duration)); } lastStartTime = time; lastEndTime = time + duration; } } catch (AttributeNotFoundException | TimeRangeException e) { Activator.getDefault().logError(e.getMessage()); } return eventList; }