From 3a2691c66365302e5ec7dcb97697ec565eeb743e Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Thu, 3 Mar 2016 11:52:30 +0100 Subject: [PATCH] QmlDebug: Support multiple messages per packet Sending multiple messages in a packet can dramatically reduce the protocol overhead. QmlProfiler messages are only 26 bytes long, on average. The "CanvasFrameRate" name, which is prepended to each packet is 15 bytes long, not counting extra bytes for length information. Change-Id: I67087cefc1f6bd72ba960414672b048015179869 Reviewed-by: Joerg Bornemann --- src/libs/qmldebug/qmldebugclient.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/libs/qmldebug/qmldebugclient.cpp b/src/libs/qmldebug/qmldebugclient.cpp index 40b1b3d4c13..a35fc0b3052 100644 --- a/src/libs/qmldebug/qmldebugclient.cpp +++ b/src/libs/qmldebug/qmldebugclient.cpp @@ -122,7 +122,8 @@ void QmlDebugConnection::socketConnected() { Q_D(QmlDebugConnection); 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(); } @@ -254,14 +255,17 @@ void QmlDebugConnection::protocolReadyRead() qWarning() << "QML Debug Client: Unknown control message id" << op; } } else { - QByteArray message; - pack >> message; - QHash::Iterator iter = d->plugins.find(name); - if (iter == d->plugins.end()) + if (iter == d->plugins.end()) { qWarning() << "QML Debug Client: Message received for missing plugin" << name; - else - (*iter)->messageReceived(message); + } else { + QmlDebugClient *client = *iter; + QByteArray message; + while (!pack.atEnd()) { + pack >> message; + client->messageReceived(message); + } + } } } }