diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-11-10 14:08:11 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-11-17 18:42:17 +0000 |
commit | 5b091eb79b6853d0fde34b5dea89a84b7514a5ff (patch) | |
tree | 028ffc059c85a6a7f304e2b0f43f69aa01ae2701 /src/plugins/qmltooling/qmldbg_profiler | |
parent | d3c3f026d376f5d9663cf4258162bc504afc1b28 (diff) |
Use QJSEngine instead of QQmlEngine in debug services
This allows us to use the debug infrastructure in a JavaScript-only
environment. Also add override declarations to make such changes
easier in the future.
Change-Id: I171271f0ad3868b3de71a8a2316a24602f94200a
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Diffstat (limited to 'src/plugins/qmltooling/qmldbg_profiler')
5 files changed, 60 insertions, 58 deletions
diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp b/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp index 61bf61eb13..2f7a7075ef 100644 --- a/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp +++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp @@ -33,7 +33,7 @@ #include "qqmlenginecontrolservice.h" #include "qqmldebugpacket.h" -#include <QQmlEngine> +#include <QJSEngine> QT_BEGIN_NAMESPACE @@ -49,7 +49,7 @@ void QQmlEngineControlServiceImpl::messageReceived(const QByteArray &message) int command; int engineId; d >> command >> engineId; - QQmlEngine *engine = qobject_cast<QQmlEngine *>(objectForId(engineId)); + QJSEngine *engine = qobject_cast<QJSEngine *>(objectForId(engineId)); if (command == StartWaitingEngine && startingEngines.contains(engine)) { startingEngines.removeOne(engine); emit attachedToEngine(engine); @@ -59,7 +59,7 @@ void QQmlEngineControlServiceImpl::messageReceived(const QByteArray &message) } } -void QQmlEngineControlServiceImpl::engineAboutToBeAdded(QQmlEngine *engine) +void QQmlEngineControlServiceImpl::engineAboutToBeAdded(QJSEngine *engine) { QMutexLocker lock(&dataMutex); if (state() == Enabled) { @@ -72,7 +72,7 @@ void QQmlEngineControlServiceImpl::engineAboutToBeAdded(QQmlEngine *engine) } } -void QQmlEngineControlServiceImpl::engineAboutToBeRemoved(QQmlEngine *engine) +void QQmlEngineControlServiceImpl::engineAboutToBeRemoved(QJSEngine *engine) { QMutexLocker lock(&dataMutex); if (state() == Enabled) { @@ -85,7 +85,7 @@ void QQmlEngineControlServiceImpl::engineAboutToBeRemoved(QQmlEngine *engine) } } -void QQmlEngineControlServiceImpl::engineAdded(QQmlEngine *engine) +void QQmlEngineControlServiceImpl::engineAdded(QJSEngine *engine) { if (state() == Enabled) { QMutexLocker lock(&dataMutex); @@ -95,7 +95,7 @@ void QQmlEngineControlServiceImpl::engineAdded(QQmlEngine *engine) } } -void QQmlEngineControlServiceImpl::engineRemoved(QQmlEngine *engine) +void QQmlEngineControlServiceImpl::engineRemoved(QJSEngine *engine) { if (state() == Enabled) { QMutexLocker lock(&dataMutex); @@ -105,7 +105,7 @@ void QQmlEngineControlServiceImpl::engineRemoved(QQmlEngine *engine) } } -void QQmlEngineControlServiceImpl::sendMessage(QQmlEngineControlServiceImpl::MessageType type, QQmlEngine *engine) +void QQmlEngineControlServiceImpl::sendMessage(QQmlEngineControlServiceImpl::MessageType type, QJSEngine *engine) { QQmlDebugPacket d; d << type << idForObject(engine); @@ -116,10 +116,10 @@ void QQmlEngineControlServiceImpl::stateChanged(State) { // We flush everything for any kind of state change, to avoid complicated timing issues. QMutexLocker lock(&dataMutex); - foreach (QQmlEngine *engine, startingEngines) + foreach (QJSEngine *engine, startingEngines) emit attachedToEngine(engine); startingEngines.clear(); - foreach (QQmlEngine *engine, stoppingEngines) + foreach (QJSEngine *engine, stoppingEngines) emit detachedFromEngine(engine); stoppingEngines.clear(); } diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.h b/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.h index 8dbc922a6f..028852e964 100644 --- a/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.h +++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.h @@ -71,18 +71,18 @@ protected: friend class QQmlProfilerServiceFactory; QMutex dataMutex; - QList<QQmlEngine *> startingEngines; - QList<QQmlEngine *> stoppingEngines; + QList<QJSEngine *> startingEngines; + QList<QJSEngine *> stoppingEngines; - void messageReceived(const QByteArray &); - void engineAboutToBeAdded(QQmlEngine *); - void engineAboutToBeRemoved(QQmlEngine *); - void engineAdded(QQmlEngine *); - void engineRemoved(QQmlEngine *); + void messageReceived(const QByteArray &) Q_DECL_OVERRIDE; + void engineAboutToBeAdded(QJSEngine *) Q_DECL_OVERRIDE; + void engineAboutToBeRemoved(QJSEngine *) Q_DECL_OVERRIDE; + void engineAdded(QJSEngine *) Q_DECL_OVERRIDE; + void engineRemoved(QJSEngine *) Q_DECL_OVERRIDE; - void sendMessage(MessageType type, QQmlEngine *engine); + void sendMessage(MessageType type, QJSEngine *engine); - void stateChanged(State); + void stateChanged(State) Q_DECL_OVERRIDE; }; QT_END_NAMESPACE diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofileradapter.h b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofileradapter.h index eceb58ce3a..b15c2febda 100644 --- a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofileradapter.h +++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofileradapter.h @@ -54,7 +54,7 @@ class QQmlProfilerAdapter : public QQmlAbstractProfilerAdapter { Q_OBJECT public: QQmlProfilerAdapter(QQmlProfilerService *service, QQmlEnginePrivate *engine); - qint64 sendMessages(qint64 until, QList<QByteArray> &messages); + qint64 sendMessages(qint64 until, QList<QByteArray> &messages) Q_DECL_OVERRIDE; public slots: void receiveData(const QVector<QQmlProfilerData> &new_data); diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp index 3647a62682..e05717f8eb 100644 --- a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp +++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp @@ -37,7 +37,7 @@ #include "qqmlprofilerservicefactory.h" #include "qqmldebugpacket.h" -#include <private/qqmlengine_p.h> +#include <private/qjsengine_p.h> #include <private/qqmldebugpluginmanager_p.h> #include <QtCore/qurl.h> @@ -86,8 +86,8 @@ void QQmlProfilerServiceImpl::dataReady(QQmlAbstractProfilerAdapter *profiler) } m_startTimes.insert(0, profiler); if (dataComplete) { - QList<QQmlEngine *> enginesToRelease; - foreach (QQmlEngine *engine, m_stoppingEngines) { + QList<QJSEngine *> enginesToRelease; + foreach (QJSEngine *engine, m_stoppingEngines) { foreach (QQmlAbstractProfilerAdapter *engineProfiler, m_engineProfilers.values(engine)) { if (m_startTimes.values().contains(engineProfiler)) { enginesToRelease.append(engine); @@ -96,27 +96,30 @@ void QQmlProfilerServiceImpl::dataReady(QQmlAbstractProfilerAdapter *profiler) } } sendMessages(); - foreach (QQmlEngine *engine, enginesToRelease) { + foreach (QJSEngine *engine, enginesToRelease) { m_stoppingEngines.removeOne(engine); emit detachedFromEngine(engine); } } } -void QQmlProfilerServiceImpl::engineAboutToBeAdded(QQmlEngine *engine) +void QQmlProfilerServiceImpl::engineAboutToBeAdded(QJSEngine *engine) { Q_ASSERT_X(QThread::currentThread() == engine->thread(), Q_FUNC_INFO, "QML profilers have to be added from the engine thread"); QMutexLocker lock(&m_configMutex); - QQmlProfilerAdapter *qmlAdapter = new QQmlProfilerAdapter(this, QQmlEnginePrivate::get(engine)); + if (QQmlEngine *qmlEngine = qobject_cast<QQmlEngine *>(engine)) { + QQmlProfilerAdapter *qmlAdapter = + new QQmlProfilerAdapter(this, QQmlEnginePrivate::get(qmlEngine)); + addEngineProfiler(qmlAdapter, engine); + } QV4ProfilerAdapter *v4Adapter = new QV4ProfilerAdapter(this, QV8Engine::getV4(engine->handle())); - addEngineProfiler(qmlAdapter, engine); addEngineProfiler(v4Adapter, engine); QQmlConfigurableDebugService<QQmlProfilerService>::engineAboutToBeAdded(engine); } -void QQmlProfilerServiceImpl::engineAdded(QQmlEngine *engine) +void QQmlProfilerServiceImpl::engineAdded(QJSEngine *engine) { Q_ASSERT_X(QThread::currentThread() == engine->thread(), Q_FUNC_INFO, "QML profilers have to be added from the engine thread"); @@ -126,7 +129,7 @@ void QQmlProfilerServiceImpl::engineAdded(QQmlEngine *engine) profiler->stopWaiting(); } -void QQmlProfilerServiceImpl::engineAboutToBeRemoved(QQmlEngine *engine) +void QQmlProfilerServiceImpl::engineAboutToBeRemoved(QJSEngine *engine) { Q_ASSERT_X(QThread::currentThread() == engine->thread(), Q_FUNC_INFO, "QML profilers have to be removed from the engine thread"); @@ -146,7 +149,7 @@ void QQmlProfilerServiceImpl::engineAboutToBeRemoved(QQmlEngine *engine) } } -void QQmlProfilerServiceImpl::engineRemoved(QQmlEngine *engine) +void QQmlProfilerServiceImpl::engineRemoved(QJSEngine *engine) { Q_ASSERT_X(QThread::currentThread() == engine->thread(), Q_FUNC_INFO, "QML profilers have to be removed from the engine thread"); @@ -159,7 +162,7 @@ void QQmlProfilerServiceImpl::engineRemoved(QQmlEngine *engine) m_engineProfilers.remove(engine); } -void QQmlProfilerServiceImpl::addEngineProfiler(QQmlAbstractProfilerAdapter *profiler, QQmlEngine *engine) +void QQmlProfilerServiceImpl::addEngineProfiler(QQmlAbstractProfilerAdapter *profiler, QJSEngine *engine) { profiler->moveToThread(thread()); profiler->synchronize(m_timer); @@ -208,7 +211,7 @@ void QQmlProfilerServiceImpl::removeProfilerFromStartTimes(const QQmlAbstractPro * * If any engine profiler is started like that also start all global profilers. */ -void QQmlProfilerServiceImpl::startProfiling(QQmlEngine *engine, quint64 features) +void QQmlProfilerServiceImpl::startProfiling(QJSEngine *engine, quint64 features) { QMutexLocker lock(&m_configMutex); @@ -226,8 +229,8 @@ void QQmlProfilerServiceImpl::startProfiling(QQmlEngine *engine, quint64 feature if (startedAny) d << idForObject(engine); } else { - QSet<QQmlEngine *> engines; - for (QMultiHash<QQmlEngine *, QQmlAbstractProfilerAdapter *>::iterator i(m_engineProfilers.begin()); + QSet<QJSEngine *> engines; + for (QMultiHash<QJSEngine *, QQmlAbstractProfilerAdapter *>::iterator i(m_engineProfilers.begin()); i != m_engineProfilers.end(); ++i) { if (!i.value()->isRunning()) { engines << i.key(); @@ -235,7 +238,7 @@ void QQmlProfilerServiceImpl::startProfiling(QQmlEngine *engine, quint64 feature startedAny = true; } } - foreach (QQmlEngine *profiledEngine, engines) + foreach (QJSEngine *profiledEngine, engines) d << idForObject(profiledEngine); } @@ -258,14 +261,14 @@ void QQmlProfilerServiceImpl::startProfiling(QQmlEngine *engine, quint64 feature * If afterwards no more engine profilers are running, also stop all global profilers. Otherwise * only make them report their data. */ -void QQmlProfilerServiceImpl::stopProfiling(QQmlEngine *engine) +void QQmlProfilerServiceImpl::stopProfiling(QJSEngine *engine) { QMutexLocker lock(&m_configMutex); QList<QQmlAbstractProfilerAdapter *> stopping; QList<QQmlAbstractProfilerAdapter *> reporting; bool stillRunning = false; - for (QMultiHash<QQmlEngine *, QQmlAbstractProfilerAdapter *>::iterator i(m_engineProfilers.begin()); + for (QMultiHash<QJSEngine *, QQmlAbstractProfilerAdapter *>::iterator i(m_engineProfilers.begin()); i != m_engineProfilers.end(); ++i) { if (i.value()->isRunning()) { if (engine == 0 || i.key() == engine) { @@ -312,9 +315,9 @@ void QQmlProfilerServiceImpl::sendMessages() if (m_waitingForStop) { traceEnd << m_timer.nsecsElapsed() << (int)Event << (int)EndTrace; - QSet<QQmlEngine *> seen; + QSet<QJSEngine *> seen; foreach (QQmlAbstractProfilerAdapter *profiler, m_startTimes) { - for (QMultiHash<QQmlEngine *, QQmlAbstractProfilerAdapter *>::iterator i(m_engineProfilers.begin()); + for (QMultiHash<QJSEngine *, QQmlAbstractProfilerAdapter *>::iterator i(m_engineProfilers.begin()); i != m_engineProfilers.end(); ++i) { if (i.value() == profiler && !seen.contains(i.key())) { seen << i.key(); @@ -366,7 +369,7 @@ void QQmlProfilerServiceImpl::stateAboutToBeChanged(QQmlDebugService::State newS // Stop all profiling and send the data before we get disabled. if (newState != Enabled) { - foreach (QQmlEngine *engine, m_engineProfilers.keys()) + foreach (QJSEngine *engine, m_engineProfilers.keys()) stopProfiling(engine); } } @@ -402,9 +405,9 @@ void QQmlProfilerServiceImpl::messageReceived(const QByteArray &message) // If engineId == -1 objectForId() and then the cast will return 0. if (enabled) - startProfiling(qobject_cast<QQmlEngine *>(objectForId(engineId)), features); + startProfiling(qobject_cast<QJSEngine *>(objectForId(engineId)), features); else - stopProfiling(qobject_cast<QQmlEngine *>(objectForId(engineId))); + stopProfiling(qobject_cast<QJSEngine *>(objectForId(engineId))); stopWaiting(); } diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.h b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.h index 9b139ffabb..299d170339 100644 --- a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.h +++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.h @@ -64,8 +64,6 @@ QT_BEGIN_NAMESPACE class QUrl; -class QQmlEngine; - class QQmlProfilerServiceImpl : public QQmlConfigurableDebugService<QQmlProfilerService>, @@ -74,21 +72,22 @@ class QQmlProfilerServiceImpl : Q_OBJECT public: - void engineAboutToBeAdded(QQmlEngine *engine); - void engineAboutToBeRemoved(QQmlEngine *engine); - void engineAdded(QQmlEngine *engine); - void engineRemoved(QQmlEngine *engine); + void engineAboutToBeAdded(QJSEngine *engine) Q_DECL_OVERRIDE; + void engineAboutToBeRemoved(QJSEngine *engine) Q_DECL_OVERRIDE; + void engineAdded(QJSEngine *engine) Q_DECL_OVERRIDE; + void engineRemoved(QJSEngine *engine) Q_DECL_OVERRIDE; - void addGlobalProfiler(QQmlAbstractProfilerAdapter *profiler); - void removeGlobalProfiler(QQmlAbstractProfilerAdapter *profiler); + void addGlobalProfiler(QQmlAbstractProfilerAdapter *profiler) Q_DECL_OVERRIDE; + void removeGlobalProfiler(QQmlAbstractProfilerAdapter *profiler) Q_DECL_OVERRIDE; - void startProfiling(QQmlEngine *engine, quint64 features = std::numeric_limits<quint64>::max()); - void stopProfiling(QQmlEngine *engine); + void startProfiling(QJSEngine *engine, + quint64 features = std::numeric_limits<quint64>::max()) Q_DECL_OVERRIDE; + void stopProfiling(QJSEngine *engine) Q_DECL_OVERRIDE; QQmlProfilerServiceImpl(QObject *parent = 0); - ~QQmlProfilerServiceImpl(); + ~QQmlProfilerServiceImpl() Q_DECL_OVERRIDE; - void dataReady(QQmlAbstractProfilerAdapter *profiler); + void dataReady(QQmlAbstractProfilerAdapter *profiler) Q_DECL_OVERRIDE; signals: void startFlushTimer(); @@ -98,14 +97,14 @@ private slots: void flush(); protected: - virtual void stateAboutToBeChanged(State state); - virtual void messageReceived(const QByteArray &); + virtual void stateAboutToBeChanged(State state) Q_DECL_OVERRIDE; + virtual void messageReceived(const QByteArray &) Q_DECL_OVERRIDE; private: friend class QQmlProfilerServiceFactory; void sendMessages(); - void addEngineProfiler(QQmlAbstractProfilerAdapter *profiler, QQmlEngine *engine); + void addEngineProfiler(QQmlAbstractProfilerAdapter *profiler, QJSEngine *engine); void removeProfilerFromStartTimes(const QQmlAbstractProfilerAdapter *profiler); QElapsedTimer m_timer; @@ -113,8 +112,8 @@ private: bool m_waitingForStop; QList<QQmlAbstractProfilerAdapter *> m_globalProfilers; - QMultiHash<QQmlEngine *, QQmlAbstractProfilerAdapter *> m_engineProfilers; - QList<QQmlEngine *> m_stoppingEngines; + QMultiHash<QJSEngine *, QQmlAbstractProfilerAdapter *> m_engineProfilers; + QList<QJSEngine *> m_stoppingEngines; QMultiMap<qint64, QQmlAbstractProfilerAdapter *> m_startTimes; }; |