diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:18:55 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:18:55 (GMT) |
commit | e5fcad302d86d316390c6b0f62759a067313e8a9 (patch) | |
tree | c2afbf6f1066b6ce261f14341cf6d310e5595bc1 /tests/auto/qdbusperformance | |
download | Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2 |
Long live Qt 4.5!
Diffstat (limited to 'tests/auto/qdbusperformance')
-rw-r--r-- | tests/auto/qdbusperformance/.gitignore | 2 | ||||
-rw-r--r-- | tests/auto/qdbusperformance/qdbusperformance.pro | 8 | ||||
-rw-r--r-- | tests/auto/qdbusperformance/server/server.cpp | 64 | ||||
-rw-r--r-- | tests/auto/qdbusperformance/server/server.pro | 5 | ||||
-rw-r--r-- | tests/auto/qdbusperformance/serverobject.h | 115 | ||||
-rw-r--r-- | tests/auto/qdbusperformance/test/test.pro | 7 | ||||
-rw-r--r-- | tests/auto/qdbusperformance/tst_qdbusperformance.cpp | 234 |
7 files changed, 435 insertions, 0 deletions
diff --git a/tests/auto/qdbusperformance/.gitignore b/tests/auto/qdbusperformance/.gitignore new file mode 100644 index 0000000..4cd8399 --- /dev/null +++ b/tests/auto/qdbusperformance/.gitignore @@ -0,0 +1,2 @@ +tst_qdbusperformance +server/server diff --git a/tests/auto/qdbusperformance/qdbusperformance.pro b/tests/auto/qdbusperformance/qdbusperformance.pro new file mode 100644 index 0000000..6880518 --- /dev/null +++ b/tests/auto/qdbusperformance/qdbusperformance.pro @@ -0,0 +1,8 @@ +load(qttest_p4) +contains(QT_CONFIG,dbus): { + TEMPLATE = subdirs + CONFIG += ordered + SUBDIRS = server test +} else { + SOURCES += ../qdbusmarshall/dummy.cpp +} diff --git a/tests/auto/qdbusperformance/server/server.cpp b/tests/auto/qdbusperformance/server/server.cpp new file mode 100644 index 0000000..06087bd --- /dev/null +++ b/tests/auto/qdbusperformance/server/server.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** 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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <QtCore/QtCore> +#include <QtDBus/QtDBus> + +#include "../serverobject.h" + +static const char serviceName[] = "com.trolltech.autotests.performance"; +static const char objectPath[] = "/"; + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + + QDBusConnection con = QDBusConnection::sessionBus(); + if (!con.isConnected()) + exit(1); + + if (!con.registerService(serviceName)) + exit(2); + + ServerObject obj(objectPath, con); + printf("ready.\n"); + return app.exec(); +} + diff --git a/tests/auto/qdbusperformance/server/server.pro b/tests/auto/qdbusperformance/server/server.pro new file mode 100644 index 0000000..30f81dd --- /dev/null +++ b/tests/auto/qdbusperformance/server/server.pro @@ -0,0 +1,5 @@ +SOURCES = server.cpp +HEADERS = ../serverobject.h +TARGET = server +CONFIG += qdbus +QT -= gui diff --git a/tests/auto/qdbusperformance/serverobject.h b/tests/auto/qdbusperformance/serverobject.h new file mode 100644 index 0000000..e4c881a --- /dev/null +++ b/tests/auto/qdbusperformance/serverobject.h @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** 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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifndef SERVEROBJECT_H +#define SERVEROBJECT_H + +#include <QObject> +#include <QtDBus/QtDBus> + +class ServerObject: public QObject +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "com.trolltech.autotests.Performance") +public: + ServerObject(const QString &objectPath, QDBusConnection conn, QObject *parent = 0) + : QObject(parent) + { + conn.registerObject(objectPath, this, QDBusConnection::ExportAllSlots); + } + +public slots: + Q_NOREPLY void noReply(const QByteArray &) + { + // black hole + } + Q_NOREPLY void noReply(const QString &) + { + // black hole + } + Q_NOREPLY void noReply(const QDBusVariant &) + { + // black hole + } + + int size(const QByteArray &data) + { + return data.size(); + } + int size(const QString &data) + { + return data.size(); + } + int size(const QDBusVariant &data) + { + QVariant v = data.variant(); + switch (v.type()) + { + case QVariant::ByteArray: + return v.toByteArray().size(); + case QVariant::StringList: + return v.toStringList().size(); + case QVariant::String: + default: + return v.toString().size(); + } + } + + QByteArray echo(const QByteArray &data) + { + return data; + } + QString echo(const QString &data) + { + return data; + } + QDBusVariant echo(const QDBusVariant &data) + { + return data; + } + + void nothing() + { + } +}; + +#endif diff --git a/tests/auto/qdbusperformance/test/test.pro b/tests/auto/qdbusperformance/test/test.pro new file mode 100644 index 0000000..9f5712e --- /dev/null +++ b/tests/auto/qdbusperformance/test/test.pro @@ -0,0 +1,7 @@ +load(qttest_p4) +SOURCES += ../tst_qdbusperformance.cpp +HEADERS += ../serverobject.h +TARGET = ../tst_qdbusperformance + +QT = core +CONFIG += qdbus diff --git a/tests/auto/qdbusperformance/tst_qdbusperformance.cpp b/tests/auto/qdbusperformance/tst_qdbusperformance.cpp new file mode 100644 index 0000000..0e10312 --- /dev/null +++ b/tests/auto/qdbusperformance/tst_qdbusperformance.cpp @@ -0,0 +1,234 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** 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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <QtCore/QtCore> +#include <QtTest/QtTest> +#include <QtDBus/QtDBus> + +#include "./serverobject.h" + +static const char serviceName[] = "com.trolltech.autotests.performance"; +static const int runTime = 500; + +class tst_QDBusPerformance: public QObject +{ + Q_OBJECT + QProcess proc; + QDBusInterface *target; + + QDBusInterface *remote; + QDBusInterface *local; + + bool executeTest(const char *funcname, int size, const QVariant &data); + +public slots: + void initTestCase_data(); + void initTestCase(); + void init(); + +private slots: + void callSpeed(); + + void oneWay_data(); + void oneWay(); + void oneWayVariant_data(); + void oneWayVariant(); + + void roundTrip_data(); + void roundTrip(); + void roundTripVariant_data(); + void roundTripVariant(); +}; +Q_DECLARE_METATYPE(QVariant) + +void tst_QDBusPerformance::initTestCase() +{ +#ifdef Q_OS_WIN + proc.start("server"); +#else + proc.start("./server/server"); +#endif + QVERIFY(proc.waitForStarted()); + + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); + + connect(con.interface(), SIGNAL(serviceOwnerChanged(QString,QString,QString)), + &QTestEventLoop::instance(), SLOT(exitLoop())); + QTime timer; + timer.start(); + + while (timer.elapsed() < 5000) { + QTestEventLoop::instance().enterLoop(5); + if (con.interface()->isServiceRegistered(serviceName)) + break; + } + QVERIFY(con.interface()->isServiceRegistered(serviceName)); + + remote = new QDBusInterface(serviceName, "/", "com.trolltech.autotests.Performance", con, this); + QVERIFY(remote->isValid()); + + new ServerObject("/", con, this); + local = new QDBusInterface(con.baseService(), "/", "com.trolltech.autotests.Performance", con, this); + QVERIFY(local->isValid()); +} + +void tst_QDBusPerformance::initTestCase_data() +{ + QTest::addColumn<bool>("loopback"); + + QTest::newRow("normal") << false; + QTest::newRow("loopback") << true; +} + +void tst_QDBusPerformance::init() +{ + QFETCH_GLOBAL(bool, loopback); + if (loopback) + target = local; + else + target = remote; +} + +void tst_QDBusPerformance::callSpeed() +{ + QTime timer; + + int callCount = 0; + timer.start(); + while (timer.elapsed() < runTime) { + QDBusReply<void> reply = target->call("nothing"); + QVERIFY(reply.isValid()); + + ++callCount; + } + qDebug() << callCount << "calls in" << timer.elapsed() << "ms:" + << (callCount * 1000.0 / timer.elapsed()) << "calls/sec"; +} + +bool tst_QDBusPerformance::executeTest(const char *funcname, int size, const QVariant &data) +{ + QTime timer; + + int callCount = 0; + qint64 transferred = 0; + timer.start(); + while (timer.elapsed() < runTime) { + QDBusMessage reply = target->call(funcname, data); + if (reply.type() != QDBusMessage::ReplyMessage) + return false; + + transferred += size; + ++callCount; + } + qDebug() << transferred << "bytes in" << timer.elapsed() << "ms" + << "(in" << callCount << "calls):" + << (transferred * 1000.0 / timer.elapsed() / 1024 / 1024) << "MB/s"; + + return true; +} + +void tst_QDBusPerformance::oneWay_data() +{ + QTest::addColumn<QVariant>("data"); + QTest::addColumn<int>("size"); + + QByteArray ba(256, 'a'); + while (ba.size() < 8193) { + QTest::newRow(QString("%1-byteArray").arg(ba.size()).toAscii()) << qVariantFromValue(ba) << ba.size(); + ba += ba; + } + + QString s(256, QLatin1Char('a')); + while (s.size() < 8193) { + QTest::newRow(QString("%1-string").arg(s.size()).toAscii()) << qVariantFromValue(s) << s.size(); + s += s; + } +} + +void tst_QDBusPerformance::oneWay() +{ + QFETCH(QVariant, data); + QFETCH(int, size); + + QVERIFY(executeTest("size", size, data)); +} + +void tst_QDBusPerformance::oneWayVariant_data() +{ + oneWay_data(); +} + +void tst_QDBusPerformance::oneWayVariant() +{ + QFETCH(QVariant, data); + QFETCH(int, size); + + QVERIFY(executeTest("size", size, qVariantFromValue(QDBusVariant(data)))); +} + +void tst_QDBusPerformance::roundTrip_data() +{ + oneWay_data(); +} + +void tst_QDBusPerformance::roundTrip() +{ + QFETCH(QVariant, data); + QFETCH(int, size); + + QVERIFY(executeTest("echo", size, data)); +} + +void tst_QDBusPerformance::roundTripVariant_data() +{ + oneWay_data(); +} + +void tst_QDBusPerformance::roundTripVariant() +{ + QFETCH(QVariant, data); + QFETCH(int, size); + + QVERIFY(executeTest("echo", size, qVariantFromValue(QDBusVariant(data)))); +} + +QTEST_MAIN(tst_QDBusPerformance) +#include "tst_qdbusperformance.moc" |