aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsapi/qjsengine.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@theqtcompany.com>2015-11-30 20:05:43 +0100
committerUlf Hermann <ulf.hermann@theqtcompany.com>2015-12-15 17:53:25 +0000
commit57f7fe3e1c92d11bb9e3bf2c87a11e4bc740e255 (patch)
tree1ea2225a00b8d591c58e59a5f530af3bcb55c8d7 /src/qml/jsapi/qjsengine.cpp
parent63dede74a386012f9bd5a6896c3fd6ef6ffa01cd (diff)
Support debugging and profiling for pure QJSEngines
The engines will register themselves with the debug server whenever they are created without a private object. The assumption is that we get the latest possible registration like this. They try to deregister in all dtors, but they check if a different engine has done the same first. Change-Id: Ife7d7532d1de2e4a6ee21d9f7e673fcdfff2387b Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'src/qml/jsapi/qjsengine.cpp')
-rw-r--r--src/qml/jsapi/qjsengine.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/qml/jsapi/qjsengine.cpp b/src/qml/jsapi/qjsengine.cpp
index 5ccbccebad..80dce129c7 100644
--- a/src/qml/jsapi/qjsengine.cpp
+++ b/src/qml/jsapi/qjsengine.cpp
@@ -43,6 +43,7 @@
#include "private/qv4script_p.h"
#include "private/qv4runtime_p.h"
#include <private/qqmlbuiltinfunctions_p.h>
+#include <private/qqmldebugconnector_p.h>
#include <QtCore/qdatetime.h>
#include <QtCore/qmetaobject.h>
@@ -251,6 +252,7 @@ QJSEngine::QJSEngine()
: QObject(*new QJSEnginePrivate, 0)
, d(new QV8Engine(this))
{
+ QJSEnginePrivate::addToDebugServer(this);
}
/*!
@@ -264,6 +266,7 @@ QJSEngine::QJSEngine(QObject *parent)
: QObject(*new QJSEnginePrivate, parent)
, d(new QV8Engine(this))
{
+ QJSEnginePrivate::addToDebugServer(this);
}
/*!
@@ -284,6 +287,7 @@ QJSEngine::QJSEngine(QJSEnginePrivate &dd, QObject *parent)
*/
QJSEngine::~QJSEngine()
{
+ QJSEnginePrivate::removeFromDebugServer(this);
delete d;
}
@@ -671,6 +675,26 @@ QJSEnginePrivate::~QJSEnginePrivate()
(*iter)->release();
}
+void QJSEnginePrivate::addToDebugServer(QJSEngine *q)
+{
+ if (QCoreApplication::instance()->thread() != q->thread())
+ return;
+
+ QQmlDebugConnector *server = QQmlDebugConnector::instance();
+ if (!server || server->hasEngine(q))
+ return;
+
+ server->open();
+ server->addEngine(q);
+}
+
+void QJSEnginePrivate::removeFromDebugServer(QJSEngine *q)
+{
+ QQmlDebugConnector *server = QQmlDebugConnector::instance();
+ if (server && server->hasEngine(q))
+ server->removeEngine(q);
+}
+
QQmlPropertyCache *QJSEnginePrivate::createCache(const QMetaObject *mo)
{
if (!mo->superClass()) {