From 221bd941ff255947ce7c78d08b1f9705e3d437be Mon Sep 17 00:00:00 2001 From: Sergio Ahumada Date: Tue, 16 Oct 2012 23:08:35 +0200 Subject: test: Moving tst_QProcess::echoTest_performance() tst_QProcess::echoTest_performance() is not an unit test but a performance test, so moving it from 'tests/auto/corelib/io/qprocess' to 'tests/benchmarks/corelib/io/qprocess' Change-Id: I796788534eafc5ca3b8d86c0ec46998285fd4b8f Reviewed-by: Rohan McGovern --- tests/benchmarks/corelib/io/io.pro | 1 + tests/benchmarks/corelib/io/qprocess/.gitignore | 2 + tests/benchmarks/corelib/io/qprocess/qprocess.pro | 3 + tests/benchmarks/corelib/io/qprocess/test/test.pro | 5 + .../io/qprocess/testProcessLoopback/main.cpp | 57 +++++++++++ .../testProcessLoopback/testProcessLoopback.pro | 5 + .../corelib/io/qprocess/tst_bench_qprocess.cpp | 109 +++++++++++++++++++++ 7 files changed, 182 insertions(+) create mode 100644 tests/benchmarks/corelib/io/qprocess/.gitignore create mode 100644 tests/benchmarks/corelib/io/qprocess/qprocess.pro create mode 100644 tests/benchmarks/corelib/io/qprocess/test/test.pro create mode 100644 tests/benchmarks/corelib/io/qprocess/testProcessLoopback/main.cpp create mode 100644 tests/benchmarks/corelib/io/qprocess/testProcessLoopback/testProcessLoopback.pro create mode 100644 tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp (limited to 'tests/benchmarks/corelib') diff --git a/tests/benchmarks/corelib/io/io.pro b/tests/benchmarks/corelib/io/io.pro index 15ae0d2101..863843f2c6 100644 --- a/tests/benchmarks/corelib/io/io.pro +++ b/tests/benchmarks/corelib/io/io.pro @@ -5,5 +5,6 @@ SUBDIRS = \ qfile \ #qfileinfo \ # FIXME: broken qiodevice \ + qprocess \ qtemporaryfile diff --git a/tests/benchmarks/corelib/io/qprocess/.gitignore b/tests/benchmarks/corelib/io/qprocess/.gitignore new file mode 100644 index 0000000000..0d88a2c739 --- /dev/null +++ b/tests/benchmarks/corelib/io/qprocess/.gitignore @@ -0,0 +1,2 @@ +tst_bench_qprocess +testProcessLoopback/testProcessLoopback diff --git a/tests/benchmarks/corelib/io/qprocess/qprocess.pro b/tests/benchmarks/corelib/io/qprocess/qprocess.pro new file mode 100644 index 0000000000..c49542f616 --- /dev/null +++ b/tests/benchmarks/corelib/io/qprocess/qprocess.pro @@ -0,0 +1,3 @@ +TEMPLATE = subdirs +CONFIG += ordered +SUBDIRS = testProcessLoopback test diff --git a/tests/benchmarks/corelib/io/qprocess/test/test.pro b/tests/benchmarks/corelib/io/qprocess/test/test.pro new file mode 100644 index 0000000000..eaae0c8254 --- /dev/null +++ b/tests/benchmarks/corelib/io/qprocess/test/test.pro @@ -0,0 +1,5 @@ +TARGET = ../tst_bench_qprocess +SOURCES += ../tst_bench_qprocess.cpp + +QT = core core-private testlib +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/main.cpp b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/main.cpp new file mode 100644 index 0000000000..2b27cbe900 --- /dev/null +++ b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/main.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include + +int main() +{ + char buffer[1024]; + for (;;) { + size_t num = fread(buffer, 1, sizeof(buffer), stdin); + if (num <= 0) + break; + fwrite(buffer, num, 1, stdout); + fflush(stdout); + } + + return 0; +} diff --git a/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/testProcessLoopback.pro b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/testProcessLoopback.pro new file mode 100644 index 0000000000..3940ddbf98 --- /dev/null +++ b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/testProcessLoopback.pro @@ -0,0 +1,5 @@ +SOURCES = main.cpp +CONFIG -= qt app_bundle +CONFIG += console +DESTDIR = ./ +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp new file mode 100644 index 0000000000..141805c6e2 --- /dev/null +++ b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +class tst_QProcess : public QObject +{ + Q_OBJECT + +#ifndef QT_NO_PROCESS +private slots: + + void echoTest_performance(); + +#endif // QT_NO_PROCESS +}; + +#ifndef QT_NO_PROCESS +#ifndef Q_OS_WINCE +// Reading and writing to a process is not supported on Qt/CE +void tst_QProcess::echoTest_performance() +{ + QProcess process; + process.start("testProcessLoopback/testProcessLoopback"); + + QByteArray array; + array.resize(1024 * 1024); + for (int j = 0; j < array.size(); ++j) + array[j] = 'a' + (j % 20); + + QVERIFY(process.waitForStarted()); + + QTime stopWatch; + stopWatch.start(); + + qint64 totalBytes = 0; + QByteArray dump; + QSignalSpy readyReadSpy(&process, SIGNAL(readyRead())); + QVERIFY(readyReadSpy.isValid()); + while (stopWatch.elapsed() < 2000) { + process.write(array); + while (process.bytesToWrite() > 0) { + int readCount = readyReadSpy.count(); + QVERIFY(process.waitForBytesWritten(5000)); + if (readyReadSpy.count() == readCount) + QVERIFY(process.waitForReadyRead(5000)); + } + + while (process.bytesAvailable() < array.size()) + QVERIFY2(process.waitForReadyRead(5000), qPrintable(process.errorString())); + dump = process.readAll(); + totalBytes += dump.size(); + } + + qDebug() << "Elapsed time:" << stopWatch.elapsed() << "ms;" + << "transfer rate:" << totalBytes / (1048.576) / stopWatch.elapsed() + << "MB/s"; + + for (int j = 0; j < array.size(); ++j) + QCOMPARE(char(dump.at(j)), char('a' + (j % 20))); + + process.closeWriteChannel(); + QVERIFY(process.waitForFinished()); +} +#endif // Q_OS_WINCE + +#endif // QT_NO_PROCESS + +QTEST_MAIN(tst_QProcess) +#include "tst_bench_qprocess.moc" -- cgit v1.2.3