aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@theqtcompany.com>2015-11-03 14:32:25 +0100
committerUlf Hermann <ulf.hermann@theqtcompany.com>2015-11-17 18:42:07 +0000
commit0b67dd7e132d7d618fa538e8c4a275c874543342 (patch)
tree3c6c7cdf8fbae8c6a7d0d333d96c22d130413980 /src
parente010b64d38cb8533d779ac0fe8d609f00a6793e7 (diff)
QmlDebug: Restructure QPacket and QPacketProtocol
We cannot use the same data stream version for the client and server versions of QPacket and QPacketProtocol should not deal with QPackets but with simple byte arrays because the underlying QDataStream is hard to copy. The new QQmlDebugPacket picks its data stream version from QQmlDebugConnector now, which adjusts it when connecting. As there can only ever be one QQmlDebugConnector, we can keep the version static. The clients need to query the connection for the correct version. We may connect to several different servers sequentially or we may have a server running while using a client, and we don't want to confuse the versions between those. With this in place, all remaining occurrences of QDataStream are replaced with QPacket or QQmlDebugPacket. Change-Id: I3f6ba73fcbfad5e8df917c5feb9308116738a614 Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qmltooling/packetprotocol/packetprotocol.pro6
-rw-r--r--src/plugins/qmltooling/packetprotocol/qpacket.cpp (renamed from src/qml/debugger/qpacket.cpp)67
-rw-r--r--src/plugins/qmltooling/packetprotocol/qpacket_p.h (renamed from src/qml/debugger/qpacket_p.h)21
-rw-r--r--src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp31
-rw-r--r--src/plugins/qmltooling/packetprotocol/qpacketprotocol_p.h5
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qdebugmessageservice.cpp6
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qmldbg_debugger.pro3
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp13
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qqmlnativedebugservice.cpp8
-rw-r--r--src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp9
-rw-r--r--src/plugins/qmltooling/qmldbg_inspector/abstractviewinspector.cpp12
-rw-r--r--src/plugins/qmltooling/qmldbg_inspector/qmldbg_inspector.pro3
-rw-r--r--src/plugins/qmltooling/qmldbg_native/qmldbg_native.pro6
-rw-r--r--src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.cpp12
-rw-r--r--src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.h1
-rw-r--r--src/plugins/qmltooling/qmldbg_profiler/qmldbg_profiler.pro3
-rw-r--r--src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp6
-rw-r--r--src/plugins/qmltooling/qmldbg_profiler/qqmlprofileradapter.cpp5
-rw-r--r--src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp12
-rw-r--r--src/plugins/qmltooling/qmldbg_profiler/qv4profileradapter.cpp13
-rw-r--r--src/plugins/qmltooling/qmldbg_quickprofiler/qmldbg_quickprofiler.pro5
-rw-r--r--src/plugins/qmltooling/qmldbg_quickprofiler/qquickprofileradapter.cpp4
-rw-r--r--src/plugins/qmltooling/qmldbg_server/qmldbg_server.pro3
-rw-r--r--src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp22
-rw-r--r--src/plugins/qmltooling/qmltooling.pro18
-rw-r--r--src/plugins/qmltooling/shared/qqmldebugpacket.h64
-rw-r--r--src/plugins/qmltooling/shared/qqmldebugserver.h2
-rw-r--r--src/qml/debugger/debugger.pri6
-rw-r--r--src/qml/debugger/qqmldebugconnector.cpp3
-rw-r--r--src/qml/debugger/qqmldebugconnector_p.h5
-rw-r--r--src/qml/debugger/qqmldebugservice_p.h1
-rw-r--r--src/qmldebug/qqmldebugclient.cpp6
-rw-r--r--src/qmldebug/qqmldebugclient_p.h2
-rw-r--r--src/qmldebug/qqmldebugconnection.cpp37
-rw-r--r--src/qmldebug/qqmldebugconnection_p.h4
-rw-r--r--src/qmldebug/qqmlprofilerclient.cpp13
-rw-r--r--src/qmldebug/qqmlprofilerclient_p.h3
37 files changed, 245 insertions, 195 deletions
diff --git a/src/plugins/qmltooling/packetprotocol/packetprotocol.pro b/src/plugins/qmltooling/packetprotocol/packetprotocol.pro
index a6b8f26bb1..383e32b54e 100644
--- a/src/plugins/qmltooling/packetprotocol/packetprotocol.pro
+++ b/src/plugins/qmltooling/packetprotocol/packetprotocol.pro
@@ -3,9 +3,11 @@ QT = core-private qml-private
CONFIG += static internal_module
HEADERS = \
- qpacketprotocol_p.h
+ qpacketprotocol_p.h \
+ qpacket_p.h
SOURCES = \
- qpacketprotocol.cpp
+ qpacketprotocol.cpp \
+ qpacket.cpp
load(qt_module)
diff --git a/src/qml/debugger/qpacket.cpp b/src/plugins/qmltooling/packetprotocol/qpacket.cpp
index 30f2191689..1bb611ab25 100644
--- a/src/qml/debugger/qpacket.cpp
+++ b/src/plugins/qmltooling/packetprotocol/qpacket.cpp
@@ -50,22 +50,23 @@ QT_BEGIN_NAMESPACE
Applications should construct a QPacket, propagate it with data and then
transmit it over a QPacketProtocol instance. For example:
\code
+ int version = QDataStream::Qt_DefaultCompiledVersion;
QPacketProtocol protocol(...);
- QPacket myPacket;
+ QPacket myPacket(version);
myPacket << "Hello world!" << 123;
- protocol.send(myPacket);
+ protocol.send(myPacket.data());
\endcode
- As long as both ends of the connection are using the QPacketProtocol class,
- the data within this packet will be delivered unfragmented at the other end,
- ready for extraction.
+ As long as both ends of the connection are using the QPacketProtocol class
+ and the same data stream version, the data within this packet will be
+ delivered unfragmented at the other end, ready for extraction.
\code
QByteArray greeting;
int count;
- QPacket myPacket = protocol.read();
+ QPacket myPacket(version, protocol.read());
myPacket >> greeting >> count;
\endcode
@@ -78,48 +79,26 @@ QT_BEGIN_NAMESPACE
\sa QPacketProtocol
*/
-int QPacket::s_dataStreamVersion = QDataStream::Qt_4_7;
-
-void QPacket::setDataStreamVersion(int dataStreamVersion)
-{
- s_dataStreamVersion = dataStreamVersion;
-}
-
-int QPacket::dataStreamVersion()
-{
- return s_dataStreamVersion;
-}
/*!
Constructs an empty write-only packet.
*/
-QPacket::QPacket()
+QPacket::QPacket(int version)
{
- init(QIODevice::WriteOnly);
+ buf.open(QIODevice::WriteOnly);
+ setDevice(&buf);
+ setVersion(version);
}
/*!
- Creates a copy of \a other. The initial stream positions are shared, but the
- two packets are otherwise independent.
+ Constructs a read-only packet.
*/
-QPacket::QPacket(const QPacket &other) : QDataStream()
-{
- assign(other);
-}
-
-QPacket &QPacket::operator=(const QPacket &other)
-{
- if (this != &other) {
- buf.close();
- assign(other);
- }
- return *this;
-}
-
-QPacket::QPacket(const QByteArray &data)
+QPacket::QPacket(int version, const QByteArray &data)
{
buf.setData(data);
- init(QIODevice::ReadOnly);
+ buf.open(QIODevice::ReadOnly);
+ setDevice(&buf);
+ setVersion(version);
}
/*!
@@ -130,18 +109,4 @@ QByteArray QPacket::data() const
return buf.data();
}
-void QPacket::init(QIODevice::OpenMode mode)
-{
- buf.open(mode);
- setDevice(&buf);
- setVersion(s_dataStreamVersion);
-}
-
-void QPacket::assign(const QPacket &other)
-{
- buf.setData(other.buf.data());
- init(other.buf.openMode());
- buf.seek(other.buf.pos());
-}
-
QT_END_NAMESPACE
diff --git a/src/qml/debugger/qpacket_p.h b/src/plugins/qmltooling/packetprotocol/qpacket_p.h
index 759ed25145..dda152dfd1 100644
--- a/src/qml/debugger/qpacket_p.h
+++ b/src/plugins/qmltooling/packetprotocol/qpacket_p.h
@@ -31,12 +31,11 @@
**
****************************************************************************/
-#ifndef QPACKET_P_H
-#define QPACKET_P_H
+#ifndef QPACKET_H
+#define QPACKET_H
#include <QtCore/qdatastream.h>
#include <QtCore/qbuffer.h>
-#include <QtQml/private/qtqmlglobal_p.h>
//
// W A R N I N G
@@ -51,26 +50,18 @@
QT_BEGIN_NAMESPACE
-class Q_QML_PRIVATE_EXPORT QPacket : public QDataStream
+class QPacket : public QDataStream
{
public:
- QPacket();
- QPacket(const QPacket &other);
- explicit QPacket(const QByteArray &ba);
- QPacket &operator=(const QPacket &other);
-
+ QPacket(int version);
+ explicit QPacket(int version, const QByteArray &ba);
QByteArray data() const;
- static int dataStreamVersion();
- static void setDataStreamVersion(int dataStreamVersion);
-
private:
- static int s_dataStreamVersion;
void init(QIODevice::OpenMode mode);
- void assign(const QPacket &other);
QBuffer buf;
};
QT_END_NAMESPACE
-#endif // QPACKET_P_H
+#endif // QPACKET_H
diff --git a/src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp b/src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp
index 9f9dbfee90..d576e74e53 100644
--- a/src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp
+++ b/src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp
@@ -36,7 +36,6 @@
#include <QtCore/QElapsedTimer>
#include <private/qiodevice_p.h>
#include <private/qobject_p.h>
-#include <private/qpacket_p.h>
QT_BEGIN_NAMESPACE
@@ -63,9 +62,8 @@ static const int MAX_PACKET_SIZE = 0x7FFFFFFF;
QPacketProtocol does not perform any communications itself. Instead it can
operate on any QIODevice that supports the QIODevice::readyRead() signal. A
- logical "packet" is encapsulated by the companion QPacket class. The
- following example shows two ways to send data using QPacketProtocol. The
- transmitted data is equivalent in both.
+ logical "packet" is simply a QByteArray. The following example how to send
+ data using QPacketProtocol.
\code
QTcpSocket socket;
@@ -74,9 +72,9 @@ static const int MAX_PACKET_SIZE = 0x7FFFFFFF;
QPacketProtocol protocol(&socket);
// Send a packet
- QPacket packet;
+ QDataStream packet;
packet << "Hello world" << 123;
- protocol.send(packet);
+ protocol.send(packet.data());
\endcode
Likewise, the following shows how to read data from QPacketProtocol, assuming
@@ -88,16 +86,12 @@ static const int MAX_PACKET_SIZE = 0x7FFFFFFF;
int a;
QByteArray b;
- // Receive packet the quick way
- protocol.read() >> a >> b;
-
- // Receive packet the longer way
- QPacket packet = protocol.read();
+ // Receive packet
+ QDataStream packet(protocol.read());
p >> a >> b;
\endcode
\ingroup io
- \sa QPacket
*/
class QPacketProtocolPrivate : public QObjectPrivate
@@ -133,15 +127,14 @@ QPacketProtocol::QPacketProtocol(QIODevice *dev, QObject *parent)
}
/*!
- \fn void QPacketProtocol::send(const QPacket & packet)
+ \fn void QPacketProtocol::send(const QByteArray &data)
Transmit the \a packet.
*/
-void QPacketProtocol::send(const QPacket & p)
+void QPacketProtocol::send(const QByteArray &data)
{
Q_D(QPacketProtocol);
- QByteArray data = p.data();
if (data.isEmpty())
return; // We don't send empty packets
qint64 sendSize = data.size() + sizeof(qint32);
@@ -165,15 +158,13 @@ qint64 QPacketProtocol::packetsAvailable() const
}
/*!
- Return the next unread packet, or an invalid QPacket instance if no packets
+ Return the next unread packet, or an empty QByteArray if no packets
are available. This method does NOT block.
*/
-QPacket QPacketProtocol::read()
+QByteArray QPacketProtocol::read()
{
Q_D(QPacketProtocol);
-
- // Hope for in-place construction here, until we get move semantics for QBuffer
- return QPacket(d->packets.isEmpty() ? QByteArray() : d->packets.takeFirst());
+ return d->packets.isEmpty() ? QByteArray() : d->packets.takeFirst();
}
/*!
diff --git a/src/plugins/qmltooling/packetprotocol/qpacketprotocol_p.h b/src/plugins/qmltooling/packetprotocol/qpacketprotocol_p.h
index 6ed803809f..20bbc66418 100644
--- a/src/plugins/qmltooling/packetprotocol/qpacketprotocol_p.h
+++ b/src/plugins/qmltooling/packetprotocol/qpacketprotocol_p.h
@@ -35,7 +35,6 @@
#define QPACKETPROTOCOL_P_H
#include <QtCore/qobject.h>
-#include <private/qpacket_p.h>
//
// W A R N I N G
@@ -60,9 +59,9 @@ class QPacketProtocol : public QObject
public:
explicit QPacketProtocol(QIODevice *dev, QObject *parent = 0);
- void send(const QPacket &);
+ void send(const QByteArray &data);
qint64 packetsAvailable() const;
- QPacket read();
+ QByteArray read();
bool waitForReadyRead(int msecs = 3000);
Q_SIGNALS:
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qdebugmessageservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qdebugmessageservice.cpp
index e7b9f24ae7..6300b2b9c6 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qdebugmessageservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qdebugmessageservice.cpp
@@ -32,10 +32,8 @@
****************************************************************************/
#include "qdebugmessageservice.h"
+#include "qqmldebugpacket.h"
#include <private/qqmldebugconnector_p.h>
-#include <private/qpacket_p.h>
-
-#include <QDataStream>
QT_BEGIN_NAMESPACE
@@ -64,7 +62,7 @@ void QDebugMessageServiceImpl::sendDebugMessage(QtMsgType type,
//We do not want to alter the message handling mechanism
//We just eavesdrop and forward the messages to a port
//only if a client is connected to it.
- QPacket ws;
+ QQmlDebugPacket ws;
ws << QByteArray("MESSAGE") << type << buf.toUtf8();
ws << QString::fromLatin1(ctxt.file).toUtf8();
ws << ctxt.line << QString::fromLatin1(ctxt.function).toUtf8();
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qmldbg_debugger.pro b/src/plugins/qmltooling/qmldbg_debugger/qmldbg_debugger.pro
index b0678ef2d9..9db38d2dfe 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qmldbg_debugger.pro
+++ b/src/plugins/qmltooling/qmldbg_debugger/qmldbg_debugger.pro
@@ -1,5 +1,5 @@
TARGET = qmldbg_debugger
-QT = qml-private core-private
+QT = qml-private core-private packetprotocol-private
PLUGIN_TYPE = qmltooling
PLUGIN_CLASS_NAME = QQmlDebuggerServiceFactory
@@ -19,6 +19,7 @@ SOURCES += \
HEADERS += \
$$PWD/../shared/qqmlconfigurabledebugservice.h \
+ $$PWD/../shared/qqmldebugpacket.h \
$$PWD/qdebugmessageservice.h \
$$PWD/qqmldebuggerservicefactory.h \
$$PWD/qqmlenginedebugservice.h \
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp
index 09c352e8ad..48d940fe75 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp
@@ -33,6 +33,7 @@
#include "qqmlenginedebugservice.h"
#include "qqmlwatcher.h"
+#include "qqmldebugpacket.h"
#include <private/qqmldebugstatesdelegate_p.h>
#include <private/qqmlboundsignal_p.h>
@@ -45,7 +46,6 @@
#include <private/qqmlvaluetype_p.h>
#include <private/qqmlvmemetaobject_p.h>
#include <private/qqmlexpression_p.h>
-#include <private/qpacket_p.h>
#include <QtCore/qdebug.h>
#include <QtCore/qmetaobject.h>
@@ -90,8 +90,7 @@ QDataStream &operator<<(QDataStream &ds,
ds << (int)data.type << data.name;
// check first whether the data can be saved
// (otherwise we assert in QVariant::operator<<)
- QByteArray buffer;
- QDataStream fakeStream(&buffer, QIODevice::WriteOnly);
+ QQmlDebugPacket fakeStream;
if (QMetaType::save(fakeStream, data.value.type(), data.value.constData()))
ds << data.value;
else
@@ -441,13 +440,13 @@ QList<QObject*> QQmlEngineDebugServiceImpl::objectForLocationInfo(const QString
void QQmlEngineDebugServiceImpl::processMessage(const QByteArray &message)
{
- QPacket ds(message);
+ QQmlDebugPacket ds(message);
QByteArray type;
int queryId;
ds >> type >> queryId;
- QPacket rs;
+ QQmlDebugPacket rs;
if (type == "LIST_ENGINES") {
rs << QByteArray("LIST_ENGINES_R");
@@ -769,7 +768,7 @@ bool QQmlEngineDebugServiceImpl::setMethodBody(int objectId, const QString &meth
void QQmlEngineDebugServiceImpl::propertyChanged(int id, int objectId, const QMetaProperty &property, const QVariant &value)
{
- QPacket rs;
+ QQmlDebugPacket rs;
rs << QByteArray("UPDATE_WATCH") << id << objectId << QByteArray(property.name()) << valueContents(value);
emit messageToClient(name(), rs.data());
}
@@ -801,7 +800,7 @@ void QQmlEngineDebugServiceImpl::objectCreated(QQmlEngine *engine, QObject *obje
int objectId = QQmlDebugService::idForObject(object);
int parentId = QQmlDebugService::idForObject(object->parent());
- QPacket rs;
+ QQmlDebugPacket rs;
//unique queryId -1
rs << QByteArray("OBJECT_CREATED") << -1 << engineId << objectId << parentId;
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmlnativedebugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlnativedebugservice.cpp
index f5cc78e77f..6d17ec2ad0 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qqmlnativedebugservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlnativedebugservice.cpp
@@ -32,6 +32,7 @@
****************************************************************************/
#include "qqmlnativedebugservice.h"
+#include "qqmldebugpacket.h"
#include <private/qqmldebugconnector_p.h>
#include <private/qv4debugging_p.h>
@@ -313,16 +314,15 @@ void NativeDebugger::handleCommand(QJsonObject *response, const QString &cmd,
static QString encodeContext(QV4::ExecutionContext *executionContext)
{
- QByteArray ba;
- QDataStream ds(&ba, QIODevice::WriteOnly);
+ QQmlDebugPacket ds;
ds << quintptr(executionContext);
- return QString::fromLatin1(ba.toHex());
+ return QString::fromLatin1(ds.data().toHex());
}
static void decodeContext(const QString &context, QV4::ExecutionContext **executionContext)
{
quintptr rawContext;
- QDataStream ds(QByteArray::fromHex(context.toLatin1()));
+ QQmlDebugPacket ds(QByteArray::fromHex(context.toLatin1()));
ds >> rawContext;
*executionContext = reinterpret_cast<QV4::ExecutionContext *>(rawContext);
}
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp
index 3a080be125..0c8de860ed 100644
--- a/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp
@@ -33,11 +33,12 @@
#include "qv4debugservice.h"
#include "qqmlengine.h"
+#include "qqmldebugpacket.h"
+
#include <private/qv4engine_p.h>
#include <private/qv4isel_moth_p.h>
#include <private/qv4function_p.h>
#include <private/qqmldebugconnector_p.h>
-#include <private/qpacket_p.h>
#include <private/qv8engine_p.h>
#include <QtCore/QJsonArray>
@@ -694,7 +695,7 @@ void QV4DebugServiceImpl::messageReceived(const QByteArray &message)
{
QMutexLocker lock(&m_configMutex);
- QPacket ms(message);
+ QQmlDebugPacket ms(message);
QByteArray header;
ms >> header;
@@ -735,7 +736,7 @@ void QV4DebugServiceImpl::messageReceived(const QByteArray &message)
void QV4DebugServiceImpl::sendSomethingToSomebody(const char *type, int magicNumber)
{
- QPacket rs;
+ QQmlDebugPacket rs;
rs << QByteArray(type)
<< QByteArray::number(int(version())) << QByteArray::number(magicNumber);
emit messageToClient(name(), packMessage(type, rs.data()));
@@ -758,7 +759,7 @@ void QV4DebugServiceImpl::handleV8Request(const QByteArray &payload)
QByteArray QV4DebugServiceImpl::packMessage(const QByteArray &command, const QByteArray &message)
{
- QPacket rs;
+ QQmlDebugPacket rs;
static const QByteArray cmd("V8DEBUG");
rs << cmd << command << message;
return rs.data();
diff --git a/src/plugins/qmltooling/qmldbg_inspector/abstractviewinspector.cpp b/src/plugins/qmltooling/qmldbg_inspector/abstractviewinspector.cpp
index d1bba54969..daf620805f 100644
--- a/src/plugins/qmltooling/qmldbg_inspector/abstractviewinspector.cpp
+++ b/src/plugins/qmltooling/qmldbg_inspector/abstractviewinspector.cpp
@@ -33,6 +33,7 @@
#include "abstractviewinspector.h"
#include "abstracttool.h"
+#include "qqmldebugpacket.h"
#include <QtCore/QDebug>
#include <QtQml/QQmlEngine>
@@ -40,7 +41,6 @@
#include <QtCore/private/qabstractanimation_p.h>
#include <QtQml/private/qqmldebugconnector_p.h>
#include <QtQml/private/qqmlcontext_p.h>
-#include <QtQml/private/qpacket_p.h>
#include <QtGui/QMouseEvent>
#include <QtGui/QTouchEvent>
@@ -263,7 +263,7 @@ void AbstractViewInspector::onQmlObjectDestroyed(QObject *object)
QPair<int, int> ids = m_hashObjectsTobeDestroyed.take(object);
- QPacket rs;
+ QQmlDebugPacket rs;
rs << QByteArray(RESPONSE) << ids.first << true << ids.second;
emit m_debugService->messageToClient(m_debugService->name(), rs.data());
@@ -272,7 +272,7 @@ void AbstractViewInspector::onQmlObjectDestroyed(QObject *object)
void AbstractViewInspector::handleMessage(const QByteArray &message)
{
bool success = true;
- QPacket ds(message);
+ QQmlDebugPacket ds(message);
QByteArray type;
ds >> type;
@@ -357,14 +357,14 @@ void AbstractViewInspector::handleMessage(const QByteArray &message)
}
- QPacket rs;
+ QQmlDebugPacket rs;
rs << QByteArray(RESPONSE) << requestId << success;
emit m_debugService->messageToClient(m_debugService->name(), rs.data());
}
void AbstractViewInspector::sendCurrentObjects(const QList<QObject*> &objects)
{
- QPacket ds;
+ QQmlDebugPacket ds;
ds << QByteArray(EVENT) << m_eventId++ << QByteArray(SELECT);
@@ -384,7 +384,7 @@ void AbstractViewInspector::sendQmlFileReloaded(bool success)
QByteArray response;
- QPacket rs;
+ QQmlDebugPacket rs;
rs << QByteArray(RESPONSE) << m_reloadEventId << success;
emit m_debugService->messageToClient(m_debugService->name(), rs.data());
diff --git a/src/plugins/qmltooling/qmldbg_inspector/qmldbg_inspector.pro b/src/plugins/qmltooling/qmldbg_inspector/qmldbg_inspector.pro
index 1c3e5f387b..dd5cc8ceef 100644
--- a/src/plugins/qmltooling/qmldbg_inspector/qmldbg_inspector.pro
+++ b/src/plugins/qmltooling/qmldbg_inspector/qmldbg_inspector.pro
@@ -1,5 +1,5 @@
TARGET = qmldbg_inspector
-QT += qml-private quick-private core-private gui-private
+QT += qml-private quick-private core-private gui-private packetprotocol-private
PLUGIN_TYPE = qmltooling
PLUGIN_CLASS_NAME = QQmlInspectorServiceFactory
@@ -16,6 +16,7 @@ SOURCES += \
$$PWD/qqmlinspectorservice.cpp
HEADERS += \
+ $$PWD/../shared/qqmldebugpacket.h \
$$PWD/highlight.h \
$$PWD/qquickviewinspector.h \
$$PWD/qqmlinspectorservicefactory.h \
diff --git a/src/plugins/qmltooling/qmldbg_native/qmldbg_native.pro b/src/plugins/qmltooling/qmldbg_native/qmldbg_native.pro
index 8621238eff..d490d77e50 100644
--- a/src/plugins/qmltooling/qmldbg_native/qmldbg_native.pro
+++ b/src/plugins/qmltooling/qmldbg_native/qmldbg_native.pro
@@ -1,15 +1,19 @@
TARGET = qmldbg_native
-QT += qml-private core-private
+QT += qml-private core-private packetprotocol-private
PLUGIN_TYPE = qmltooling
PLUGIN_CLASS_NAME = QQmlNativeDebugConnectorFactory
load(qt_plugin)
HEADERS += \
+ $$PWD/../shared/qqmldebugpacket.h \
$$PWD/qqmlnativedebugconnector.h
SOURCES += \
$$PWD/qqmlnativedebugconnector.cpp
+INCLUDEPATH += $$PWD \
+ $$PWD/../shared
+
OTHER_FILES += \
$$PWD/qqmlnativedebugconnector.json
diff --git a/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.cpp b/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.cpp
index faddaefdc7..7f5529636c 100644
--- a/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.cpp
+++ b/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.cpp
@@ -32,9 +32,9 @@
****************************************************************************/
#include "qqmlnativedebugconnector.h"
-#include <private/qhooks_p.h>
-#include <private/qpacket_p.h>
+#include "qqmldebugpacket.h"
+#include <private/qhooks_p.h>
#include <qqmlengine.h>
#include <QtCore/qdebug.h>
@@ -65,7 +65,7 @@ Q_DECL_EXPORT void qt_qmlDebugConnectorOpen();
// member to some other place.
Q_DECL_EXPORT void qt_qmlDebugSetStreamVersion(int version)
{
- QPacket::setDataStreamVersion(version);
+ QQmlNativeDebugConnector::setDataStreamVersion(version);
}
@@ -311,6 +311,12 @@ bool QQmlNativeDebugConnector::open(const QVariantHash &configuration)
return true;
}
+void QQmlNativeDebugConnector::setDataStreamVersion(int version)
+{
+ Q_ASSERT(version <= QDataStream::Qt_DefaultCompiledVersion);
+ s_dataStreamVersion = version;
+}
+
void QQmlNativeDebugConnector::sendMessage(const QString &name, const QByteArray &message)
{
(*responseBuffer) += name.toUtf8() + ' ' + QByteArray::number(message.size()) + ' ' + message;
diff --git a/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.h b/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.h
index f0d11957a7..d071d54368 100644
--- a/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.h
+++ b/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.h
@@ -54,6 +54,7 @@ public:
bool addService(const QString &name, QQmlDebugService *service);
bool removeService(const QString &name);
bool open(const QVariantHash &configuration);
+ static void setDataStreamVersion(int version);
private slots:
void sendMessage(const QString &name, const QByteArray &message);
diff --git a/src/plugins/qmltooling/qmldbg_profiler/qmldbg_profiler.pro b/src/plugins/qmltooling/qmldbg_profiler/qmldbg_profiler.pro
index e1c4095d88..6efe9eacad 100644
--- a/src/plugins/qmltooling/qmldbg_profiler/qmldbg_profiler.pro
+++ b/src/plugins/qmltooling/qmldbg_profiler/qmldbg_profiler.pro
@@ -1,5 +1,5 @@
TARGET = qmldbg_profiler
-QT = qml-private core-private
+QT = qml-private core-private packetprotocol-private
PLUGIN_TYPE = qmltooling
PLUGIN_CLASS_NAME = QQmlProfilerServiceFactory
@@ -14,6 +14,7 @@ SOURCES += \
HEADERS += \
$$PWD/../shared/qqmlconfigurabledebugservice.h \
+ $$PWD/../shared/qqmldebugpacket.h \
$$PWD/qqmlenginecontrolservice.h \
$$PWD/qqmlprofileradapter.h \
$$PWD/qqmlprofilerservice.h \
diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp b/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp
index b4dfa86e56..61bf61eb13 100644
--- a/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp
@@ -32,8 +32,8 @@
****************************************************************************/
#include "qqmlenginecontrolservice.h"
+#include "qqmldebugpacket.h"
#include <QQmlEngine>
-#include <private/qpacket_p.h>
QT_BEGIN_NAMESPACE
@@ -45,7 +45,7 @@ QQmlEngineControlServiceImpl::QQmlEngineControlServiceImpl(QObject *parent) :
void QQmlEngineControlServiceImpl::messageReceived(const QByteArray &message)
{
QMutexLocker lock(&dataMutex);
- QPacket d(message);
+ QQmlDebugPacket d(message);
int command;
int engineId;
d >> command >> engineId;
@@ -107,7 +107,7 @@ void QQmlEngineControlServiceImpl::engineRemoved(QQmlEngine *engine)
void QQmlEngineControlServiceImpl::sendMessage(QQmlEngineControlServiceImpl::MessageType type, QQmlEngine *engine)
{
- QPacket d;
+ QQmlDebugPacket d;
d << type << idForObject(engine);
emit messageToClient(name(), d.data());
}
diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofileradapter.cpp b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofileradapter.cpp
index 8da6854289..faa1726637 100644
--- a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofileradapter.cpp
+++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofileradapter.cpp
@@ -32,8 +32,9 @@
****************************************************************************/
#include "qqmlprofileradapter.h"
+#include "qqmldebugpacket.h"
+
#include <private/qqmldebugserviceinterfaces_p.h>
-#include <private/qpacket_p.h>
QT_BEGIN_NAMESPACE
@@ -74,7 +75,7 @@ static void qQmlProfilerDataToByteArrays(const QQmlProfilerData *d, QList<QByteA
continue;
//### using QDataStream is relatively expensive
- QPacket ds;
+ QQmlDebugPacket ds;
ds << d->time << decodedMessageType << decodedDetailType;
switch (decodedMessageType) {
diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp
index 77503c5f06..3647a62682 100644
--- a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp
@@ -35,11 +35,11 @@
#include "qv4profileradapter.h"
#include "qqmlprofileradapter.h"
#include "qqmlprofilerservicefactory.h"
+#include "qqmldebugpacket.h"
+
#include <private/qqmlengine_p.h>
-#include <private/qpacket_p.h>
#include <private/qqmldebugpluginmanager_p.h>
-#include <QtCore/qdatastream.h>
#include <QtCore/qurl.h>
#include <QtCore/qtimer.h>
#include <QtCore/qthread.h>
@@ -212,7 +212,7 @@ void QQmlProfilerServiceImpl::startProfiling(QQmlEngine *engine, quint64 feature
{
QMutexLocker lock(&m_configMutex);
- QPacket d;
+ QQmlDebugPacket d;
d << m_timer.nsecsElapsed() << (int)Event << (int)StartTrace;
bool startedAny = false;
@@ -308,7 +308,7 @@ void QQmlProfilerServiceImpl::sendMessages()
{
QList<QByteArray> messages;
- QPacket traceEnd;
+ QQmlDebugPacket traceEnd;
if (m_waitingForStop) {
traceEnd << m_timer.nsecsElapsed() << (int)Event << (int)EndTrace;
@@ -340,7 +340,7 @@ void QQmlProfilerServiceImpl::sendMessages()
//indicate completion
messages << traceEnd.data();
- QPacket ds;
+ QQmlDebugPacket ds;
ds << (qint64)-1 << (int)Complete;
messages << ds.data();
m_waitingForStop = false;
@@ -375,7 +375,7 @@ void QQmlProfilerServiceImpl::messageReceived(const QByteArray &message)
{
QMutexLocker lock(&m_configMutex);
- QPacket stream(message);
+ QQmlDebugPacket stream(message);
int engineId = -1;
quint64 features = std::numeric_limits<quint64>::max();
diff --git a/src/plugins/qmltooling/qmldbg_profiler/qv4profileradapter.cpp b/src/plugins/qmltooling/qmldbg_profiler/qv4profileradapter.cpp
index dd9e444748..2e7051b912 100644
--- a/src/plugins/qmltooling/qmldbg_profiler/qv4profileradapter.cpp
+++ b/src/plugins/qmltooling/qmldbg_profiler/qv4profileradapter.cpp
@@ -33,8 +33,7 @@
#include "qv4profileradapter.h"
#include "qqmlprofilerservice.h"
-
-#include <private/qpacket_p.h>
+#include "qqmldebugpacket.h"
QT_BEGIN_NAMESPACE
@@ -66,7 +65,7 @@ QV4ProfilerAdapter::QV4ProfilerAdapter(QQmlProfilerService *service, QV4::Execut
qint64 QV4ProfilerAdapter::appendMemoryEvents(qint64 until, QList<QByteArray> &messages)
{
while (m_memoryData.length() > m_memoryPos && m_memoryData[m_memoryPos].timestamp <= until) {
- QPacket d;
+ QQmlDebugPacket d;
QV4::Profiling::MemoryAllocationProperties &props = m_memoryData[m_memoryPos];
d << props.timestamp << MemoryAllocation << props.type << props.size;
++m_memoryPos;
@@ -104,7 +103,7 @@ qint64 QV4ProfilerAdapter::sendMessages(qint64 until, QList<QByteArray> &message
return finalizeMessages(until, messages, m_stack.top());
appendMemoryEvents(m_stack.top(), messages);
- QPacket d;
+ QQmlDebugPacket d;
d << m_stack.pop() << RangeEnd << Javascript;
messages.append(d.data());
}
@@ -117,14 +116,14 @@ qint64 QV4ProfilerAdapter::sendMessages(qint64 until, QList<QByteArray> &message
appendMemoryEvents(props.start, messages);
- QPacket d_start;
+ QQmlDebugPacket d_start;
d_start << props.start << RangeStart << Javascript;
messages.push_back(d_start.data());
- QPacket d_location;
+ QQmlDebugPacket d_location;
d_location << props.start << RangeLocation << Javascript << props.file << props.line
<< props.column;
messages.push_back(d_location.data());
- QPacket d_data;
+ QQmlDebugPacket d_data;
d_data << props.start << RangeData << Javascript << props.name;
messages.push_back(d_data.data());
m_stack.push(props.end);
diff --git a/src/plugins/qmltooling/qmldbg_quickprofiler/qmldbg_quickprofiler.pro b/src/plugins/qmltooling/qmldbg_quickprofiler/qmldbg_quickprofiler.pro
index 9cc51c5e70..6ca0a184ca 100644
--- a/src/plugins/qmltooling/qmldbg_quickprofiler/qmldbg_quickprofiler.pro
+++ b/src/plugins/qmltooling/qmldbg_quickprofiler/qmldbg_quickprofiler.pro
@@ -1,5 +1,5 @@
TARGET = qmldbg_quickprofiler
-QT += qml-private quick-private core-private
+QT += qml-private quick-private core-private packetprotocol-private
PLUGIN_TYPE = qmltooling
PLUGIN_CLASS_NAME = QQuickProfilerAdapterFactory
@@ -13,7 +13,8 @@ SOURCES += \
HEADERS += \
$$PWD/qquickprofileradapter.h \
- $$PWD/qquickprofileradapterfactory.h
+ $$PWD/qquickprofileradapterfactory.h \
+ $$PWD/../shared/qqmldebugpacket.h
OTHER_FILES += \
qquickprofileradapter.json
diff --git a/src/plugins/qmltooling/qmldbg_quickprofiler/qquickprofileradapter.cpp b/src/plugins/qmltooling/qmldbg_quickprofiler/qquickprofileradapter.cpp
index 053db9aa45..8438a6fb3a 100644
--- a/src/plugins/qmltooling/qmldbg_quickprofiler/qquickprofileradapter.cpp
+++ b/src/plugins/qmltooling/qmldbg_quickprofiler/qquickprofileradapter.cpp
@@ -32,9 +32,9 @@
****************************************************************************/
#include "qquickprofileradapter.h"
+#include "qqmldebugpacket.h"
#include <QCoreApplication>
#include <private/qqmldebugserviceinterfaces_p.h>
-#include <private/qpacket_p.h>
#include <private/qquickprofiler_p.h>
QT_BEGIN_NAMESPACE
@@ -86,7 +86,7 @@ static void qQuickProfilerDataToByteArrays(const QQuickProfilerData &data,
continue;
//### using QDataStream is relatively expensive
- QPacket ds;
+ QQmlDebugPacket ds;
ds << data.time << decodedMessageType << decodedDetailType;
switch (decodedMessageType) {
diff --git a/src/plugins/qmltooling/qmldbg_server/qmldbg_server.pro b/src/plugins/qmltooling/qmldbg_server/qmldbg_server.pro
index b419f9ca3e..923faa01f3 100644
--- a/src/plugins/qmltooling/qmldbg_server/qmldbg_server.pro
+++ b/src/plugins/qmltooling/qmldbg_server/qmldbg_server.pro
@@ -11,7 +11,8 @@ SOURCES += \
HEADERS += \
$$PWD/qqmldebugserverfactory.h \
$$PWD/../shared/qqmldebugserver.h \
- $$PWD/../shared/qqmldebugserverconnection.h
+ $$PWD/../shared/qqmldebugserverconnection.h \
+ $$PWD/../shared/qqmldebugpacket.h
INCLUDEPATH += $$PWD \
$$PWD/../shared
diff --git a/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp b/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp
index 513aedd568..ba36048802 100644
--- a/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp
+++ b/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp
@@ -34,6 +34,7 @@
#include "qqmldebugserver.h"
#include "qqmldebugserverfactory.h"
#include "qqmldebugserverconnection.h"
+#include "qqmldebugpacket.h"
#include <private/qqmldebugservice_p.h>
#include <private/qqmlengine_p.h>
@@ -41,7 +42,6 @@
#include <private/qqmldebugpluginmanager_p.h>
#include <private/qqmldebugserviceinterfaces_p.h>
#include <private/qpacketprotocol_p.h>
-#include <private/qpacket_p.h>
#include <QtCore/QAtomicInt>
#include <QtCore/QDir>
@@ -429,7 +429,7 @@ void QQmlDebugServerImpl::receiveMessage()
if (!m_protocol)
return;
- QPacket in(m_protocol->read().data());
+ QQmlDebugPacket in(m_protocol->read());
QString name;
@@ -443,17 +443,15 @@ void QQmlDebugServerImpl::receiveMessage()
//Get the supported QDataStream version
if (!in.atEnd()) {
- int dataStreamVersion;
- in >> dataStreamVersion;
- if (dataStreamVersion > QDataStream().version())
- dataStreamVersion = QDataStream().version();
- QPacket::setDataStreamVersion(dataStreamVersion);
+ in >> s_dataStreamVersion;
+ if (s_dataStreamVersion > QDataStream::Qt_DefaultCompiledVersion)
+ s_dataStreamVersion = QDataStream::Qt_DefaultCompiledVersion;
}
// Send the hello answer immediately, since it needs to arrive before
// the plugins below start sending messages.
- QPacket out;
+ QQmlDebugPacket out;
QStringList pluginNames;
QList<float> pluginVersions;
const int count = m_plugins.count();
@@ -466,9 +464,9 @@ void QQmlDebugServerImpl::receiveMessage()
}
out << QString(QStringLiteral("QDeclarativeDebugClient")) << 0 << protocolVersion
- << pluginNames << pluginVersions << QPacket::dataStreamVersion();
+ << pluginNames << pluginVersions << dataStreamVersion();
- m_protocol->send(out);
+ m_protocol->send(out.data());
m_connection->flush();
QMutexLocker helloLock(&m_helloMutex);
@@ -650,9 +648,9 @@ bool QQmlDebugServerImpl::canSendMessage(const QString &name)
void QQmlDebugServerImpl::doSendMessage(const QString &name, const QByteArray &message)
{
- QPacket out;
+ QQmlDebugPacket out;
out << name << message;
- m_protocol->send(out);
+ m_protocol->send(out.data());
}
void QQmlDebugServerImpl::sendMessage(const QString &name, const QByteArray &message)
diff --git a/src/plugins/qmltooling/qmltooling.pro b/src/plugins/qmltooling/qmltooling.pro
index 9345e46cf7..3728126dd9 100644
--- a/src/plugins/qmltooling/qmltooling.pro
+++ b/src/plugins/qmltooling/qmltooling.pro
@@ -1,5 +1,9 @@
TEMPLATE = subdirs
+# Utilities
+SUBDIRS += \
+ packetprotocol
+
# Connectors
SUBDIRS += \
qmldbg_native \
@@ -9,12 +13,18 @@ SUBDIRS += \
# Services
SUBDIRS += \
- packetprotocol \
qmldbg_debugger \
qmldbg_profiler
qmldbg_server.depends = packetprotocol
+qmldbg_native.depends = packetprotocol
+qmldbg_debugger.depends = packetprotocol
+qmldbg_profiler.depends = packetprotocol
-qtHaveModule(quick): SUBDIRS += \
- qmldbg_inspector \
- qmldbg_quickprofiler
+qtHaveModule(quick) {
+ SUBDIRS += \
+ qmldbg_inspector \
+ qmldbg_quickprofiler
+ qmldbg_inspector.depends = packetprotocol
+ qmldbg_quickprofiler.depends = packetprotocol
+}
diff --git a/src/plugins/qmltooling/shared/qqmldebugpacket.h b/src/plugins/qmltooling/shared/qqmldebugpacket.h
new file mode 100644
index 0000000000..459937f411
--- /dev/null
+++ b/src/plugins/qmltooling/shared/qqmldebugpacket.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQMLDEBUGPACKET_P_H
+#define QQMLDEBUGPACKET_P_H
+
+#include <QtCore/qbuffer.h>
+#include <QtQml/private/qqmldebugconnector_p.h>
+#include <QtPacketProtocol/private/qpacket_p.h>
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+QT_BEGIN_NAMESPACE
+
+// QPacket with a fixed data stream version, centrally set by QQmlDebugServer
+class QQmlDebugPacket : public QPacket
+{
+public:
+ QQmlDebugPacket() : QPacket(QQmlDebugConnector::dataStreamVersion()) {}
+ QQmlDebugPacket(const QByteArray &ba) : QPacket(QQmlDebugConnector::dataStreamVersion(), ba) {}
+};
+
+QT_END_NAMESPACE
+
+#endif // QQMLDEBUGPACKET_P_H
diff --git a/src/plugins/qmltooling/shared/qqmldebugserver.h b/src/plugins/qmltooling/shared/qqmldebugserver.h
index a7c17075d9..3807f12214 100644
--- a/src/plugins/qmltooling/shared/qqmldebugserver.h
+++ b/src/plugins/qmltooling/shared/qqmldebugserver.h
@@ -37,6 +37,8 @@
#include <private/qqmldebugconnector_p.h>
#include <private/qtqmlglobal_p.h>
+#include <QtCore/QIODevice>
+
//
// W A R N I N G
// -------------
diff --git a/src/qml/debugger/debugger.pri b/src/qml/debugger/debugger.pri
index 62b375f72f..30a44eedd1 100644
--- a/src/qml/debugger/debugger.pri
+++ b/src/qml/debugger/debugger.pri
@@ -6,8 +6,7 @@ SOURCES += \
$$PWD/qqmldebugservice.cpp \
$$PWD/qqmldebugserviceinterfaces.cpp \
$$PWD/qqmlabstractprofileradapter.cpp \
- $$PWD/qqmlprofiler.cpp \
- $$PWD/qpacket.cpp
+ $$PWD/qqmlprofiler.cpp
HEADERS += \
$$PWD/qqmldebugconnector_p.h \
@@ -19,7 +18,6 @@ HEADERS += \
$$PWD/qqmldebug.h \
$$PWD/qqmlprofilerdefinitions_p.h \
$$PWD/qqmlabstractprofileradapter_p.h \
- $$PWD/qqmlprofiler_p.h \
- $$PWD/qpacket_p.h
+ $$PWD/qqmlprofiler_p.h
INCLUDEPATH += $$PWD
diff --git a/src/qml/debugger/qqmldebugconnector.cpp b/src/qml/debugger/qqmldebugconnector.cpp
index 64a8a49bb9..7d9f462fe2 100644
--- a/src/qml/debugger/qqmldebugconnector.cpp
+++ b/src/qml/debugger/qqmldebugconnector.cpp
@@ -39,6 +39,7 @@
#include <QtCore/QDir>
#include <QtCore/QDebug>
#include <QtCore/QJsonArray>
+#include <QtCore/QDataStream>
#include <private/qcoreapplication_p.h>
#include <private/qqmlengine_p.h>
@@ -56,6 +57,8 @@ Q_QML_IMPORT_DEBUG_PLUGIN(QQmlInspectorServiceFactory)
Q_QML_IMPORT_DEBUG_PLUGIN(QQmlProfilerServiceFactory)
Q_QML_IMPORT_DEBUG_PLUGIN(QQmlDebuggerServiceFactory)
+int QQmlDebugConnector::s_dataStreamVersion = QDataStream::Qt_4_7;
+
struct QQmlDebugConnectorParams {
QString pluginKey;
QStringList services;
diff --git a/src/qml/debugger/qqmldebugconnector_p.h b/src/qml/debugger/qqmldebugconnector_p.h
index f5f5a87b56..499f0ece32 100644
--- a/src/qml/debugger/qqmldebugconnector_p.h
+++ b/src/qml/debugger/qqmldebugconnector_p.h
@@ -60,6 +60,10 @@ public:
static void setPluginKey(const QString &key);
static void setServices(const QStringList &services);
static QQmlDebugConnector *instance();
+ static int dataStreamVersion()
+ {
+ return s_dataStreamVersion;
+ }
virtual bool blockingMode() const = 0;
@@ -82,6 +86,7 @@ public:
protected:
static QString commandLineArguments();
+ static int s_dataStreamVersion;
};
class Q_QML_PRIVATE_EXPORT QQmlDebugConnectorFactory : public QObject {
diff --git a/src/qml/debugger/qqmldebugservice_p.h b/src/qml/debugger/qqmldebugservice_p.h
index 8b58f57349..d95d7c4357 100644
--- a/src/qml/debugger/qqmldebugservice_p.h
+++ b/src/qml/debugger/qqmldebugservice_p.h
@@ -35,7 +35,6 @@
#define QQMLDEBUGSERVICE_H
#include <QtCore/qobject.h>
-#include <QtCore/qdatastream.h>
#include <QtCore/qhash.h>
#include <private/qtqmlglobal_p.h>
diff --git a/src/qmldebug/qqmldebugclient.cpp b/src/qmldebug/qqmldebugclient.cpp
index 6f27cede4b..b5d1130f88 100644
--- a/src/qmldebug/qqmldebugclient.cpp
+++ b/src/qmldebug/qqmldebugclient.cpp
@@ -105,6 +105,12 @@ void QQmlDebugClient::sendMessage(const QByteArray &message)
d->connection->sendMessage(d->name, message);
}
+const QQmlDebugConnection *QQmlDebugClient::connection() const
+{
+ Q_D(const QQmlDebugClient);
+ return d->connection;
+}
+
void QQmlDebugClient::stateChanged(QQmlDebugClient::State state)
{
Q_UNUSED(state);
diff --git a/src/qmldebug/qqmldebugclient_p.h b/src/qmldebug/qqmldebugclient_p.h
index 997e6879cf..8e8330f317 100644
--- a/src/qmldebug/qqmldebugclient_p.h
+++ b/src/qmldebug/qqmldebugclient_p.h
@@ -68,6 +68,8 @@ public:
State state() const;
void sendMessage(const QByteArray &message);
+ const QQmlDebugConnection *connection() const;
+
protected:
QQmlDebugClient(QQmlDebugClientPrivate &dd);
diff --git a/src/qmldebug/qqmldebugconnection.cpp b/src/qmldebug/qqmldebugconnection.cpp
index b4ced0580e..e8650ebbff 100644
--- a/src/qmldebug/qqmldebugconnection.cpp
+++ b/src/qmldebug/qqmldebugconnection.cpp
@@ -64,7 +64,8 @@ public:
QTimer handshakeTimer;
bool gotHello;
- int dataStreamVersion;
+ int currentDataStreamVersion;
+ int maximumDataStreamVersion;
QHash <QString, float> serverPlugins;
QHash<QString, QQmlDebugClient *> plugins;
QStringList removedPlugins;
@@ -75,7 +76,9 @@ public:
};
QQmlDebugConnectionPrivate::QQmlDebugConnectionPrivate() :
- protocol(0), device(0), server(0), gotHello(false), dataStreamVersion(QDataStream::Qt_5_0)
+ protocol(0), device(0), server(0), gotHello(false),
+ currentDataStreamVersion(QDataStream::Qt_4_7),
+ maximumDataStreamVersion(QDataStream::Qt_DefaultCompiledVersion)
{
handshakeTimer.setSingleShot(true);
handshakeTimer.setInterval(3000);
@@ -87,18 +90,18 @@ void QQmlDebugConnectionPrivate::advertisePlugins()
if (!q->isConnected())
return;
- QPacket pack;
+ QPacket pack(currentDataStreamVersion);
pack << serverId << 1 << plugins.keys();
- protocol->send(pack);
+ protocol->send(pack.data());
flush();
}
void QQmlDebugConnection::socketConnected()
{
Q_D(QQmlDebugConnection);
- QPacket pack;
- pack << serverId << 0 << protocolVersion << d->plugins.keys() << d->dataStreamVersion;
- d->protocol->send(pack);
+ QPacket pack(d->currentDataStreamVersion);
+ pack << serverId << 0 << protocolVersion << d->plugins.keys() << d->maximumDataStreamVersion;
+ d->protocol->send(pack.data());
d->flush();
}
@@ -112,7 +115,7 @@ void QQmlDebugConnection::protocolReadyRead()
{
Q_D(QQmlDebugConnection);
if (!d->gotHello) {
- QPacket pack = d->protocol->read();
+ QPacket pack(d->currentDataStreamVersion, d->protocol->read());
QString name;
pack >> name;
@@ -140,7 +143,7 @@ void QQmlDebugConnection::protocolReadyRead()
d->serverPlugins.insert(pluginNames.at(i), pluginVersion);
}
- pack >> d->dataStreamVersion;
+ pack >> d->currentDataStreamVersion;
validHello = true;
}
}
@@ -167,7 +170,7 @@ void QQmlDebugConnection::protocolReadyRead()
}
while (d->protocol->packetsAvailable()) {
- QPacket pack = d->protocol->read();
+ QPacket pack(d->currentDataStreamVersion, d->protocol->read());
QString name;
pack >> name;
@@ -252,16 +255,16 @@ QQmlDebugConnection::~QQmlDebugConnection()
iter.value()->stateChanged(QQmlDebugClient::NotConnected);
}
-void QQmlDebugConnection::setDataStreamVersion(int dataStreamVersion)
+int QQmlDebugConnection::currentDataStreamVersion() const
{
- Q_D(QQmlDebugConnection);
- d->dataStreamVersion = dataStreamVersion;
+ Q_D(const QQmlDebugConnection);
+ return d->currentDataStreamVersion;
}
-int QQmlDebugConnection::dataStreamVersion()
+void QQmlDebugConnection::setMaximumDataStreamVersion(int maximumVersion)
{
Q_D(QQmlDebugConnection);
- return d->dataStreamVersion;
+ d->maximumDataStreamVersion = maximumVersion;
}
bool QQmlDebugConnection::isConnected() const
@@ -345,9 +348,9 @@ bool QQmlDebugConnection::sendMessage(const QString &name, const QByteArray &mes
if (!isConnected() || !d->serverPlugins.contains(name))
return false;
- QPacket pack;
+ QPacket pack(d->currentDataStreamVersion);
pack << name << message;
- d->protocol->send(pack);
+ d->protocol->send(pack.data());
d->flush();
return true;
diff --git a/src/qmldebug/qqmldebugconnection_p.h b/src/qmldebug/qqmldebugconnection_p.h
index b3845b95a0..31a4d7167a 100644
--- a/src/qmldebug/qqmldebugconnection_p.h
+++ b/src/qmldebug/qqmldebugconnection_p.h
@@ -63,8 +63,8 @@ public:
void connectToHost(const QString &hostName, quint16 port);
void startLocalServer(const QString &fileName);
- void setDataStreamVersion(int dataStreamVersion);
- int dataStreamVersion();
+ int currentDataStreamVersion() const;
+ void setMaximumDataStreamVersion(int maximumVersion);
bool isConnected() const;
void close();
diff --git a/src/qmldebug/qqmlprofilerclient.cpp b/src/qmldebug/qqmlprofilerclient.cpp
index 1ac0ba9095..f38884c309 100644
--- a/src/qmldebug/qqmlprofilerclient.cpp
+++ b/src/qmldebug/qqmlprofilerclient.cpp
@@ -32,8 +32,7 @@
****************************************************************************/
#include "qqmlprofilerclient_p_p.h"
-
-#include <QtCore/qdatastream.h>
+#include "qqmldebugconnection_p.h"
QT_BEGIN_NAMESPACE
@@ -63,10 +62,9 @@ void QQmlProfilerClient::sendRecordingStatus(bool record, int engineId, quint32
{
Q_D(const QQmlProfilerClient);
- QByteArray ba;
- QDataStream stream(&ba, QIODevice::WriteOnly);
+ QPacket stream(d->connection->currentDataStreamVersion());
stream << record << engineId << d->features << flushInterval;
- sendMessage(ba);
+ sendMessage(stream.data());
}
void QQmlProfilerClient::traceStarted(qint64 time, int engineId)
@@ -172,7 +170,7 @@ void QQmlProfilerClient::unknownEvent(QQmlProfilerDefinitions::Message messageTy
Q_UNUSED(detailType);
}
-void QQmlProfilerClient::unknownData(QDataStream &stream)
+void QQmlProfilerClient::unknownData(QPacket &stream)
{
Q_UNUSED(stream);
}
@@ -202,8 +200,7 @@ void QQmlProfilerClient::messageReceived(const QByteArray &data)
{
Q_D(const QQmlProfilerClient);
- QByteArray rwData = data;
- QDataStream stream(&rwData, QIODevice::ReadOnly);
+ QPacket stream(d->connection->currentDataStreamVersion(), data);
// Force all the 1 << <FLAG> expressions to be done in 64 bit, to silence some warnings
const quint64 one = static_cast<quint64>(1);
diff --git a/src/qmldebug/qqmlprofilerclient_p.h b/src/qmldebug/qqmlprofilerclient_p.h
index f00fbd873a..0513bef608 100644
--- a/src/qmldebug/qqmlprofilerclient_p.h
+++ b/src/qmldebug/qqmlprofilerclient_p.h
@@ -37,6 +37,7 @@
#include "qqmldebugclient_p.h"
#include "qqmleventlocation_p.h"
#include <private/qqmlprofilerdefinitions_p.h>
+#include <private/qpacket_p.h>
//
// W A R N I N G
@@ -99,7 +100,7 @@ private:
virtual void unknownEvent(QQmlProfilerDefinitions::Message messageType, qint64 time,
int detailType);
- virtual void unknownData(QDataStream &stream);
+ virtual void unknownData(QPacket &stream);
};
QT_END_NAMESPACE