diff options
author | Eike Ziller <eike.ziller@digia.com> | 2014-08-15 16:18:52 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2014-08-15 16:19:04 +0200 |
commit | d2f6abca489f0b71fa67b117c4f84a32d051a60f (patch) | |
tree | cd44bec9870e8ee4428105655452127548a90930 | |
parent | 645ee14ce4d275864eab697b15bc67f8bbc24944 (diff) | |
parent | 80d938c6a31be9f45f0ceaa289a5f8c04c8f33dc (diff) |
Merge remote-tracking branch 'origin/3.2'
Change-Id: Ifa2b9350ed68b42a04f589368492d318548dc7e2
-rw-r--r-- | plugins/qmlprofilerextension/memoryusagemodel.cpp | 112 | ||||
-rw-r--r-- | plugins/qmlprofilerextension/memoryusagemodel.h | 9 |
2 files changed, 68 insertions, 53 deletions
diff --git a/plugins/qmlprofilerextension/memoryusagemodel.cpp b/plugins/qmlprofilerextension/memoryusagemodel.cpp index 8bd6ff2741..5085b0bfbe 100644 --- a/plugins/qmlprofilerextension/memoryusagemodel.cpp +++ b/plugins/qmlprofilerextension/memoryusagemodel.cpp @@ -139,45 +139,37 @@ const QVariantList MemoryUsageModel::getLabels() const const QVariantList MemoryUsageModel::getEventDetails(int index) const { Q_D(const MemoryUsageModel); + static QString title = QStringLiteral("title"); + QVariantList result; const MemoryUsageModelPrivate::Range *ev = &d->range(index); - { - QVariantMap res; - if (ev->size > 0) - res.insert(QLatin1String("title"), QVariant(QLatin1String("Memory Allocated"))); - else - res.insert(QLatin1String("title"), QVariant(QLatin1String("Memory Freed"))); + QVariantMap res; + if (ev->allocated >= -ev->deallocated) + res.insert(title, tr("Memory Allocated")); + else + res.insert(title, tr("Memory Freed")); + result << res; + res.clear(); - result << res; - } + res.insert(tr("Total"), QVariant(QString::fromLatin1("%1 bytes").arg(ev->size))); + result << res; + res.clear(); - { - QVariantMap res; - res.insert(tr("Total"), QVariant(QString::fromLatin1("%1 bytes").arg(ev->size))); - result << res; + if (ev->allocations > 0) { + res.insert(tr("Allocated"), QString::fromLatin1("%1 bytes").arg(ev->allocated)); + res.insert(tr("Allocations"), QString::number(ev->allocations)); } - - { - QVariantMap res; - res.insert(tr("Allocation"), QVariant(QString::fromLatin1("%1 bytes").arg(ev->delta))); - result << res; + if (ev->deallocations > 0) { + res.insert(tr("Deallocated"), QString::fromLatin1("%1 bytes").arg(-ev->deallocated)); + res.insert(tr("Deallocations"), QString::number(ev->deallocations)); } - - - { - QVariantMap res; - res.insert(tr("Type"), QVariant(MemoryUsageModelPrivate::memoryTypeName(ev->type))); - result << res; - } - + res.insert(tr("Type"), QVariant(MemoryUsageModelPrivate::memoryTypeName(ev->type))); if (ev->originTypeIndex != -1) { - QVariantMap valuePair; - valuePair.insert(tr("Location"), + res.insert(tr("Location"), d->modelManager->qmlModel()->getEventTypes().at(ev->originTypeIndex).displayName); - result << valuePair; } - + result << res; return result; } @@ -204,9 +196,7 @@ void MemoryUsageModel::loadData() int currentJSHeapIndex = -1; QStack<RangeStackFrame> rangeStack; - MemoryAllocation dummy = { - QmlDebug::MaximumMemoryType, -1, -1 , -1 - }; + MemoryAllocation dummy; const QVector<QmlProfilerDataModel::QmlEventTypeData> &types = simpleModel->getEventTypes(); foreach (const QmlProfilerDataModel::QmlEventData &event, simpleModel->getEvents()) { @@ -222,18 +212,18 @@ void MemoryUsageModel::loadData() } if (type.detailType == QmlDebug::SmallItem || type.detailType == QmlDebug::LargeItem) { - currentUsage += event.numericData1; MemoryAllocation &last = currentUsageIndex > -1 ? d->data(currentUsageIndex) : dummy; - if (!rangeStack.empty() && last.originTypeIndex == rangeStack.top().originTypeIndex) { - last.size = currentUsage; - last.delta += event.numericData1; + if (!rangeStack.empty() && type.detailType == last.type && + last.originTypeIndex == rangeStack.top().originTypeIndex && + rangeStack.top().startTime < d->range(currentUsageIndex).start) { + last.update(event.numericData1); + currentUsage = last.size; } else { - MemoryAllocation allocation = { - QmlDebug::SmallItem, - currentUsage, - event.numericData1, - rangeStack.empty() ? -1 : rangeStack.top().originTypeIndex - }; + MemoryAllocation allocation(QmlDebug::SmallItem, currentUsage, + rangeStack.empty() ? -1 : rangeStack.top().originTypeIndex); + allocation.update(event.numericData1); + currentUsage = allocation.size; + if (currentUsageIndex != -1) { d->insertEnd(currentUsageIndex, event.startTime - d->range(currentUsageIndex).start - 1); @@ -243,18 +233,17 @@ void MemoryUsageModel::loadData() } if (type.detailType == QmlDebug::HeapPage || type.detailType == QmlDebug::LargeItem) { - currentSize += event.numericData1; MemoryAllocation &last = currentJSHeapIndex > -1 ? d->data(currentJSHeapIndex) : dummy; - if (!rangeStack.empty() && last.originTypeIndex == rangeStack.top().originTypeIndex) { - last.size = currentSize; - last.delta += event.numericData1; + if (!rangeStack.empty() && type.detailType == last.type && + last.originTypeIndex == rangeStack.top().originTypeIndex && + rangeStack.top().startTime < d->range(currentJSHeapIndex).start) { + last.update(event.numericData1); + currentSize = last.size; } else { - MemoryAllocation allocation = { - (QmlDebug::MemoryType)type.detailType, - currentSize, - event.numericData1, - rangeStack.empty() ? -1 : rangeStack.top().originTypeIndex - }; + MemoryAllocation allocation((QmlDebug::MemoryType)type.detailType, currentSize, + rangeStack.empty() ? -1 : rangeStack.top().originTypeIndex); + allocation.update(event.numericData1); + currentSize = allocation.size; if (currentSize > d->maxSize) d->maxSize = currentSize; @@ -301,6 +290,25 @@ QString MemoryUsageModel::MemoryUsageModelPrivate::memoryTypeName(int type) } } +MemoryUsageModel::MemoryAllocation::MemoryAllocation(QmlDebug::MemoryType type, qint64 baseAmount, + int originTypeIndex) : + type(type), size(baseAmount), allocated(0), deallocated(0), allocations(0), deallocations(0), + originTypeIndex(originTypeIndex) +{ +} + +void MemoryUsageModel::MemoryAllocation::update(qint64 amount) +{ + size += amount; + if (amount < 0) { + deallocated += amount; + ++deallocations; + } else { + allocated += amount; + ++allocations; + } +} + } // namespace Internal } // namespace QmlProfilerExtension diff --git a/plugins/qmlprofilerextension/memoryusagemodel.h b/plugins/qmlprofilerextension/memoryusagemodel.h index 7559c9c749..e345381250 100644 --- a/plugins/qmlprofilerextension/memoryusagemodel.h +++ b/plugins/qmlprofilerextension/memoryusagemodel.h @@ -37,8 +37,15 @@ public: struct MemoryAllocation { QmlDebug::MemoryType type; qint64 size; - qint64 delta; + qint64 allocated; + qint64 deallocated; + int allocations; + int deallocations; int originTypeIndex; + + MemoryAllocation(QmlDebug::MemoryType type = QmlDebug::MaximumMemoryType, + qint64 baseAmount = 0, int originTypeIndex = -1); + void update(qint64 amount); }; MemoryUsageModel(QObject *parent = 0); |