aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp31
-rw-r--r--src/qmldebug/qqmldebugconnection.cpp13
2 files changed, 32 insertions, 12 deletions
diff --git a/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp b/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp
index a5f9ed9a1a..7c18f0c38a 100644
--- a/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp
+++ b/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp
@@ -186,6 +186,7 @@ private:
QStringList m_clientPlugins;
bool m_gotHello;
bool m_blockingMode;
+ bool m_clientSupportsMultiPackets;
QHash<QJSEngine *, EngineCondition> m_engineConditions;
@@ -274,7 +275,8 @@ static void cleanupOnShutdown()
QQmlDebugServerImpl::QQmlDebugServerImpl() :
m_connection(0),
m_gotHello(false),
- m_blockingMode(false)
+ m_blockingMode(false),
+ m_clientSupportsMultiPackets(false)
{
static bool postRoutineAdded = false;
if (!postRoutineAdded) {
@@ -456,6 +458,11 @@ void QQmlDebugServerImpl::receiveMessage()
s_dataStreamVersion = QDataStream::Qt_DefaultCompiledVersion;
}
+ if (!in.atEnd())
+ in >> m_clientSupportsMultiPackets;
+ else
+ m_clientSupportsMultiPackets = false;
+
// Send the hello answer immediately, since it needs to arrive before
// the plugins below start sending messages.
@@ -516,14 +523,16 @@ void QQmlDebugServerImpl::receiveMessage()
} else {
if (m_gotHello) {
- QByteArray message;
- in >> message;
-
QHash<QString, QQmlDebugService *>::Iterator iter = m_plugins.find(name);
if (iter == m_plugins.end()) {
qWarning() << "QML Debugger: Message received for missing plugin" << name << '.';
} else {
- (*iter)->messageReceived(message);
+ QQmlDebugService *service = *iter;
+ QByteArray message;
+ while (!in.atEnd()) {
+ in >> message;
+ service->messageReceived(message);
+ }
}
} else {
qWarning("QML Debugger: Invalid hello message.");
@@ -686,8 +695,16 @@ void QQmlDebugServerImpl::sendMessage(const QString &name, const QByteArray &mes
void QQmlDebugServerImpl::sendMessages(const QString &name, const QList<QByteArray> &messages)
{
if (canSendMessage(name)) {
- foreach (const QByteArray &message, messages)
- doSendMessage(name, message);
+ if (m_clientSupportsMultiPackets) {
+ QQmlDebugPacket out;
+ out << name;
+ foreach (const QByteArray &message, messages)
+ out << message;
+ m_protocol->send(out.data());
+ } else {
+ foreach (const QByteArray &message, messages)
+ doSendMessage(name, message);
+ }
m_connection->flush();
}
}
diff --git a/src/qmldebug/qqmldebugconnection.cpp b/src/qmldebug/qqmldebugconnection.cpp
index 37b66889cd..35a540bff8 100644
--- a/src/qmldebug/qqmldebugconnection.cpp
+++ b/src/qmldebug/qqmldebugconnection.cpp
@@ -106,7 +106,8 @@ void QQmlDebugConnection::socketConnected()
{
Q_D(QQmlDebugConnection);
QPacket pack(d->currentDataStreamVersion);
- pack << serverId << 0 << protocolVersion << d->plugins.keys() << d->maximumDataStreamVersion;
+ pack << serverId << 0 << protocolVersion << d->plugins.keys() << d->maximumDataStreamVersion
+ << true; // We accept multiple messages per packet
d->protocol->send(pack.data());
d->flush();
}
@@ -221,9 +222,6 @@ void QQmlDebugConnection::protocolReadyRead()
qWarning() << "QQmlDebugConnection: Unknown control message id" << op;
}
} else {
- QByteArray message;
- pack >> message;
-
QHash<QString, QQmlDebugClient *>::Iterator iter = d->plugins.find(name);
if (iter == d->plugins.end()) {
// We can get more messages for plugins we have removed because it takes time to
@@ -232,7 +230,12 @@ void QQmlDebugConnection::protocolReadyRead()
qWarning() << "QQmlDebugConnection: Message received for missing plugin"
<< name;
} else {
- (*iter)->messageReceived(message);
+ QQmlDebugClient *client = *iter;
+ QByteArray message;
+ while (!pack.atEnd()) {
+ pack >> message;
+ client->messageReceived(message);
+ }
}
}
}