summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@digia.com>2014-07-08 17:32:34 +0200
committerUlf Hermann <ulf.hermann@digia.com>2014-07-09 13:52:13 +0300
commit114c1dbc885abf7dd207d3f77ec3b146e7f3fe28 (patch)
tree56f60f93bf6890ab49b373f29527976557980d6f
parentef51b12f993b88c1ba57f7921e74c36c8a699b3e (diff)
downloadqt-creator-114c1dbc885abf7dd207d3f77ec3b146e7f3fe28.tar.gz
Fix PixmapCacheModel to not get confused on plain LoadingFinished
The indices SortedTimelineModel returns are only valid until you insert something at a different place than the end. If you do that, all later events are shifted by one. We can "fix" that by also shifting the saved indices. Change-Id: I63180dabea0c52db55e799b023b3f2bf84f9e59a Reviewed-by: Kai Koehne <kai.koehne@digia.com>
-rw-r--r--plugins/qmlprofilerextension/pixmapcachemodel.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/plugins/qmlprofilerextension/pixmapcachemodel.cpp b/plugins/qmlprofilerextension/pixmapcachemodel.cpp
index ea297b04bc..f3b8a02761 100644
--- a/plugins/qmlprofilerextension/pixmapcachemodel.cpp
+++ b/plugins/qmlprofilerextension/pixmapcachemodel.cpp
@@ -456,6 +456,21 @@ void PixmapCacheModel::loadData()
if (state.loadState == Initial) {
newEvent.pixmapEventType = PixmapLoadingStarted;
state.started = d->insert(traceStartTime(), startTime - traceStartTime(), newEvent);
+
+ // All other indices are wrong now as we've prepended. Fix them ...
+ if (lastCacheSizeEvent >= state.started)
+ ++lastCacheSizeEvent;
+
+ for (int pixmapIndex = 0; pixmapIndex < d->pixmaps.count(); ++pixmapIndex) {
+ Pixmap &brokenPixmap = d->pixmaps[pixmapIndex];
+ for (int sizeIndex = 0; sizeIndex < brokenPixmap.sizes.count(); ++sizeIndex) {
+ PixmapState &brokenSize = brokenPixmap.sizes[sizeIndex];
+ if ((pixmapIndex != newEvent.urlIndex || sizeIndex != newEvent.sizeIndex) &&
+ brokenSize.started >= state.started) {
+ ++brokenSize.started;
+ }
+ }
+ }
}
d->insertEnd(state.started, startTime - d->range(state.started).start);