From cac6c2d474ae1bf42de3e8138cda71c9e5391437 Mon Sep 17 00:00:00 2001 From: Aurindam Jana Date: Thu, 15 Dec 2011 17:52:22 +0100 Subject: DeclarativeDebug: Add version info to service plugins Send the version info of each plugin alongwith the plugin names to client. Change-Id: I223689b32cdc5b0c48a4f508330033352b427937 Reviewed-by: Kai Koehne --- .../debugger/qdeclarativedebugclient.cpp | 45 ++++++++++++++++++++-- .../debugger/qdeclarativedebugclient_p.h | 2 +- .../debugger/qdeclarativedebugserver.cpp | 21 ++++++++-- .../debugger/qdeclarativedebugservice.cpp | 12 +++++- .../debugger/qdeclarativedebugservice_p.h | 5 ++- .../debugger/qdeclarativedebugservice_p_p.h | 1 + .../debugger/qdeclarativedebugtrace.cpp | 2 +- .../debugger/qdeclarativeenginedebugservice.cpp | 2 +- .../debugger/qdeclarativeinspectorservice.cpp | 2 +- src/declarative/debugger/qv8debugservice.cpp | 12 +----- src/declarative/debugger/qv8profilerservice.cpp | 2 +- .../tst_qdeclarativedebugclient.cpp | 4 +- .../tst_qdeclarativedebugjs.cpp | 21 ---------- .../tst_qdeclarativedebugservice.cpp | 11 +++++- .../auto/declarative/debugger/shared/debugutil.cpp | 4 +- .../auto/declarative/debugger/shared/debugutil_p.h | 2 +- 16 files changed, 95 insertions(+), 53 deletions(-) diff --git a/src/declarative/debugger/qdeclarativedebugclient.cpp b/src/declarative/debugger/qdeclarativedebugclient.cpp index 5018e9535e..9d5b88c319 100644 --- a/src/declarative/debugger/qdeclarativedebugclient.cpp +++ b/src/declarative/debugger/qdeclarativedebugclient.cpp @@ -75,7 +75,7 @@ public: QIODevice *device; bool gotHello; - QStringList serverPlugins; + QHash serverPlugins; QHash plugins; void advertisePlugins(); @@ -130,7 +130,21 @@ void QDeclarativeDebugConnectionPrivate::readyRead() int version = -1; pack >> version; if (version == protocolVersion) { - pack >> serverPlugins; + QStringList pluginNames; + QList pluginVersions; + pack >> pluginNames; + if (!pack.isEmpty()) + pack >> pluginVersions; + + const int pluginNamesSize = pluginNames.size(); + const int pluginVersionsSize = pluginVersions.size(); + for (int i = 0; i < pluginNamesSize; ++i) { + float pluginVersion = 1.0; + if (i < pluginVersionsSize) + pluginVersion = pluginVersions.at(i); + serverPlugins.insert(pluginNames.at(i), pluginVersion); + } + validHello = true; } } @@ -163,8 +177,23 @@ void QDeclarativeDebugConnectionPrivate::readyRead() if (op == 1) { // Service Discovery - QStringList oldServerPlugins = serverPlugins; - pack >> serverPlugins; + QHash oldServerPlugins = serverPlugins; + serverPlugins.clear(); + + QStringList pluginNames; + QList pluginVersions; + pack >> pluginNames; + if (!pack.isEmpty()) + pack >> pluginVersions; + + const int pluginNamesSize = pluginNames.size(); + const int pluginVersionsSize = pluginVersions.size(); + for (int i = 0; i < pluginNamesSize; ++i) { + float pluginVersion = 1.0; + if (i < pluginVersionsSize) + pluginVersion = pluginVersions.at(i); + serverPlugins.insert(pluginNames.at(i), pluginVersion); + } QHash::Iterator iter = plugins.begin(); for (; iter != plugins.end(); ++iter) { @@ -345,6 +374,14 @@ QString QDeclarativeDebugClient::name() const return d->name; } +float QDeclarativeDebugClient::serviceVersion() const +{ + Q_D(const QDeclarativeDebugClient); + if (d->connection->d->serverPlugins.contains(d->name)) + return d->connection->d->serverPlugins.value(d->name); + return -1; +} + QDeclarativeDebugClient::Status QDeclarativeDebugClient::status() const { Q_D(const QDeclarativeDebugClient); diff --git a/src/declarative/debugger/qdeclarativedebugclient_p.h b/src/declarative/debugger/qdeclarativedebugclient_p.h index 5b219358ff..7b9a342627 100644 --- a/src/declarative/debugger/qdeclarativedebugclient_p.h +++ b/src/declarative/debugger/qdeclarativedebugclient_p.h @@ -111,7 +111,7 @@ public: ~QDeclarativeDebugClient(); QString name() const; - + float serviceVersion() const; Status status() const; virtual void sendMessage(const QByteArray &); diff --git a/src/declarative/debugger/qdeclarativedebugserver.cpp b/src/declarative/debugger/qdeclarativedebugserver.cpp index b8963d24f3..23f1e0de7b 100644 --- a/src/declarative/debugger/qdeclarativedebugserver.cpp +++ b/src/declarative/debugger/qdeclarativedebugserver.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE version: an int representing the highest protocol version the client knows pluginNames: plugins available on client side 2. Server sends - "QDeclarativeDebugClient" 0 version pluginNames + "QDeclarativeDebugClient" 0 version pluginNames pluginVersions version: an int representing the highest protocol version the client & server know pluginNames: plugins available on server side. plugins both in the client and server message are enabled. client plugin advertisement @@ -71,7 +71,7 @@ QT_BEGIN_NAMESPACE "QDeclarativeDebugServer" 1 pluginNames server plugin advertisement 1. Server sends - "QDeclarativeDebugClient" 1 pluginNames + "QDeclarativeDebugClient" 1 pluginNames pluginVersions plugin communication: Everything send with a header different to "QDeclarativeDebugServer" is sent to the appropriate plugin. */ @@ -146,7 +146,13 @@ void QDeclarativeDebugServerPrivate::advertisePlugins() QByteArray message; { QDataStream out(&message, QIODevice::WriteOnly); - out << QString(QLatin1String("QDeclarativeDebugClient")) << 1 << plugins.keys(); + QStringList pluginNames; + QList pluginVersions; + foreach (QDeclarativeDebugService *service, plugins.values()) { + pluginNames << service->name(); + pluginVersions << service->version(); + } + out << QString(QLatin1String("QDeclarativeDebugClient")) << 1 << pluginNames << pluginVersions; } QMetaObject::invokeMethod(q, "_q_sendMessage", Qt::QueuedConnection, Q_ARG(QByteArray, message)); @@ -326,7 +332,14 @@ void QDeclarativeDebugServer::receiveMessage(const QByteArray &message) QByteArray helloAnswer; { QDataStream out(&helloAnswer, QIODevice::WriteOnly); - out << QString(QLatin1String("QDeclarativeDebugClient")) << 0 << protocolVersion << d->plugins.keys(); + QStringList pluginNames; + QList pluginVersions; + foreach (QDeclarativeDebugService *service, d->plugins.values()) { + pluginNames << service->name(); + pluginVersions << service->version(); + } + + out << QString(QLatin1String("QDeclarativeDebugClient")) << 0 << protocolVersion << pluginNames << pluginVersions; } d->connection->send(helloAnswer); diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp index 2bdcf2ff92..560654099f 100644 --- a/src/declarative/debugger/qdeclarativedebugservice.cpp +++ b/src/declarative/debugger/qdeclarativedebugservice.cpp @@ -53,11 +53,12 @@ QDeclarativeDebugServicePrivate::QDeclarativeDebugServicePrivate() { } -QDeclarativeDebugService::QDeclarativeDebugService(const QString &name, QObject *parent) +QDeclarativeDebugService::QDeclarativeDebugService(const QString &name, float version, QObject *parent) : QObject(*(new QDeclarativeDebugServicePrivate), parent) { Q_D(QDeclarativeDebugService); d->name = name; + d->version = version; d->server = QDeclarativeDebugServer::instance(); d->status = QDeclarativeDebugService::NotConnected; @@ -65,11 +66,12 @@ QDeclarativeDebugService::QDeclarativeDebugService(const QString &name, QObject } QDeclarativeDebugService::QDeclarativeDebugService(QDeclarativeDebugServicePrivate &dd, - const QString &name, QObject *parent) + const QString &name, float version, QObject *parent) : QObject(dd, parent) { Q_D(QDeclarativeDebugService); d->name = name; + d->version = version; d->server = QDeclarativeDebugServer::instance(); d->status = QDeclarativeDebugService::NotConnected; } @@ -107,6 +109,12 @@ QString QDeclarativeDebugService::name() const return d->name; } +float QDeclarativeDebugService::version() const +{ + Q_D(const QDeclarativeDebugService); + return d->version; +} + QDeclarativeDebugService::Status QDeclarativeDebugService::status() const { Q_D(const QDeclarativeDebugService); diff --git a/src/declarative/debugger/qdeclarativedebugservice_p.h b/src/declarative/debugger/qdeclarativedebugservice_p.h index 3bcf310336..9698f91cbc 100644 --- a/src/declarative/debugger/qdeclarativedebugservice_p.h +++ b/src/declarative/debugger/qdeclarativedebugservice_p.h @@ -71,10 +71,11 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugService : public QObject Q_DISABLE_COPY(QDeclarativeDebugService) public: - explicit QDeclarativeDebugService(const QString &, QObject *parent = 0); + explicit QDeclarativeDebugService(const QString &, float version, QObject *parent = 0); ~QDeclarativeDebugService(); QString name() const; + float version() const; enum Status { NotConnected, Unavailable, Enabled }; Status status() const; @@ -91,7 +92,7 @@ public: static bool hasDebuggingClient(); protected: - QDeclarativeDebugService(QDeclarativeDebugServicePrivate &dd, const QString &, QObject *parent = 0); + QDeclarativeDebugService(QDeclarativeDebugServicePrivate &dd, const QString &name, float version, QObject *parent = 0); Status registerService(); diff --git a/src/declarative/debugger/qdeclarativedebugservice_p_p.h b/src/declarative/debugger/qdeclarativedebugservice_p_p.h index 12233ed739..3c501e8a76 100644 --- a/src/declarative/debugger/qdeclarativedebugservice_p_p.h +++ b/src/declarative/debugger/qdeclarativedebugservice_p_p.h @@ -71,6 +71,7 @@ public: QDeclarativeDebugServicePrivate(); QString name; + float version; QDeclarativeDebugServer *server; QDeclarativeDebugService::Status status; }; diff --git a/src/declarative/debugger/qdeclarativedebugtrace.cpp b/src/declarative/debugger/qdeclarativedebugtrace.cpp index f3f8156dc9..724399df7e 100644 --- a/src/declarative/debugger/qdeclarativedebugtrace.cpp +++ b/src/declarative/debugger/qdeclarativedebugtrace.cpp @@ -74,7 +74,7 @@ QByteArray QDeclarativeDebugData::toByteArray() const } QDeclarativeDebugTrace::QDeclarativeDebugTrace() - : QDeclarativeDebugService(QLatin1String("CanvasFrameRate")), + : QDeclarativeDebugService(QLatin1String("CanvasFrameRate"), 1), m_enabled(false), m_messageReceived(false) { m_timer.start(); diff --git a/src/declarative/debugger/qdeclarativeenginedebugservice.cpp b/src/declarative/debugger/qdeclarativeenginedebugservice.cpp index f831929e57..0e3c05553f 100644 --- a/src/declarative/debugger/qdeclarativeenginedebugservice.cpp +++ b/src/declarative/debugger/qdeclarativeenginedebugservice.cpp @@ -67,7 +67,7 @@ QDeclarativeEngineDebugService *QDeclarativeEngineDebugService::instance() } QDeclarativeEngineDebugService::QDeclarativeEngineDebugService(QObject *parent) - : QDeclarativeDebugService(QLatin1String("QDeclarativeEngine"), parent), + : QDeclarativeDebugService(QLatin1String("QDeclarativeEngine"), 1, parent), m_watch(new QDeclarativeWatcher(this)), m_statesDelegate(0) { diff --git a/src/declarative/debugger/qdeclarativeinspectorservice.cpp b/src/declarative/debugger/qdeclarativeinspectorservice.cpp index 07fed4dbb1..729a71a77e 100644 --- a/src/declarative/debugger/qdeclarativeinspectorservice.cpp +++ b/src/declarative/debugger/qdeclarativeinspectorservice.cpp @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE Q_GLOBAL_STATIC(QDeclarativeInspectorService, serviceInstance) QDeclarativeInspectorService::QDeclarativeInspectorService() - : QDeclarativeDebugService(QLatin1String("QDeclarativeObserverMode")) + : QDeclarativeDebugService(QLatin1String("QDeclarativeObserverMode"), 1) , m_currentInspectorPlugin(0) { registerService(); diff --git a/src/declarative/debugger/qv8debugservice.cpp b/src/declarative/debugger/qv8debugservice.cpp index 933c37a9ea..976f501ddb 100644 --- a/src/declarative/debugger/qv8debugservice.cpp +++ b/src/declarative/debugger/qv8debugservice.cpp @@ -51,16 +51,14 @@ //V8 DEBUG SERVICE PROTOCOL //
//
: "V8DEBUG" -// : ["connect", "disconnect", "interrupt", "version", +// : ["connect", "disconnect", "interrupt", // "v8request", "v8message", "breakonsignal", // "breakaftercompile"] // : connect, disconnect, interrupt: empty -// version: // v8request, v8message: // breakonsignal: // breakaftercompile: -const char *V8_DEBUGGER_KEY_VERSION_NUMBER = "1.1"; const char *V8_DEBUGGER_KEY_VERSION = "version"; const char *V8_DEBUGGER_KEY_CONNECT = "connect"; const char *V8_DEBUGGER_KEY_INTERRUPT = "interrupt"; @@ -122,7 +120,7 @@ public: QV8DebugService::QV8DebugService(QObject *parent) : QDeclarativeDebugService(*(new QV8DebugServicePrivate()), - QLatin1String("V8Debugger"), parent) + QLatin1String("V8Debugger"), 2, parent) { Q_D(QV8DebugService); v8ServiceInstancePtr = this; @@ -267,12 +265,6 @@ void QV8DebugService::messageReceived(const QByteArray &message) rs >> d->breakAfterCompile; sendMessage(QV8DebugServicePrivate::packMessage(QLatin1String(V8_DEBUGGER_KEY_BREAK_AFTER_COMPILE))); - } else if (command == V8_DEBUGGER_KEY_VERSION) { - //We dont check the client version - //just send the debugger version - sendMessage(QV8DebugServicePrivate::packMessage(QLatin1String(V8_DEBUGGER_KEY_VERSION), - QLatin1String(V8_DEBUGGER_KEY_VERSION_NUMBER))); - } } } diff --git a/src/declarative/debugger/qv8profilerservice.cpp b/src/declarative/debugger/qv8profilerservice.cpp index 7cbd336e17..f5c980ee78 100644 --- a/src/declarative/debugger/qv8profilerservice.cpp +++ b/src/declarative/debugger/qv8profilerservice.cpp @@ -100,7 +100,7 @@ public: }; QV8ProfilerService::QV8ProfilerService(QObject *parent) - : QDeclarativeDebugService(*(new QV8ProfilerServicePrivate()), QLatin1String("V8Profiler"), parent) + : QDeclarativeDebugService(*(new QV8ProfilerServicePrivate()), QLatin1String("V8Profiler"), 1, parent) { Q_D(QV8ProfilerService); diff --git a/tests/auto/declarative/debugger/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp b/tests/auto/declarative/debugger/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp index 43f92dfb64..7306b89a2c 100644 --- a/tests/auto/declarative/debugger/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp +++ b/tests/auto/declarative/debugger/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp @@ -109,14 +109,16 @@ void tst_QDeclarativeDebugClient::status() QDeclarativeDebugConnection dummyConn; QDeclarativeDebugClient client("tst_QDeclarativeDebugClient::status()", &dummyConn); QCOMPARE(client.status(), QDeclarativeDebugClient::NotConnected); + QCOMPARE(client.serviceVersion(), -1.0f); } QDeclarativeDebugTestClient client("tst_QDeclarativeDebugClient::status()", m_conn); QCOMPARE(client.status(), QDeclarativeDebugClient::Unavailable); { - QDeclarativeDebugTestService service("tst_QDeclarativeDebugClient::status()"); + QDeclarativeDebugTestService service("tst_QDeclarativeDebugClient::status()", 2); QTRY_COMPARE(client.status(), QDeclarativeDebugClient::Enabled); + QCOMPARE(client.serviceVersion(), 2.0f); } QTRY_COMPARE(client.status(), QDeclarativeDebugClient::Unavailable); diff --git a/tests/auto/declarative/debugger/qdeclarativedebugjs/tst_qdeclarativedebugjs.cpp b/tests/auto/declarative/debugger/qdeclarativedebugjs/tst_qdeclarativedebugjs.cpp index f2c028219e..0f9da032e8 100644 --- a/tests/auto/declarative/debugger/qdeclarativedebugjs/tst_qdeclarativedebugjs.cpp +++ b/tests/auto/declarative/debugger/qdeclarativedebugjs/tst_qdeclarativedebugjs.cpp @@ -174,7 +174,6 @@ private slots: void connect(); void interrupt(); void breakAfterCompile(); - void getDebuggerVersion(); void getVersion(); void getVersionWhenAttaching(); @@ -271,7 +270,6 @@ public: void connect(); void interrupt(); void breakAfterCompile(bool enabled); - void debuggerVersion(); void continueDebugging(StepAction stepAction, int stepCount = 1); void evaluate(QString expr, bool global = false, bool disableBreak = false, int frame = -1, const QVariantMap &addContext = QVariantMap()); @@ -303,7 +301,6 @@ signals: void connected(); void interruptRequested(); void breakAfterCompileRequested(); - void gotVersion(); void result(); void stopped(); @@ -342,11 +339,6 @@ void QJSDebugClient::breakAfterCompile(bool enabled) sendMessage(packMessage(BREAKAFTERCOMPILE, request)); } -void QJSDebugClient::debuggerVersion() -{ - sendMessage(packMessage(VERSION)); -} - void QJSDebugClient::continueDebugging(StepAction action, int count) { // { "seq" : , @@ -959,8 +951,6 @@ void QJSDebugClient::messageReceived(const QByteArray &data) } else if (type == BREAKAFTERCOMPILE) { emit breakAfterCompileRequested(); - } else if (type == VERSION) { - emit gotVersion(); } } } @@ -1089,17 +1079,6 @@ void tst_QDeclarativeDebugJS::breakAfterCompile() QVERIFY(QDeclarativeDebugTest::waitForSignal(client, SIGNAL(stopped()))); } -void tst_QDeclarativeDebugJS::getDebuggerVersion() -{ - QVERIFY(init()); - client->debuggerVersion(); - - QVERIFY(QDeclarativeDebugTest::waitForSignal(client, SIGNAL(gotVersion()))); - - QString version(client->response); - QCOMPARE(version, QLatin1String("1.1")); -} - void tst_QDeclarativeDebugJS::getVersion() { //void version() diff --git a/tests/auto/declarative/debugger/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp b/tests/auto/declarative/debugger/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp index 6754503de9..77a2514c20 100644 --- a/tests/auto/declarative/debugger/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp +++ b/tests/auto/declarative/debugger/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp @@ -66,6 +66,7 @@ private slots: void initTestCase(); void name(); + void version(); void status(); void sendMessage(); void idForObject(); @@ -99,10 +100,18 @@ void tst_QDeclarativeDebugService::name() { QString name = "tst_QDeclarativeDebugService::name()"; - QDeclarativeDebugService service(name); + QDeclarativeDebugService service(name, 1); QCOMPARE(service.name(), name); } +void tst_QDeclarativeDebugService::version() +{ + QString name = "tst_QDeclarativeDebugService::name()"; + + QDeclarativeDebugService service(name, 2); + QCOMPARE(service.version(), 2.0f); +} + void tst_QDeclarativeDebugService::status() { QDeclarativeDebugTestService service("tst_QDeclarativeDebugService::status()"); diff --git a/tests/auto/declarative/debugger/shared/debugutil.cpp b/tests/auto/declarative/debugger/shared/debugutil.cpp index c259ac953c..41c97eaad8 100644 --- a/tests/auto/declarative/debugger/shared/debugutil.cpp +++ b/tests/auto/declarative/debugger/shared/debugutil.cpp @@ -58,8 +58,8 @@ bool QDeclarativeDebugTest::waitForSignal(QObject *receiver, const char *member, return timer.isActive(); } -QDeclarativeDebugTestService::QDeclarativeDebugTestService(const QString &s, QObject *parent) - : QDeclarativeDebugService(s, parent) +QDeclarativeDebugTestService::QDeclarativeDebugTestService(const QString &s, float version, QObject *parent) + : QDeclarativeDebugService(s, version, parent) { registerService(); } diff --git a/tests/auto/declarative/debugger/shared/debugutil_p.h b/tests/auto/declarative/debugger/shared/debugutil_p.h index 4d2ee160d5..e24bdbd02f 100644 --- a/tests/auto/declarative/debugger/shared/debugutil_p.h +++ b/tests/auto/declarative/debugger/shared/debugutil_p.h @@ -64,7 +64,7 @@ class QDeclarativeDebugTestService : public QDeclarativeDebugService { Q_OBJECT public: - QDeclarativeDebugTestService(const QString &s, QObject *parent = 0); + QDeclarativeDebugTestService(const QString &s, float version = 1, QObject *parent = 0); signals: void statusHasChanged(); -- cgit v1.2.3