aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@nokia.com>2011-12-20 16:54:50 +0100
committerQt by Nokia <qt-info@nokia.com>2011-12-21 14:42:29 +0100
commit3c211558f6b571555558bd1fc59774e36a6da710 (patch)
treea6b09e799aaa1d10692c39c9bc3128ca58781e25
parent3d8986d7475ef6fdd04ea1286d840d2b570133a0 (diff)
Debugger: Allow transmissions of network packets in one go
We did call a flush() after every single packet, which was slowing down things especially for the QDeclarativeDebugTrace service. Change-Id: Idab074941a22364e154502eb12afa43b4dd33c22 Reviewed-by: Aurindam Jana <aurindam.jana@nokia.com> Reviewed-by: Christiaan Janssen <christiaan.janssen@nokia.com>
-rw-r--r--src/declarative/debugger/qdeclarativedebugserver.cpp26
-rw-r--r--src/declarative/debugger/qdeclarativedebugserver_p.h4
-rw-r--r--src/declarative/debugger/qdeclarativedebugserverconnection_p.h2
-rw-r--r--src/declarative/debugger/qdeclarativedebugservice.cpp7
-rw-r--r--src/declarative/debugger/qdeclarativedebugservice_p.h1
-rw-r--r--src/declarative/debugger/qdeclarativedebugtrace.cpp5
-rw-r--r--src/declarative/debugger/qv8profilerservice.cpp4
-rw-r--r--src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp11
-rw-r--r--src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.h2
9 files changed, 38 insertions, 24 deletions
diff --git a/src/declarative/debugger/qdeclarativedebugserver.cpp b/src/declarative/debugger/qdeclarativedebugserver.cpp
index df5c5f15cb..2914f6d151 100644
--- a/src/declarative/debugger/qdeclarativedebugserver.cpp
+++ b/src/declarative/debugger/qdeclarativedebugserver.cpp
@@ -106,7 +106,7 @@ public:
private:
// private slot
- void _q_sendMessage(const QByteArray &message);
+ void _q_sendMessages(const QList<QByteArray> &messages);
};
class QDeclarativeDebugServerThread : public QThread
@@ -134,6 +134,8 @@ QDeclarativeDebugServerPrivate::QDeclarativeDebugServerPrivate() :
gotHello(false),
thread(0)
{
+ // used in _q_sendMessages
+ qRegisterMetaType<QList<QByteArray> >("QList<QByteArray>");
}
void QDeclarativeDebugServerPrivate::advertisePlugins()
@@ -155,7 +157,7 @@ void QDeclarativeDebugServerPrivate::advertisePlugins()
out << QString(QLatin1String("QDeclarativeDebugClient")) << 1 << pluginNames << pluginVersions;
}
- QMetaObject::invokeMethod(q, "_q_sendMessage", Qt::QueuedConnection, Q_ARG(QByteArray, message));
+ QMetaObject::invokeMethod(q, "_q_sendMessages", Qt::QueuedConnection, Q_ARG(QList<QByteArray>, QList<QByteArray>() << message));
}
QDeclarativeDebugServerConnection *QDeclarativeDebugServerPrivate::loadConnectionPlugin(
@@ -368,7 +370,7 @@ void QDeclarativeDebugServer::receiveMessage(const QByteArray &message)
out << QString(QLatin1String("QDeclarativeDebugClient")) << 0 << protocolVersion << pluginNames << pluginVersions;
}
- d->connection->send(helloAnswer);
+ d->connection->send(QList<QByteArray>() << helloAnswer);
d->gotHello = true;
@@ -434,10 +436,10 @@ void QDeclarativeDebugServer::receiveMessage(const QByteArray &message)
}
}
-void QDeclarativeDebugServerPrivate::_q_sendMessage(const QByteArray &message)
+void QDeclarativeDebugServerPrivate::_q_sendMessages(const QList<QByteArray> &messages)
{
if (connection)
- connection->send(message);
+ connection->send(messages);
}
QList<QDeclarativeDebugService*> QDeclarativeDebugServer::services() const
@@ -495,16 +497,18 @@ bool QDeclarativeDebugServer::removeService(QDeclarativeDebugService *service)
return true;
}
-void QDeclarativeDebugServer::sendMessage(QDeclarativeDebugService *service,
- const QByteArray &message)
+void QDeclarativeDebugServer::sendMessages(QDeclarativeDebugService *service,
+ const QList<QByteArray> &messages)
{
- QByteArray msg;
- {
- QDataStream out(&msg, QIODevice::WriteOnly);
+ QList<QByteArray> prefixedMessages;
+ foreach (const QByteArray &message, messages) {
+ QByteArray prefixed;
+ QDataStream out(&prefixed, QIODevice::WriteOnly);
out << service->name() << message;
+ prefixedMessages << prefixed;
}
- QMetaObject::invokeMethod(this, "_q_sendMessage", Qt::QueuedConnection, Q_ARG(QByteArray, msg));
+ QMetaObject::invokeMethod(this, "_q_sendMessages", Qt::QueuedConnection, Q_ARG(QList<QByteArray>, prefixedMessages));
}
bool QDeclarativeDebugServer::waitForMessage(QDeclarativeDebugService *service)
diff --git a/src/declarative/debugger/qdeclarativedebugserver_p.h b/src/declarative/debugger/qdeclarativedebugserver_p.h
index 23a38b3cd3..806a1f11e0 100644
--- a/src/declarative/debugger/qdeclarativedebugserver_p.h
+++ b/src/declarative/debugger/qdeclarativedebugserver_p.h
@@ -89,14 +89,14 @@ public:
void receiveMessage(const QByteArray &message);
bool waitForMessage(QDeclarativeDebugService *service);
- void sendMessage(QDeclarativeDebugService *service, const QByteArray &message);
+ void sendMessages(QDeclarativeDebugService *service, const QList<QByteArray> &messages);
private:
friend class QDeclarativeDebugService;
friend class QDeclarativeDebugServicePrivate;
friend class QDeclarativeDebugServerThread;
QDeclarativeDebugServer();
- Q_PRIVATE_SLOT(d_func(), void _q_sendMessage(QByteArray))
+ Q_PRIVATE_SLOT(d_func(), void _q_sendMessages(QList<QByteArray>))
};
QT_END_NAMESPACE
diff --git a/src/declarative/debugger/qdeclarativedebugserverconnection_p.h b/src/declarative/debugger/qdeclarativedebugserverconnection_p.h
index a3e439dfd6..f001780fe9 100644
--- a/src/declarative/debugger/qdeclarativedebugserverconnection_p.h
+++ b/src/declarative/debugger/qdeclarativedebugserverconnection_p.h
@@ -71,7 +71,7 @@ public:
virtual void setServer(QDeclarativeDebugServer *server) = 0;
virtual void setPort(int port, bool bock) = 0;
virtual bool isConnected() const = 0;
- virtual void send(const QByteArray &message) = 0;
+ virtual void send(const QList<QByteArray> &messages) = 0;
virtual void disconnect() = 0;
virtual bool waitForMessage() = 0;
};
diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp
index 560654099f..23ee4a3548 100644
--- a/src/declarative/debugger/qdeclarativedebugservice.cpp
+++ b/src/declarative/debugger/qdeclarativedebugservice.cpp
@@ -230,12 +230,17 @@ QString QDeclarativeDebugService::objectToString(QObject *obj)
void QDeclarativeDebugService::sendMessage(const QByteArray &message)
{
+ sendMessages(QList<QByteArray>() << message);
+}
+
+void QDeclarativeDebugService::sendMessages(const QList<QByteArray> &messages)
+{
Q_D(QDeclarativeDebugService);
if (status() != Enabled)
return;
- d->server->sendMessage(this, message);
+ d->server->sendMessages(this, messages);
}
bool QDeclarativeDebugService::waitForMessage()
diff --git a/src/declarative/debugger/qdeclarativedebugservice_p.h b/src/declarative/debugger/qdeclarativedebugservice_p.h
index 9698f91cbc..b9831cbf96 100644
--- a/src/declarative/debugger/qdeclarativedebugservice_p.h
+++ b/src/declarative/debugger/qdeclarativedebugservice_p.h
@@ -81,6 +81,7 @@ public:
Status status() const;
void sendMessage(const QByteArray &);
+ void sendMessages(const QList<QByteArray> &);
bool waitForMessage();
static int idForObject(QObject *);
diff --git a/src/declarative/debugger/qdeclarativedebugtrace.cpp b/src/declarative/debugger/qdeclarativedebugtrace.cpp
index 724399df7e..6bce7d769c 100644
--- a/src/declarative/debugger/qdeclarativedebugtrace.cpp
+++ b/src/declarative/debugger/qdeclarativedebugtrace.cpp
@@ -280,9 +280,10 @@ void QDeclarativeDebugTrace::setProfilingEnabled(bool enable)
void QDeclarativeDebugTrace::sendMessages()
{
QMutexLocker locker(&m_mutex);
- //### this is a suboptimal way to send batched messages
+ QList<QByteArray> messages;
for (int i = 0; i < m_data.count(); ++i)
- sendMessage(m_data.at(i).toByteArray());
+ messages << m_data.at(i).toByteArray();
+ QDeclarativeDebugService::sendMessages(messages);
m_data.clear();
//indicate completion
diff --git a/src/declarative/debugger/qv8profilerservice.cpp b/src/declarative/debugger/qv8profilerservice.cpp
index f5c980ee78..2c8ed36722 100644
--- a/src/declarative/debugger/qv8profilerservice.cpp
+++ b/src/declarative/debugger/qv8profilerservice.cpp
@@ -241,8 +241,10 @@ void QV8ProfilerServicePrivate::sendMessages()
{
Q_Q(QV8ProfilerService);
+ QList<QByteArray> messages;
for (int i = 0; i < m_data.count(); ++i)
- q->sendMessage(m_data.at(i).toByteArray());
+ messages << m_data.at(i).toByteArray();
+ q->sendMessages(messages);
m_data.clear();
//indicate completion
diff --git a/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp
index f9bf9ddbaa..caaefbf0de 100644
--- a/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp
+++ b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp
@@ -96,7 +96,7 @@ bool QTcpServerConnection::isConnected() const
return d->socket && d->socket->state() == QTcpSocket::ConnectedState;
}
-void QTcpServerConnection::send(const QByteArray &message)
+void QTcpServerConnection::send(const QList<QByteArray> &messages)
{
Q_D(QTcpServerConnection);
@@ -104,10 +104,11 @@ void QTcpServerConnection::send(const QByteArray &message)
|| !d->protocol || !d->socket)
return;
- QPacket pack;
- pack.writeRawData(message.data(), message.length());
-
- d->protocol->send(pack);
+ foreach (const QByteArray &message, messages) {
+ QPacket pack;
+ pack.writeRawData(message.data(), message.length());
+ d->protocol->send(pack);
+ }
d->socket->flush();
}
diff --git a/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.h b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.h
index 315f55a8e3..e6cba92327 100644
--- a/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.h
+++ b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.h
@@ -65,7 +65,7 @@ public:
void setPort(int port, bool bock);
bool isConnected() const;
- void send(const QByteArray &message);
+ void send(const QList<QByteArray> &messages);
void disconnect();
bool waitForMessage();