aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/debugger/qqmlprofilerservice.cpp23
-rw-r--r--src/qml/debugger/qqmlprofilerservice_p.h1
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;