From 2ffd1a4f6baee12724de390606f6ea4ffd319def Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 27 Mar 2018 11:04:42 +0200 Subject: QML Tooling: Remember global "enabled" flag in profiler service If profiling has been enabled for all engines, that now also holds for engines to be registered in the future. This way the client doesn't need to employ the EngineControl service just to figure out when the first engine registers. Change-Id: I44a441bb6ead25abdadac1ae3e4edf9b0a9659f5 Reviewed-by: Simon Hausmann --- .../qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp | 12 +++++++++++- src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.h | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp index eb6fbce101..e391abab1e 100644 --- a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp +++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp @@ -59,7 +59,7 @@ Q_QML_DEBUG_PLUGIN_LOADER(QQmlAbstractProfilerAdapter) QQmlProfilerServiceImpl::QQmlProfilerServiceImpl(QObject *parent) : QQmlConfigurableDebugService(1, parent), - m_waitingForStop(false), m_useMessageTypes(false) + m_waitingForStop(false), m_useMessageTypes(false), m_globalEnabled(false), m_globalFeatures(0) { m_timer.start(); QQmlAbstractProfilerAdapter *quickAdapter = @@ -137,6 +137,10 @@ void QQmlProfilerServiceImpl::engineAdded(QJSEngine *engine) "QML profilers have to be added from the engine thread"); QMutexLocker lock(&m_configMutex); + + if (m_globalEnabled) + startProfiling(engine, m_globalFeatures); + const auto range = qAsConst(m_engineProfilers).equal_range(engine); for (auto it = range.first; it != range.second; ++it) (*it)->stopWaiting(); @@ -254,6 +258,9 @@ void QQmlProfilerServiceImpl::startProfiling(QJSEngine *engine, quint64 features if (startedAny) d << idForObject(engine); } else { + m_globalEnabled = true; + m_globalFeatures = features; + QSet engines; for (QMultiHash::iterator i(m_engineProfilers.begin()); i != m_engineProfilers.end(); ++i) { @@ -292,6 +299,9 @@ void QQmlProfilerServiceImpl::stopProfiling(QJSEngine *engine) QList stopping; QList reporting; + if (engine == nullptr) + m_globalEnabled = false; + bool stillRunning = false; for (QMultiHash::iterator i(m_engineProfilers.begin()); i != m_engineProfilers.end(); ++i) { diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.h b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.h index a5e060a1ab..a8c3047421 100644 --- a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.h +++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.h @@ -116,6 +116,9 @@ private: bool m_waitingForStop; bool m_useMessageTypes; + bool m_globalEnabled; + quint64 m_globalFeatures; + QList m_globalProfilers; QMultiHash m_engineProfilers; QList m_stoppingEngines; -- cgit v1.2.3