diff options
Diffstat (limited to 'tests/benchmarks')
24 files changed, 510 insertions, 282 deletions
diff --git a/tests/benchmarks/corelib/io/io.pro b/tests/benchmarks/corelib/io/io.pro index 487171ac5e..38a1f6b15b 100644 --- a/tests/benchmarks/corelib/io/io.pro +++ b/tests/benchmarks/corelib/io/io.pro @@ -6,5 +6,6 @@ SUBDIRS = \ qfileinfo \ qiodevice \ qprocess \ - qtemporaryfile + qtemporaryfile \ + qtextstream diff --git a/tests/benchmarks/corelib/io/qtextstream/main.cpp b/tests/benchmarks/corelib/io/qtextstream/main.cpp new file mode 100644 index 0000000000..45c0297516 --- /dev/null +++ b/tests/benchmarks/corelib/io/qtextstream/main.cpp @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2014 David Faure <david.faure@kdab.com> +** 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 <QDebug> +#include <QIODevice> +#include <QString> +#include <QBuffer> +#include <qtest.h> + +class tst_qtextstream : public QObject +{ + Q_OBJECT +private slots: + void writeSingleChar_data(); + void writeSingleChar(); + +private: +}; + +enum Output { StringOutput, DeviceOutput }; +Q_DECLARE_METATYPE(Output); + +enum Input { CharStarInput, QStringInput, CharInput, QCharInput }; +Q_DECLARE_METATYPE(Input); + +void tst_qtextstream::writeSingleChar_data() +{ + QTest::addColumn<Output>("output"); + QTest::addColumn<Input>("input"); + + QTest::newRow("string_charstar") << StringOutput << CharStarInput; + QTest::newRow("string_string") << StringOutput << QStringInput; + QTest::newRow("string_char") << StringOutput << CharInput; + QTest::newRow("string_qchar") << StringOutput << QCharInput; + QTest::newRow("device_charstar") << DeviceOutput << CharStarInput; + QTest::newRow("device_string") << DeviceOutput << QStringInput; + QTest::newRow("device_char") << DeviceOutput << CharInput; + QTest::newRow("device_qchar") << DeviceOutput << QCharInput; +} + +void tst_qtextstream::writeSingleChar() +{ + QFETCH(Output, output); + QFETCH(Input, input); + + QString str; + QBuffer buffer; + QTextStream stream; + if (output == StringOutput) { + stream.setString(&str, QIODevice::WriteOnly); + } else { + QVERIFY(buffer.open(QIODevice::WriteOnly)); + stream.setDevice(&buffer); + } + // Test many different ways to write a single char into a QTextStream + QString inputString = "h"; + const int amount = 100000; + switch (input) { + case CharStarInput: + QBENCHMARK { + for (qint64 i = 0; i < amount; ++i) + stream << "h"; + } + break; + case QStringInput: + QBENCHMARK { + for (qint64 i = 0; i < amount; ++i) + stream << inputString; + } + break; + case CharInput: + QBENCHMARK { + for (qint64 i = 0; i < amount; ++i) + stream << 'h'; + } + break; + case QCharInput: + QBENCHMARK { + for (qint64 i = 0; i < amount; ++i) + stream << QChar('h'); + } + break; + } + QString result; + if (output == StringOutput) + result = str; + else + result = QString(buffer.data()); + + QCOMPARE(result.left(10), QString("hhhhhhhhhh")); +} + +QTEST_MAIN(tst_qtextstream) + +#include "main.moc" diff --git a/tests/benchmarks/corelib/io/qtextstream/qtextstream.pro b/tests/benchmarks/corelib/io/qtextstream/qtextstream.pro new file mode 100644 index 0000000000..3dcba655f2 --- /dev/null +++ b/tests/benchmarks/corelib/io/qtextstream/qtextstream.pro @@ -0,0 +1,9 @@ +TEMPLATE = app +TARGET = tst_bench_qtemporaryfile + +QT = core testlib + +CONFIG += release + +SOURCES += main.cpp +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp index 9403c3fbb4..53cf26d0f1 100644 --- a/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -45,6 +45,8 @@ public: private slots: void typeBuiltin_data(); void typeBuiltin(); + void typeBuiltin_QByteArray_data(); + void typeBuiltin_QByteArray(); void typeBuiltinNotNormalized_data(); void typeBuiltinNotNormalized(); void typeCustom(); @@ -94,6 +96,7 @@ void tst_QMetaType::typeBuiltin_data() } } +// QMetaType::type(const char *) void tst_QMetaType::typeBuiltin() { QFETCH(QByteArray, typeName); @@ -104,6 +107,21 @@ void tst_QMetaType::typeBuiltin() } } +void tst_QMetaType::typeBuiltin_QByteArray_data() +{ + typeBuiltin_data(); +} + +// QMetaType::type(QByteArray) +void tst_QMetaType::typeBuiltin_QByteArray() +{ + QFETCH(QByteArray, typeName); + QBENCHMARK { + for (int i = 0; i < 100000; ++i) + QMetaType::type(typeName); + } +} + void tst_QMetaType::typeBuiltinNotNormalized_data() { QTest::addColumn<QByteArray>("typeName"); diff --git a/tests/benchmarks/corelib/tools/qbytearray/main.cpp b/tests/benchmarks/corelib/tools/qbytearray/main.cpp index e42d85f844..c9cd77cb91 100644 --- a/tests/benchmarks/corelib/tools/qbytearray/main.cpp +++ b/tests/benchmarks/corelib/tools/qbytearray/main.cpp @@ -41,11 +41,25 @@ class tst_qbytearray : public QObject { Q_OBJECT + QByteArray sourcecode; private slots: + void initTestCase(); void append(); void append_data(); + + void latin1Uppercasing_qt54(); + void latin1Uppercasing_xlate(); + void latin1Uppercasing_xlate_checked(); + void latin1Uppercasing_category(); + void latin1Uppercasing_bitcheck(); }; +void tst_qbytearray::initTestCase() +{ + QFile self(QFINDTESTDATA("main.cpp")); + QVERIFY(self.open(QIODevice::ReadOnly)); + sourcecode = self.readAll(); +} void tst_qbytearray::append_data() { @@ -73,6 +87,181 @@ void tst_qbytearray::append() } } +void tst_qbytearray::latin1Uppercasing_qt54() +{ + QByteArray s = sourcecode; + s.detach(); + + // the following was copied from qbytearray.cpp (except for the QBENCHMARK macro): + uchar *p_orig = reinterpret_cast<uchar *>(s.data()); + uchar *e = reinterpret_cast<uchar *>(s.end()); + + QBENCHMARK { + uchar *p = p_orig; + if (p) { + while (p != e) { + *p = QChar::toLower((ushort)*p); + p++; + } + } + } +} + + +/* +#!/usr/bin/perl -l +use feature "unicode_strings" +for (0..255) { + $up = uc(chr($_)); + $up = chr($_) if ord($up) > 0x100 || length $up > 1; + printf "0x%02x,", ord($up); + print "" if ($_ & 0xf) == 0xf; +} +*/ +static const uchar uppercased[256] = { + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, + 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, + 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, + 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, + 0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, + 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x7b,0x7c,0x7d,0x7e,0x7f, + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, + 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, + 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, + 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xf7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xff +}; +void tst_qbytearray::latin1Uppercasing_xlate() +{ + QByteArray output = sourcecode; + output.detach(); + char *dst_orig = output.data(); + const char *src_orig = sourcecode.constBegin(); + const char *end = sourcecode.constEnd(); + QBENCHMARK { + char *dst = dst_orig; + for (const char *src = src_orig; src != end; ++src, ++dst) + *dst = uppercased[uchar(*src)]; + } +} + +void tst_qbytearray::latin1Uppercasing_xlate_checked() +{ + QByteArray output = sourcecode; + output.detach(); + char *dst_orig = output.data(); + const char *src_orig = sourcecode.constBegin(); + const char *end = sourcecode.constEnd(); + QBENCHMARK { + char *dst = dst_orig; + for (const char *src = src_orig; src != end; ++src, ++dst) { + uchar ch = uchar(*src); + uchar converted = uppercased[ch]; + if (ch != converted) + *dst = converted; + } + } +} + +/* +#!/bin/perl -l +use feature "unicode_strings"; +sub categorize($) { + # 'ß' and 'ÿ' are lowercase, but we cannot uppercase them + return 0 if $_[0] == 0xDF || $_[0] == 0xFF; + $ch = chr($_[0]); + return 2 if uc($ch) ne $ch; + return 1 if lc($ch) ne $ch; + return 0; +} +for (0..255) { + printf "%d,", categorize($_); + print "" if ($_ & 0xf) == 0xf; +} +*/ +static const char categories[256] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, + 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,0 +}; + +void tst_qbytearray::latin1Uppercasing_category() +{ + QByteArray output = sourcecode; + output.detach(); + char *dst_orig = output.data(); + const char *src_orig = sourcecode.constBegin(); + const char *end = sourcecode.constEnd(); + QBENCHMARK { + char *dst = dst_orig; + for (const char *src = src_orig; src != end; ++src, ++dst) + *dst = categories[uchar(*src)] == 1 ? *src & ~0x20 : *src; + } +} + +/* +#!/bin/perl -l +use feature "unicode_strings"; +sub categorize($) { + # 'ß' and 'ÿ' are lowercase, but we cannot uppercase them + return 0 if $_[0] == 0xDF || $_[0] == 0xFF; + $ch = chr($_[0]); + return 2 if uc($ch) ne $ch; + return 1 if lc($ch) ne $ch; + return 0; +} +for $row (0..7) { + $val = 0; + for $col (0..31) { + $val |= (1<<$col) + if categorize($row * 31 + $col) == 2; + } + printf "0x%08x,", $val; +} +*/ + +static const quint32 shouldUppercase[8] = { + 0x00000000,0x00000000,0x00000000,0x3ffffff0,0x00000000,0x04000000,0x00000000,0xbfffff80 +}; + +static bool bittest(const quint32 *data, uchar bit) +{ + static const unsigned bitsperelem = sizeof(*data) * CHAR_BIT; + return data[bit / bitsperelem] & (1 << (bit & (bitsperelem - 1))); +} + +void tst_qbytearray::latin1Uppercasing_bitcheck() +{ + QByteArray output = sourcecode; + output.detach(); + char *dst_orig = output.data(); + const char *src_orig = sourcecode.constBegin(); + const char *end = sourcecode.constEnd(); + QBENCHMARK { + char *dst = dst_orig; + for (const char *src = src_orig; src != end; ++src, ++dst) + *dst = bittest(shouldUppercase, *src) ? uchar(*src) & ~0x20 : uchar(*src); + } +} + QTEST_MAIN(tst_qbytearray) diff --git a/tests/benchmarks/corelib/tools/qbytearray/qbytearray.pro b/tests/benchmarks/corelib/tools/qbytearray/qbytearray.pro index 14bf1d8272..0d5e7646ad 100644 --- a/tests/benchmarks/corelib/tools/qbytearray/qbytearray.pro +++ b/tests/benchmarks/corelib/tools/qbytearray/qbytearray.pro @@ -2,7 +2,6 @@ TEMPLATE = app TARGET = tst_bench_qbytearray QT = core testlib -CONFIG += release SOURCES += main.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/benchmarks/corelib/tools/qstack/main.cpp b/tests/benchmarks/corelib/tools/qstack/main.cpp new file mode 100644 index 0000000000..062482e792 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qstack/main.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Robin Burchell <robin.burchell@viroteck.net> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** 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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** 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. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QStack> +#include <QDebug> +#include <QtTest> + +#include <vector> + +class tst_QStack: public QObject +{ + Q_OBJECT + +private slots: + void qstack_push(); + void qstack_pop(); + void qstack_pushpopone(); +}; + +const int N = 1000000; + +void tst_QStack::qstack_push() +{ + QStack<int> v; + QBENCHMARK { + for (int i = 0; i != N; ++i) + v.push(i); + v = QStack<int>(); + } +} + +void tst_QStack::qstack_pop() +{ + QStack<int> v; + for (int i = 0; i != N; ++i) + v.push(i); + + QBENCHMARK { + QStack<int> v2 = v; + for (int i = 0; i != N; ++i) { + v2.pop(); + } + } +} + +void tst_QStack::qstack_pushpopone() +{ + QBENCHMARK { + QStack<int> v; + for (int i = 0; i != N; ++i) { + v.push(0); + v.pop(); + } + } +} + +QTEST_MAIN(tst_QStack) + +#include "main.moc" diff --git a/tests/benchmarks/corelib/tools/qstack/qstack.pro b/tests/benchmarks/corelib/tools/qstack/qstack.pro new file mode 100644 index 0000000000..7d8a839610 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qstack/qstack.pro @@ -0,0 +1,4 @@ +TARGET = tst_bench_stack +QT = core testlib core-private +SOURCES += main.cpp +CONFIG += release diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 64dfad82c9..2cd41280f1 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -40,18 +40,76 @@ class tst_QString: public QObject public: tst_QString(); private slots: + void section_regexp_data() { section_data_impl(); } + void section_regexp() { section_impl<QRegExp>(); } + void section_regularexpression_data() { section_data_impl(); } + void section_regularexpression() { section_impl<QRegularExpression>(); } + void section_string_data() { section_data_impl(false); } + void section_string() { section_impl<QString>(); } + void toUpper_data(); void toUpper(); void toLower_data(); void toLower(); void toCaseFolded_data(); void toCaseFolded(); + +private: + void section_data_impl(bool includeRegExOnly = true); + template <typename RX> void section_impl(); }; tst_QString::tst_QString() { } +void tst_QString::section_data_impl(bool includeRegExOnly) +{ + QTest::addColumn<QString>("s"); + QTest::addColumn<QString>("sep"); + QTest::addColumn<bool>("isRegExp"); + + QTest::newRow("IPv4") << QStringLiteral("192.168.0.1") << QStringLiteral(".") << false; + QTest::newRow("IPv6") << QStringLiteral("2001:0db8:85a3:0000:0000:8a2e:0370:7334") << QStringLiteral(":") << false; + if (includeRegExOnly) { + QTest::newRow("IPv6-reversed-roles") << QStringLiteral("2001:0db8:85a3:0000:0000:8a2e:0370:7334") << QStringLiteral("\\d+") << true; + QTest::newRow("IPv6-complex") << QStringLiteral("2001:0db8:85a3:0000:0000:8a2e:0370:7334") << QStringLiteral("(\\d+):\\1") << true; + } +} + +template <typename RX> +inline QString escape(const QString &s) +{ return RX::escape(s); } + +template <> +inline QString escape<QString>(const QString &s) +{ return s; } + +template <typename RX> +inline void optimize(RX &) {} + +template <> +inline void optimize(QRegularExpression &rx) +{ rx.optimize(); } + +template <typename RX> +void tst_QString::section_impl() +{ + QFETCH(QString, s); + QFETCH(QString, sep); + QFETCH(bool, isRegExp); + + RX rx(isRegExp ? sep : escape<RX>(sep)); + optimize(rx); + for (int i = 0; i < 20; ++i) + (void) s.count(rx); // make (s, rx) hot + + QBENCHMARK { + const QString result = s.section(rx, 0, 16); + Q_UNUSED(result); + } +} + void tst_QString::toUpper_data() { QTest::addColumn<QString>("s"); diff --git a/tests/benchmarks/corelib/tools/tools.pro b/tests/benchmarks/corelib/tools/tools.pro index 00abd75839..d9ec5edd7c 100644 --- a/tests/benchmarks/corelib/tools/tools.pro +++ b/tests/benchmarks/corelib/tools/tools.pro @@ -12,6 +12,7 @@ SUBDIRS = \ qrect \ qregexp \ qringbuffer \ + qstack \ qstring \ qstringbuilder \ qstringlist \ diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp index df9d38e4fc..aad143ff68 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp @@ -35,7 +35,7 @@ #include <QtGui> -#ifdef Q_WS_WIN +#ifdef Q_DEAD_CODE_FROM_QT4_WIN #define CALLGRIND_START_INSTRUMENTATION {} #define CALLGRIND_STOP_INSTRUMENTATION {} #else diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp index 1cddad4b91..579d32645e 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp @@ -32,14 +32,14 @@ ****************************************************************************/ #include <QtGui> -#ifdef Q_WS_WIN +#ifdef Q_DEAD_CODE_FROM_QT4_WIN #define CALLGRIND_START_INSTRUMENTATION {} #define CALLGRIND_STOP_INSTRUMENTATION {} #else #include "valgrind/callgrind.h" #endif -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 extern void qt_x11_wait_for_window_manager(QWidget *); #endif @@ -94,7 +94,7 @@ int main(int argc, char *argv[]) View view(&scene, item); view.resize(300, 300); view.show(); -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 qt_x11_wait_for_window_manager(&view); #endif diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp index 8bfe009b4e..c0dad860e4 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp @@ -32,7 +32,7 @@ ****************************************************************************/ #include <QtGui> -#ifdef Q_WS_WIN +#ifdef Q_DEAD_CODE_FROM_QT4_WIN #define CALLGRIND_START_INSTRUMENTATION {} #define CALLGRIND_STOP_INSTRUMENTATION {} #else diff --git a/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp b/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp index 00565c4f31..44d7854eb8 100644 --- a/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp +++ b/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp @@ -147,6 +147,8 @@ void tst_QImageConversion::convertGeneric_data() QTest::newRow("argb32 -> rgb666") << argb32 << QImage::Format_RGB666; QTest::newRow("argb32 -> argb8565pm") << argb32 << QImage::Format_ARGB8565_Premultiplied; QTest::newRow("argb32 -> argb4444pm") << argb32 << QImage::Format_ARGB4444_Premultiplied; + QTest::newRow("argb32 -> argb32pm") << argb32 << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("argb32 -> rgba8888pm") << argb32 << QImage::Format_RGBA8888_Premultiplied; } void tst_QImageConversion::convertGeneric() diff --git a/tests/benchmarks/gui/painting/painting.pro b/tests/benchmarks/gui/painting/painting.pro index b3fb34757c..0eb7fa92a7 100644 --- a/tests/benchmarks/gui/painting/painting.pro +++ b/tests/benchmarks/gui/painting/painting.pro @@ -3,7 +3,6 @@ SUBDIRS = \ qpainter \ qregion \ qtransform \ - qtracebench \ qtbench !qtHaveModule(widgets): SUBDIRS -= \ diff --git a/tests/benchmarks/gui/painting/qtracebench/qtracebench.pro b/tests/benchmarks/gui/painting/qtracebench/qtracebench.pro deleted file mode 100644 index d8c5c8e85b..0000000000 --- a/tests/benchmarks/gui/painting/qtracebench/qtracebench.pro +++ /dev/null @@ -1,11 +0,0 @@ -QT += widgets testlib -QT += core-private gui-private widgets-private - -TEMPLATE = app -TARGET = tst_qtracebench - -RESOURCES += qtracebench.qrc - -SOURCES += tst_qtracebench.cpp - -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/benchmarks/gui/painting/qtracebench/qtracebench.qrc b/tests/benchmarks/gui/painting/qtracebench/qtracebench.qrc deleted file mode 100644 index 5569550bc5..0000000000 --- a/tests/benchmarks/gui/painting/qtracebench/qtracebench.qrc +++ /dev/null @@ -1,10 +0,0 @@ -<RCC> - <qresource> - <file>traces/basicdrawing.trace</file> - <file>traces/webkit.trace</file> - <file>traces/textedit.trace</file> - <file>traces/creator.trace</file> - <file>traces/qmlphoneconcept.trace</file> - <file>traces/qmlsamegame.trace</file> - </qresource> -</RCC> diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/basicdrawing.trace b/tests/benchmarks/gui/painting/qtracebench/traces/basicdrawing.trace Binary files differdeleted file mode 100644 index 0241d08a97..0000000000 --- a/tests/benchmarks/gui/painting/qtracebench/traces/basicdrawing.trace +++ /dev/null diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/creator.trace b/tests/benchmarks/gui/painting/qtracebench/traces/creator.trace Binary files differdeleted file mode 100644 index 55ee9e183e..0000000000 --- a/tests/benchmarks/gui/painting/qtracebench/traces/creator.trace +++ /dev/null diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/qmlphoneconcept.trace b/tests/benchmarks/gui/painting/qtracebench/traces/qmlphoneconcept.trace Binary files differdeleted file mode 100644 index 835ebfa8fb..0000000000 --- a/tests/benchmarks/gui/painting/qtracebench/traces/qmlphoneconcept.trace +++ /dev/null diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/qmlsamegame.trace b/tests/benchmarks/gui/painting/qtracebench/traces/qmlsamegame.trace Binary files differdeleted file mode 100644 index 1d76195443..0000000000 --- a/tests/benchmarks/gui/painting/qtracebench/traces/qmlsamegame.trace +++ /dev/null diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/textedit.trace b/tests/benchmarks/gui/painting/qtracebench/traces/textedit.trace Binary files differdeleted file mode 100644 index 998716d6c1..0000000000 --- a/tests/benchmarks/gui/painting/qtracebench/traces/textedit.trace +++ /dev/null diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/webkit.trace b/tests/benchmarks/gui/painting/qtracebench/traces/webkit.trace Binary files differdeleted file mode 100644 index 43e752d193..0000000000 --- a/tests/benchmarks/gui/painting/qtracebench/traces/webkit.trace +++ /dev/null diff --git a/tests/benchmarks/gui/painting/qtracebench/tst_qtracebench.cpp b/tests/benchmarks/gui/painting/qtracebench/tst_qtracebench.cpp deleted file mode 100644 index 1b6cea23de..0000000000 --- a/tests/benchmarks/gui/painting/qtracebench/tst_qtracebench.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 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:LGPL21$ -** 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 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** 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. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <qtest.h> - -#include <QtGui> - -#include <private/qpaintengineex_p.h> -#include <private/qpaintbuffer_p.h> - -class ReplayWidget : public QWidget -{ - Q_OBJECT -public: - ReplayWidget(const QString &filename); - - void paintEvent(QPaintEvent *event); - void resizeEvent(QResizeEvent *event); - - bool done() const { return m_done; } - qreal result() const { return m_result; } - -public slots: - void updateRect(); - -public: - QList<QRegion> updates; - QPaintBuffer buffer; - - int currentFrame; - int currentIteration; - QTime timer; - - QList<uint> visibleUpdates; - QList<uint> iterationTimes; - QString filename; - - bool m_done; - qreal m_result; - - uint m_total; -}; - -void ReplayWidget::updateRect() -{ - if (!visibleUpdates.isEmpty()) - update(updates.at(visibleUpdates.at(currentFrame))); -} - -void ReplayWidget::paintEvent(QPaintEvent *) -{ - if (m_done) - return; - - QPainter p(this); - - // if partial updates don't work - // p.setClipRegion(frames.at(currentFrame).updateRegion); - - buffer.draw(&p, visibleUpdates.at(currentFrame)); - - ++currentFrame; - if (currentFrame >= visibleUpdates.size()) { - currentFrame = 0; - ++currentIteration; - - uint currentElapsed = timer.isNull() ? 0 : timer.elapsed(); - timer.restart(); - - m_total += currentElapsed; - - // warm up for at most 5 iterations or half a second - if (currentIteration >= 5 || m_total >= 500) { - iterationTimes << currentElapsed; - - if (iterationTimes.size() >= 5) { - qreal mean = 0; - qreal stddev = 0; - uint min = INT_MAX; - - for (int i = 0; i < iterationTimes.size(); ++i) { - mean += iterationTimes.at(i); - min = qMin(min, iterationTimes.at(i)); - } - - mean /= qreal(iterationTimes.size()); - - for (int i = 0; i < iterationTimes.size(); ++i) { - qreal delta = iterationTimes.at(i) - mean; - stddev += delta * delta; - } - - stddev = qSqrt(stddev / iterationTimes.size()); - - qSort(iterationTimes.begin(), iterationTimes.end()); - uint median = iterationTimes.at(iterationTimes.size() / 2); - - stddev = 100 * stddev / mean; - // do 100 iterations, break earlier if we spend more than 5 seconds or have a low std deviation after 2 seconds - if (iterationTimes.size() >= 100 || m_total >= 5000 || (m_total >= 2000 && stddev < 4)) { - printf("%s, iterations: %d, frames: %d, min(ms): %d, median(ms): %d, stddev: %f %%, max(fps): %f\n", qPrintable(filename), - iterationTimes.size(), visibleUpdates.size(), min, median, stddev, 1000. * visibleUpdates.size() / min); - m_result = min; - m_done = true; - return; - } - } - } - } -} - -void ReplayWidget::resizeEvent(QResizeEvent * /* event */) -{ - visibleUpdates.clear(); - - QRect bounds = rect(); - for (int i = 0; i < updates.size(); ++i) { - if (updates.at(i).intersects(bounds)) - visibleUpdates << i; - } - - if (visibleUpdates.size() != updates.size()) - printf("Warning: skipped %d frames due to limited resolution\n", updates.size() - visibleUpdates.size()); - -} - -ReplayWidget::ReplayWidget(const QString &filename_) - : currentFrame(0) - , currentIteration(0) - , filename(filename_) - , m_done(false) - , m_result(0) - , m_total(0) -{ - setWindowTitle(filename); - QFile file(filename); - - if (!file.open(QIODevice::ReadOnly)) { - printf("Failed to load input file '%s'\n", qPrintable(filename_)); - return; - } - - QDataStream in(&file); - in.setVersion(QDataStream::Qt_4_7); - - char *data; - uint size; - in.readBytes(data, size); - bool isTraceFile = size >= 7 && qstrncmp(data, "qttrace", 7) == 0; - uint version = 0; - if (size == 9 && qstrncmp(data, "qttraceV2", 9) == 0) { - in.setFloatingPointPrecision(QDataStream::SinglePrecision); - in >> version; - } - - delete [] data; - if (!isTraceFile) { - printf("File '%s' is not a trace file\n", qPrintable(filename_)); - return; - } - - in >> buffer >> updates; - - resize(buffer.boundingRect().size().toSize()); - - setAutoFillBackground(false); - setAttribute(Qt::WA_NoSystemBackground); -} - - -class tst_QTraceBench : public QObject -{ - Q_OBJECT - -private slots: - void trace(); - void trace_data(); -}; - -static const QLatin1String prefix(":/traces/"); - -void tst_QTraceBench::trace_data() -{ - QTest::addColumn<QString>("filename"); - - QTest::newRow("basicdrawing") << (prefix + "basicdrawing.trace"); - QTest::newRow("webkit") << (prefix + "webkit.trace"); - QTest::newRow("creator") << (prefix + "creator.trace"); - QTest::newRow("textedit") << (prefix + "textedit.trace"); - QTest::newRow("qmlphoneconcept") << (prefix + "qmlphoneconcept.trace"); - QTest::newRow("qmlsamegame") << (prefix + "qmlsamegame.trace"); -} - -void tst_QTraceBench::trace() -{ - QFETCH(QString, filename); - - QFile file(filename); - if (!file.exists()) { - qWarning() << "Missing file" << filename; - return; - } - - ReplayWidget widget(filename); - - if (widget.updates.isEmpty()) { - qWarning() << "No trace updates" << filename; - return; - } - - widget.show(); - QTest::qWaitForWindowShown(&widget); - - while (!widget.done()) { - widget.updateRect(); - QApplication::processEvents(); - } - - QTest::setBenchmarkResult(widget.result(), QTest::WalltimeMilliseconds); -} - -QTEST_MAIN(tst_QTraceBench) -#include "tst_qtracebench.moc" |