diff --git a/src/libs/tracing/timelinemodel.cpp b/src/libs/tracing/timelinemodel.cpp index 0be3d9e84e5..e41aa82941b 100644 --- a/src/libs/tracing/timelinemodel.cpp +++ b/src/libs/tracing/timelinemodel.cpp @@ -444,7 +444,10 @@ int TimelineModel::insert(qint64 startTime, qint64 duration, int selectionId) int index = d->insertStart(TimelineModelPrivate::Range(startTime, duration, selectionId)); if (index < d->ranges.size() - 1) d->incrementStartIndices(index); - d->insertEnd(TimelineModelPrivate::RangeEnd(index, startTime + duration)); + int endIndex = d->insertEnd(TimelineModelPrivate::RangeEnd(index, startTime + duration)); + d->setEndIndex(index, endIndex); + if (endIndex < d->endTimes.size() - 1) + d->incrementEndIndices(endIndex); return index; } @@ -468,7 +471,10 @@ int TimelineModel::insertStart(qint64 startTime, int selectionId) void TimelineModel::insertEnd(int index, qint64 duration) { d->ranges[index].duration = duration; - d->insertEnd(TimelineModelPrivate::RangeEnd(index, d->ranges[index].start + duration)); + int endIndex = d->insertEnd(TimelineModelPrivate::RangeEnd(index, d->ranges[index].start + duration)); + d->setEndIndex(index, endIndex); + if (endIndex < d->endTimes.size() - 1) + d->incrementEndIndices(endIndex); } bool TimelineModel::expanded() const diff --git a/src/libs/tracing/timelinemodel_p.h b/src/libs/tracing/timelinemodel_p.h index 98e7af20fef..88a64e1ab3c 100644 --- a/src/libs/tracing/timelinemodel_p.h +++ b/src/libs/tracing/timelinemodel_p.h @@ -52,13 +52,14 @@ public: }; struct Range { - Range() : start(-1), duration(-1), selectionId(-1), parent(-1) {} + Range() : start(-1), duration(-1), selectionId(-1), parent(-1), endIndex(-1) {} Range(qint64 start, qint64 duration, int selectionId) : - start(start), duration(duration), selectionId(selectionId), parent(-1) {} + start(start), duration(duration), selectionId(selectionId), parent(-1), endIndex(-1) {} qint64 start; qint64 duration; int selectionId; int parent; + int endIndex; inline qint64 timestamp() const {return start;} }; @@ -77,11 +78,21 @@ public: void incrementStartIndices(int index) { - for (RangeEnd &endTime : endTimes) { - if (endTime.startIndex >= index) - ++(endTime.startIndex); + for (index = index + 1; index < ranges.count(); index++) { + if (ranges[index].endIndex >= 0) + endTimes[ranges[index].endIndex].startIndex++; } } + void incrementEndIndices(int index) + { + for (index = index + 1; index < endTimes.count(); index++) + ranges[endTimes[index].startIndex].endIndex++; + } + + inline void setEndIndex(int index, int endIndex) + { + ranges[index].endIndex = endIndex; + } inline int insertStart(const Range &start) {