From bc6893773f1aab6c3255cf7bd169f578645d101b Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Fri, 6 Mar 2015 11:52:08 +0100 Subject: [PATCH] Timeline: Use QHash instead of QVector for child render states The offsets can get very large if you have long traces or zoom in very closely. We hardly ever need more than a few on each level, so this is just a waste of memory. Also, use 64bit integers to index them, as we can get very close to the numerical limit with 32bit ones. Change-Id: I20db4ea5dd2ea8922fa6552c106194bb4f19a76b Task-number: QTCREATORBUG-14105 Reviewed-by: Kai Koehne --- src/libs/timeline/timelinerenderer.cpp | 10 ++++------ src/libs/timeline/timelinerenderer_p.h | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/libs/timeline/timelinerenderer.cpp b/src/libs/timeline/timelinerenderer.cpp index 98fc95bc189..b114e99acda 100644 --- a/src/libs/timeline/timelinerenderer.cpp +++ b/src/libs/timeline/timelinerenderer.cpp @@ -73,9 +73,9 @@ void TimelineRenderer::TimelineRendererPrivate::resetCurrentSelection() TimelineRenderState *TimelineRenderer::TimelineRendererPrivate::findRenderState() { int newLevel = 0; - int newOffset = 0; + qint64 newOffset = 0; int level; - int offset; + qint64 offset; qint64 newStart = zoomer->traceStart(); qint64 newEnd = zoomer->traceEnd(); @@ -97,8 +97,6 @@ TimelineRenderState *TimelineRenderer::TimelineRendererPrivate::findRenderState( if (renderStates.length() <= level) renderStates.resize(level + 1); - if (renderStates[level].length() <= offset) - renderStates[level].resize(offset + 1); TimelineRenderState *state = renderStates[level][offset]; if (state == 0) { state = new TimelineRenderState(start, end, 1.0 / static_cast(SafeFloatMax), @@ -124,8 +122,8 @@ QSGNode *TimelineRenderer::updatePaintNode(QSGNode *node, UpdatePaintNodeData *u if (d->modelDirty) { if (node) node->removeAllChildNodes(); - foreach (QVector stateVector, d->renderStates) - qDeleteAll(stateVector); + for (auto i = d->renderStates.begin(); i != d->renderStates.end(); ++i) + qDeleteAll(*i); d->renderStates.clear(); d->lastState = 0; } diff --git a/src/libs/timeline/timelinerenderer_p.h b/src/libs/timeline/timelinerenderer_p.h index 3d4a2678aa0..807e6822a9b 100644 --- a/src/libs/timeline/timelinerenderer_p.h +++ b/src/libs/timeline/timelinerenderer_p.h @@ -59,7 +59,7 @@ public: int eventIndex; } currentSelection; - QVector > renderStates; + QVector > renderStates; TimelineRenderState *lastState; private: