diff options
-rw-r--r-- | src/qml/debugger/qqmlprofilerservice.cpp | 23 | ||||
-rw-r--r-- | src/qml/debugger/qqmlprofilerservice_p.h | 1 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/qml/debugger/qqmlprofilerservice.cpp b/src/qml/debugger/qqmlprofilerservice.cpp index 5500b8f22c..fa34fb7898 100644 --- a/src/qml/debugger/qqmlprofilerservice.cpp +++ b/src/qml/debugger/qqmlprofilerservice.cpp @@ -157,8 +157,10 @@ void QQmlProfilerService::engineRemoved(QQmlEngine *engine) Q_ASSERT_X(QThread::currentThread() != thread(), Q_FUNC_INFO, "QML profilers have to be removed from the engine thread"); QMutexLocker lock(configMutex()); - foreach (QQmlAbstractProfilerAdapter *profiler, m_engineProfilers.values(engine)) + foreach (QQmlAbstractProfilerAdapter *profiler, m_engineProfilers.values(engine)) { + removeProfilerFromStartTimes(profiler); delete profiler; + } m_engineProfilers.remove(engine); } @@ -188,14 +190,22 @@ void QQmlProfilerService::addGlobalProfiler(QQmlAbstractProfilerAdapter *profile void QQmlProfilerService::removeGlobalProfiler(QQmlAbstractProfilerAdapter *profiler) { QMutexLocker lock(configMutex()); - for (QMultiMap<qint64, QQmlAbstractProfilerAdapter *>::iterator i(m_startTimes.begin()); i != m_startTimes.end();) { - if (i.value() == profiler) + removeProfilerFromStartTimes(profiler); + m_globalProfilers.removeOne(profiler); + delete profiler; +} + +void QQmlProfilerService::removeProfilerFromStartTimes(const QQmlAbstractProfilerAdapter *profiler) +{ + for (QMultiMap<qint64, QQmlAbstractProfilerAdapter *>::iterator i(m_startTimes.begin()); + i != m_startTimes.end();) { + if (i.value() == profiler) { m_startTimes.erase(i++); - else + break; + } else { ++i; + } } - m_globalProfilers.removeOne(profiler); - delete profiler; } void QQmlProfilerService::startProfiling(QQmlEngine *engine) @@ -223,7 +233,6 @@ void QQmlProfilerService::stopProfiling(QQmlEngine *engine) QMutexLocker lock(configMutex()); bool stillRunning = false; - m_startTimes.clear(); for (QMultiHash<QQmlEngine *, QQmlAbstractProfilerAdapter *>::iterator i(m_engineProfilers.begin()); i != m_engineProfilers.end(); ++i) { if (i.value()->isRunning()) { diff --git a/src/qml/debugger/qqmlprofilerservice_p.h b/src/qml/debugger/qqmlprofilerservice_p.h index 9e05424ce1..f278e139de 100644 --- a/src/qml/debugger/qqmlprofilerservice_p.h +++ b/src/qml/debugger/qqmlprofilerservice_p.h @@ -102,6 +102,7 @@ private: void sendMessages(); void addEngineProfiler(QQmlAbstractProfilerAdapter *profiler, QQmlEngine *engine); + void removeProfilerFromStartTimes(const QQmlAbstractProfilerAdapter *profiler); QElapsedTimer m_timer; |