aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAurindam Jana <aurindam.jana@nokia.com>2012-04-23 09:23:23 +0200
committerQt by Nokia <qt-info@nokia.com>2012-04-26 11:46:06 +0200
commit7f7cd79e29e634ddff55fe18b122ac85c5cfe4a0 (patch)
treec6914c9a28eaec0e07309cfdfd60b9da0388912b /src
parentc0f07d5707180856bb2705359d780a836653188c (diff)
QmlDebugging: Exchange supported QDataStream versions
Since the client and service needs to pack/unpack datastreams, they need to encode/decode using the lowest common QDataStream version. Change-Id: I3b4886fece59b24950ba618da07a0fefd41a5637 Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qmltooling/shared/abstractviewinspector.cpp6
-rw-r--r--src/qml/debugger/qdebugmessageservice.cpp2
-rw-r--r--src/qml/debugger/qqmldebugserver.cpp22
-rw-r--r--src/qml/debugger/qqmldebugserver_p.h3
-rw-r--r--src/qml/debugger/qqmldebugservice.cpp24
-rw-r--r--src/qml/debugger/qqmldebugservice_p.h10
-rw-r--r--src/qml/debugger/qqmlenginedebugservice.cpp45
-rw-r--r--src/qml/debugger/qqmlprofilerservice.cpp6
-rw-r--r--src/qml/debugger/qv8debugservice.cpp6
-rw-r--r--src/qml/debugger/qv8profilerservice.cpp14
10 files changed, 78 insertions, 60 deletions
diff --git a/src/plugins/qmltooling/shared/abstractviewinspector.cpp b/src/plugins/qmltooling/shared/abstractviewinspector.cpp
index 5784f64011..02a85e2e2e 100644
--- a/src/plugins/qmltooling/shared/abstractviewinspector.cpp
+++ b/src/plugins/qmltooling/shared/abstractviewinspector.cpp
@@ -268,7 +268,7 @@ bool AbstractViewInspector::touchEvent(QTouchEvent *event)
void AbstractViewInspector::handleMessage(const QByteArray &message)
{
bool success = true;
- QDataStream ds(message);
+ QQmlDebugStream ds(message);
QByteArray type;
ds >> type;
@@ -342,7 +342,7 @@ void AbstractViewInspector::handleMessage(const QByteArray &message)
}
QByteArray response;
- QDataStream rs(&response, QIODevice::WriteOnly);
+ QQmlDebugStream rs(&response, QIODevice::WriteOnly);
rs << QByteArray(RESPONSE) << requestId << success;
m_debugService->sendMessage(response);
}
@@ -350,7 +350,7 @@ void AbstractViewInspector::handleMessage(const QByteArray &message)
void AbstractViewInspector::sendCurrentObjects(const QList<QObject*> &objects)
{
QByteArray message;
- QDataStream ds(&message, QIODevice::WriteOnly);
+ QQmlDebugStream ds(&message, QIODevice::WriteOnly);
ds << QByteArray(EVENT) << m_eventId++ << QByteArray(SELECT);
diff --git a/src/qml/debugger/qdebugmessageservice.cpp b/src/qml/debugger/qdebugmessageservice.cpp
index bcd798517c..d44bbf9268 100644
--- a/src/qml/debugger/qdebugmessageservice.cpp
+++ b/src/qml/debugger/qdebugmessageservice.cpp
@@ -99,7 +99,7 @@ void QDebugMessageService::sendDebugMessage(QtMsgType type,
//We just eavesdrop and forward the messages to a port
//only if a client is connected to it.
QByteArray message;
- QDataStream ws(&message, QIODevice::WriteOnly);
+ QQmlDebugStream ws(&message, QIODevice::WriteOnly);
ws << QByteArray("MESSAGE") << type << QString::fromLocal8Bit(buf).toUtf8();
ws << QString::fromLatin1(ctxt.file).toUtf8();
ws << ctxt.line << QString::fromLatin1(ctxt.function).toUtf8();
diff --git a/src/qml/debugger/qqmldebugserver.cpp b/src/qml/debugger/qqmldebugserver.cpp
index b247e43435..ae9b103d59 100644
--- a/src/qml/debugger/qqmldebugserver.cpp
+++ b/src/qml/debugger/qqmldebugserver.cpp
@@ -61,11 +61,11 @@ QT_BEGIN_NAMESPACE
handshake:
1. Client sends
- "QDeclarativeDebugServer" 0 version pluginNames
+ "QDeclarativeDebugServer" 0 version pluginNames [QDataStream version]
version: an int representing the highest protocol version the client knows
pluginNames: plugins available on client side
2. Server sends
- "QDeclarativeDebugClient" 0 version pluginNames pluginVersions
+ "QDeclarativeDebugClient" 0 version pluginNames pluginVersions [QDataStream version]
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
@@ -79,6 +79,7 @@ QT_BEGIN_NAMESPACE
*/
const int protocolVersion = 1;
+int QQmlDebugServer::s_dataStreamVersion = QDataStream::Qt_4_7;
// print detailed information about loading of plugins
DEFINE_BOOL_CONFIG_OPTION(qmlDebugVerbose, QML_DEBUGGER_VERBOSE)
@@ -158,7 +159,7 @@ void QQmlDebugServerPrivate::advertisePlugins()
QByteArray message;
{
- QDataStream out(&message, QIODevice::WriteOnly);
+ QQmlDebugStream out(&message, QIODevice::WriteOnly);
QStringList pluginNames;
QList<float> pluginVersions;
foreach (QQmlDebugService *service, plugins.values()) {
@@ -384,7 +385,7 @@ void QQmlDebugServer::receiveMessage(const QByteArray &message)
Q_D(QQmlDebugServer);
- QDataStream in(message);
+ QQmlDebugStream in(message);
QString name;
@@ -396,11 +397,17 @@ void QQmlDebugServer::receiveMessage(const QByteArray &message)
int version;
in >> version >> d->clientPlugins;
+ //Get the supported QDataStream version
+ if (!in.atEnd()) {
+ in >> s_dataStreamVersion;
+ if (s_dataStreamVersion > QDataStream().version())
+ s_dataStreamVersion = QDataStream().version();
+ }
// Send the hello answer immediately, since it needs to arrive before
// the plugins below start sending messages.
QByteArray helloAnswer;
{
- QDataStream out(&helloAnswer, QIODevice::WriteOnly);
+ QQmlDebugStream out(&helloAnswer, QIODevice::WriteOnly);
QStringList pluginNames;
QList<float> pluginVersions;
foreach (QQmlDebugService *service, d->plugins.values()) {
@@ -408,7 +415,8 @@ void QQmlDebugServer::receiveMessage(const QByteArray &message)
pluginVersions << service->version();
}
- out << QString(QStringLiteral("QDeclarativeDebugClient")) << 0 << protocolVersion << pluginNames << pluginVersions;
+ out << QString(QStringLiteral("QDeclarativeDebugClient")) << 0 << protocolVersion
+ << pluginNames << pluginVersions << s_dataStreamVersion;
}
d->connection->send(QList<QByteArray>() << helloAnswer);
@@ -577,7 +585,7 @@ void QQmlDebugServer::sendMessages(QQmlDebugService *service,
QList<QByteArray> prefixedMessages;
foreach (const QByteArray &message, messages) {
QByteArray prefixed;
- QDataStream out(&prefixed, QIODevice::WriteOnly);
+ QQmlDebugStream out(&prefixed, QIODevice::WriteOnly);
out << service->name() << message;
prefixedMessages << prefixed;
}
diff --git a/src/qml/debugger/qqmldebugserver_p.h b/src/qml/debugger/qqmldebugserver_p.h
index 5e853da2ee..be02602f38 100644
--- a/src/qml/debugger/qqmldebugserver_p.h
+++ b/src/qml/debugger/qqmldebugserver_p.h
@@ -97,6 +97,9 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_changeServiceState(const QString &serviceName,
QQmlDebugService::State state))
Q_PRIVATE_SLOT(d_func(), void _q_sendMessages(QList<QByteArray>))
+
+public:
+ static int s_dataStreamVersion;
};
QT_END_NAMESPACE
diff --git a/src/qml/debugger/qqmldebugservice.cpp b/src/qml/debugger/qqmldebugservice.cpp
index 1fe5aa32eb..76847e5a46 100644
--- a/src/qml/debugger/qqmldebugservice.cpp
+++ b/src/qml/debugger/qqmldebugservice.cpp
@@ -261,4 +261,28 @@ void QQmlDebugService::messageReceived(const QByteArray &)
{
}
+QQmlDebugStream::QQmlDebugStream()
+ : QDataStream()
+{
+ setVersion(QQmlDebugServer::s_dataStreamVersion);
+}
+
+QQmlDebugStream::QQmlDebugStream(QIODevice *d)
+ : QDataStream(d)
+{
+ setVersion(QQmlDebugServer::s_dataStreamVersion);
+}
+
+QQmlDebugStream::QQmlDebugStream(QByteArray *ba, QIODevice::OpenMode flags)
+ : QDataStream(ba, flags)
+{
+ setVersion(QQmlDebugServer::s_dataStreamVersion);
+}
+
+QQmlDebugStream::QQmlDebugStream(const QByteArray &ba)
+ : QDataStream(ba)
+{
+ setVersion(QQmlDebugServer::s_dataStreamVersion);
+}
+
QT_END_NAMESPACE
diff --git a/src/qml/debugger/qqmldebugservice_p.h b/src/qml/debugger/qqmldebugservice_p.h
index abd9c1be73..f092b6c5e6 100644
--- a/src/qml/debugger/qqmldebugservice_p.h
+++ b/src/qml/debugger/qqmldebugservice_p.h
@@ -43,6 +43,7 @@
#define QQMLDEBUGSERVICE_H
#include <QtCore/qobject.h>
+#include <QtCore/QDataStream>
#include <private/qtqmlglobal_p.h>
@@ -105,6 +106,15 @@ private:
friend class QQmlDebugServerPrivate;
};
+class Q_QML_PRIVATE_EXPORT QQmlDebugStream : public QDataStream
+{
+public:
+ QQmlDebugStream();
+ explicit QQmlDebugStream(QIODevice *d);
+ QQmlDebugStream(QByteArray *ba, QIODevice::OpenMode flags);
+ QQmlDebugStream(const QByteArray &ba);
+};
+
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/qml/debugger/qqmlenginedebugservice.cpp b/src/qml/debugger/qqmlenginedebugservice.cpp
index 588cbe2d1a..f837da578f 100644
--- a/src/qml/debugger/qqmlenginedebugservice.cpp
+++ b/src/qml/debugger/qqmlenginedebugservice.cpp
@@ -401,15 +401,16 @@ void QQmlEngineDebugService::messageReceived(const QByteArray &message)
void QQmlEngineDebugService::processMessage(const QByteArray &message)
{
- QDataStream ds(message);
+ QQmlDebugStream ds(message);
QByteArray type;
int queryId;
ds >> type >> queryId;
+ QByteArray reply;
+ QQmlDebugStream rs(&reply, QIODevice::WriteOnly);
+
if (type == "LIST_ENGINES") {
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("LIST_ENGINES_R");
rs << queryId << m_engines.count();
@@ -422,7 +423,6 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
rs << engineName << engineId;
}
- sendMessage(reply);
} else if (type == "LIST_OBJECTS") {
int engineId = -1;
ds >> engineId;
@@ -430,8 +430,6 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
QQmlEngine *engine =
qobject_cast<QQmlEngine *>(QQmlDebugService::objectForId(engineId));
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("LIST_OBJECTS_R") << queryId;
if (engine) {
@@ -448,7 +446,6 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
buildStatesList(true, ctxtPriv->instances);
}
- sendMessage(reply);
} else if (type == "FETCH_OBJECT") {
int objectId;
bool recurse;
@@ -458,8 +455,6 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
QObject *object = QQmlDebugService::objectForId(objectId);
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("FETCH_OBJECT_R") << queryId;
if (object) {
@@ -468,18 +463,14 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
buildObjectDump(rs, object, recurse, dumpProperties);
}
- sendMessage(reply);
} else if (type == "WATCH_OBJECT") {
int objectId;
ds >> objectId;
bool ok = m_watch->addWatch(queryId, objectId);
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("WATCH_OBJECT_R") << queryId << ok;
- sendMessage(reply);
} else if (type == "WATCH_PROPERTY") {
int objectId;
QByteArray property;
@@ -487,11 +478,8 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
ds >> objectId >> property;
bool ok = m_watch->addWatch(queryId, objectId, property);
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("WATCH_PROPERTY_R") << queryId << ok;
- sendMessage(reply);
} else if (type == "WATCH_EXPR_OBJECT") {
int debugId;
QString expr;
@@ -499,17 +487,13 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
ds >> debugId >> expr;
bool ok = m_watch->addWatch(queryId, debugId, expr);
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("WATCH_EXPR_OBJECT_R") << queryId << ok;
- sendMessage(reply);
+
} else if (type == "NO_WATCH") {
bool ok = m_watch->removeWatch(queryId);
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("NO_WATCH_R") << queryId << ok;
- sendMessage(reply);
+
} else if (type == "EVAL_EXPRESSION") {
int objectId;
QString expr;
@@ -531,11 +515,8 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
result = QString(QStringLiteral("<unknown context>"));
}
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("EVAL_EXPRESSION_R") << queryId << result;
- sendMessage(reply);
} else if (type == "SET_BINDING") {
int objectId;
QString propertyName;
@@ -548,22 +529,16 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
bool ok = setBinding(objectId, propertyName, expr, isLiteralValue,
filename, line);
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("SET_BINDING_R") << queryId << ok;
- sendMessage(reply);
} else if (type == "RESET_BINDING") {
int objectId;
QString propertyName;
ds >> objectId >> propertyName;
bool ok = resetBinding(objectId, propertyName);
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("RESET_BINDING_R") << queryId << ok;
- sendMessage(reply);
} else if (type == "SET_METHOD_BODY") {
int objectId;
QString methodName;
@@ -571,12 +546,10 @@ void QQmlEngineDebugService::processMessage(const QByteArray &message)
ds >> objectId >> methodName >> methodBody;
bool ok = setMethodBody(objectId, methodName, methodBody);
- QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("SET_METHOD_BODY_R") << queryId << ok;
- sendMessage(reply);
}
+ sendMessage(reply);
}
bool QQmlEngineDebugService::setBinding(int objectId,
@@ -720,7 +693,7 @@ bool QQmlEngineDebugService::setMethodBody(int objectId, const QString &method,
void QQmlEngineDebugService::propertyChanged(int id, int objectId, const QMetaProperty &property, const QVariant &value)
{
QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
+ QQmlDebugStream rs(&reply, QIODevice::WriteOnly);
rs << QByteArray("UPDATE_WATCH") << id << objectId << QByteArray(property.name()) << valueContents(value);
@@ -753,7 +726,7 @@ void QQmlEngineDebugService::objectCreated(QQmlEngine *engine, QObject *object)
int parentId = QQmlDebugService::idForObject(object->parent());
QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
+ QQmlDebugStream rs(&reply, QIODevice::WriteOnly);
//unique queryId -1
rs << QByteArray("OBJECT_CREATED") << -1 << engineId << objectId << parentId;
diff --git a/src/qml/debugger/qqmlprofilerservice.cpp b/src/qml/debugger/qqmlprofilerservice.cpp
index 12db9e1acb..3600586b28 100644
--- a/src/qml/debugger/qqmlprofilerservice.cpp
+++ b/src/qml/debugger/qqmlprofilerservice.cpp
@@ -64,7 +64,7 @@ QByteArray QQmlProfilerData::toByteArray() const
{
QByteArray data;
//### using QDataStream is relatively expensive
- QDataStream ds(&data, QIODevice::WriteOnly);
+ QQmlDebugStream ds(&data, QIODevice::WriteOnly);
ds << time << messageType << detailType;
if (messageType == (int)QQmlProfilerService::RangeData)
ds << detailData;
@@ -276,7 +276,7 @@ void QQmlProfilerService::sendMessages()
//indicate completion
QByteArray data;
- QDataStream ds(&data, QIODevice::WriteOnly);
+ QQmlDebugStream ds(&data, QIODevice::WriteOnly);
ds << (qint64)-1 << (int)Complete;
messages << data;
@@ -308,7 +308,7 @@ void QQmlProfilerService::messageReceived(const QByteArray &message)
QMutexLocker lock(&m_initializeMutex);
QByteArray rwData = message;
- QDataStream stream(&rwData, QIODevice::ReadOnly);
+ QQmlDebugStream stream(&rwData, QIODevice::ReadOnly);
bool enabled;
stream >> enabled;
diff --git a/src/qml/debugger/qv8debugservice.cpp b/src/qml/debugger/qv8debugservice.cpp
index 3ef1f32121..37b06ca2eb 100644
--- a/src/qml/debugger/qv8debugservice.cpp
+++ b/src/qml/debugger/qv8debugservice.cpp
@@ -223,7 +223,7 @@ void QV8DebugService::messageReceived(const QByteArray &message)
Q_D(QV8DebugService);
QMutexLocker lock(&d->initializeMutex);
- QDataStream ds(message);
+ QQmlDebugStream ds(message);
QByteArray header;
ds >> header;
@@ -250,7 +250,7 @@ void QV8DebugService::messageReceived(const QByteArray &message)
sendDebugMessage(QString::fromUtf8(data));
} else if (command == V8_DEBUGGER_KEY_BREAK_ON_SIGNAL) {
- QDataStream rs(data);
+ QQmlDebugStream rs(data);
QByteArray signal;
bool enabled;
rs >> signal >> enabled;
@@ -281,7 +281,7 @@ void QV8DebugService::processDebugMessages()
QByteArray QV8DebugServicePrivate::packMessage(const QString &type, const QString &message)
{
QByteArray reply;
- QDataStream rs(&reply, QIODevice::WriteOnly);
+ QQmlDebugStream rs(&reply, QIODevice::WriteOnly);
QByteArray cmd("V8DEBUG");
rs << cmd << type.toUtf8() << message.toUtf8();
return reply;
diff --git a/src/qml/debugger/qv8profilerservice.cpp b/src/qml/debugger/qv8profilerservice.cpp
index 5cddea755c..e75156ff76 100644
--- a/src/qml/debugger/qv8profilerservice.cpp
+++ b/src/qml/debugger/qv8profilerservice.cpp
@@ -61,7 +61,7 @@ public:
WriteResult WriteAsciiChunk(char *rawData, int size)
{
QByteArray data;
- QDataStream ds(&data, QIODevice::WriteOnly);
+ QQmlDebugStream ds(&data, QIODevice::WriteOnly);
ds << QV8ProfilerService::V8SnapshotChunk << QByteArray(rawData, size);
messages.append(data);
return kContinue;
@@ -74,7 +74,7 @@ QByteArray QV8ProfilerData::toByteArray() const
{
QByteArray data;
//### using QDataStream is relatively expensive
- QDataStream ds(&data, QIODevice::WriteOnly);
+ QQmlDebugStream ds(&data, QIODevice::WriteOnly);
ds << messageType << filename << functionname << lineNumber << totalTime << selfTime << treeLevel;
return data;
@@ -156,7 +156,7 @@ void QV8ProfilerService::messageReceived(const QByteArray &message)
{
Q_D(QV8ProfilerService);
- QDataStream ds(message);
+ QQmlDebugStream ds(message);
QByteArray command;
QByteArray option;
QByteArray title;
@@ -206,7 +206,7 @@ void QV8ProfilerService::startProfiling(const QString &title)
// indicate profiling started
QByteArray data;
- QDataStream ds(&data, QIODevice::WriteOnly);
+ QQmlDebugStream ds(&data, QIODevice::WriteOnly);
ds << (int)QV8ProfilerService::V8Started;
sendMessage(data);
@@ -231,7 +231,7 @@ void QV8ProfilerService::stopProfiling(const QString &title)
} else {
// indicate completion, even without data
QByteArray data;
- QDataStream ds(&data, QIODevice::WriteOnly);
+ QQmlDebugStream ds(&data, QIODevice::WriteOnly);
ds << (int)QV8ProfilerService::V8Complete;
sendMessage(data);
@@ -290,7 +290,7 @@ void QV8ProfilerServicePrivate::takeSnapshot(v8::HeapSnapshot::Type snapshotType
//indicate completion
QByteArray data;
- QDataStream ds(&data, QIODevice::WriteOnly);
+ QQmlDebugStream ds(&data, QIODevice::WriteOnly);
ds << (int)QV8ProfilerService::V8SnapshotComplete;
messages.append(data);
@@ -308,7 +308,7 @@ void QV8ProfilerServicePrivate::sendMessages()
//indicate completion
QByteArray data;
- QDataStream ds(&data, QIODevice::WriteOnly);
+ QQmlDebugStream ds(&data, QIODevice::WriteOnly);
ds << (int)QV8ProfilerService::V8Complete;
messages.append(data);