From: Manuel Nickschas Date: Wed, 29 Jan 2014 00:36:49 +0000 (+0100) Subject: DataStreamPeer: Optimize the InitData message X-Git-Tag: 0.10-beta1~23 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=d1d1e6ef1d2073d629bf54fd8e0d31f647f9cb88;hp=89aa3d278f7b5fac996f0b9480737e5932d54c41 DataStreamPeer: Optimize the InitData message Since an InitData message consists of the usual message header (serialized as a QVariantList) followed by a QVariantMap, we can do what we did in a few other places already; transform the map into a list of key-value pairs, the keys being UTF-8 strings (as QByteArrays) instead of QStrings, and append that list to the rest of the message. This is just a small optimization, but straightforward to do without changing protocol semantics or introspecting payloads. And since we send lots of InitData messages, saving even a few bytes per message may be worth it. --- diff --git a/src/common/protocols/datastream/datastreampeer.cpp b/src/common/protocols/datastream/datastreampeer.cpp index a1b4e910..86fbf53a 100644 --- a/src/common/protocols/datastream/datastreampeer.cpp +++ b/src/common/protocols/datastream/datastreampeer.cpp @@ -383,13 +383,15 @@ void DataStreamPeer::handlePackedFunc(const QVariantList &packedFunc) break; } case InitData: { - if (params.count() != 3) { + if (params.count() < 2) { qWarning() << Q_FUNC_INFO << "Received invalid InitData:" << params; return; } - QByteArray className = params[0].toByteArray(); - QString objectName = QString::fromUtf8(params[1].toByteArray()); - QVariantMap initData = params[2].toMap(); + QByteArray className = params.takeFirst().toByteArray(); + QString objectName = QString::fromUtf8(params.takeFirst().toByteArray()); + QVariantMap initData; + for (int i = 0; i < params.count()/2; ++i) + initData[QString::fromUtf8(params[2*i].toByteArray())] = params[2*i+1]; handle(Protocol::InitData(className, objectName, initData)); break; } @@ -436,7 +438,13 @@ void DataStreamPeer::dispatch(const Protocol::InitRequest &msg) void DataStreamPeer::dispatch(const Protocol::InitData &msg) { - dispatchPackedFunc(QVariantList() << (qint16)InitData << msg.className << msg.objectName.toUtf8() << msg.initData); + QVariantList initData; + QVariantMap::const_iterator it = msg.initData.begin(); + while (it != msg.initData.end()) { + initData << it.key().toUtf8() << it.value(); + ++it; + } + dispatchPackedFunc(QVariantList() << (qint16)InitData << msg.className << msg.objectName.toUtf8() << initData); }