summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmarks')
-rw-r--r--tests/benchmarks/corelib/io/io.pro3
-rw-r--r--tests/benchmarks/corelib/io/qtextstream/main.cpp133
-rw-r--r--tests/benchmarks/corelib/io/qtextstream/qtextstream.pro9
-rw-r--r--tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp18
-rw-r--r--tests/benchmarks/corelib/tools/qbytearray/main.cpp189
-rw-r--r--tests/benchmarks/corelib/tools/qbytearray/qbytearray.pro1
-rw-r--r--tests/benchmarks/corelib/tools/qstack/main.cpp89
-rw-r--r--tests/benchmarks/corelib/tools/qstack/qstack.pro4
-rw-r--r--tests/benchmarks/corelib/tools/qstring/main.cpp58
-rw-r--r--tests/benchmarks/corelib/tools/tools.pro1
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp2
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp6
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp2
-rw-r--r--tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp2
-rw-r--r--tests/benchmarks/gui/painting/painting.pro1
-rw-r--r--tests/benchmarks/gui/painting/qtracebench/qtracebench.pro11
-rw-r--r--tests/benchmarks/gui/painting/qtracebench/qtracebench.qrc10
-rw-r--r--tests/benchmarks/gui/painting/qtracebench/traces/basicdrawing.tracebin366739 -> 0 bytes
-rw-r--r--tests/benchmarks/gui/painting/qtracebench/traces/creator.tracebin541031 -> 0 bytes
-rw-r--r--tests/benchmarks/gui/painting/qtracebench/traces/qmlphoneconcept.tracebin337439 -> 0 bytes
-rw-r--r--tests/benchmarks/gui/painting/qtracebench/traces/qmlsamegame.tracebin246423 -> 0 bytes
-rw-r--r--tests/benchmarks/gui/painting/qtracebench/traces/textedit.tracebin60042 -> 0 bytes
-rw-r--r--tests/benchmarks/gui/painting/qtracebench/traces/webkit.tracebin451391 -> 0 bytes
-rw-r--r--tests/benchmarks/gui/painting/qtracebench/tst_qtracebench.cpp253
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
deleted file mode 100644
index 0241d08a97..0000000000
--- a/tests/benchmarks/gui/painting/qtracebench/traces/basicdrawing.trace
+++ /dev/null
Binary files differ
diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/creator.trace b/tests/benchmarks/gui/painting/qtracebench/traces/creator.trace
deleted file mode 100644
index 55ee9e183e..0000000000
--- a/tests/benchmarks/gui/painting/qtracebench/traces/creator.trace
+++ /dev/null
Binary files differ
diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/qmlphoneconcept.trace b/tests/benchmarks/gui/painting/qtracebench/traces/qmlphoneconcept.trace
deleted file mode 100644
index 835ebfa8fb..0000000000
--- a/tests/benchmarks/gui/painting/qtracebench/traces/qmlphoneconcept.trace
+++ /dev/null
Binary files differ
diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/qmlsamegame.trace b/tests/benchmarks/gui/painting/qtracebench/traces/qmlsamegame.trace
deleted file mode 100644
index 1d76195443..0000000000
--- a/tests/benchmarks/gui/painting/qtracebench/traces/qmlsamegame.trace
+++ /dev/null
Binary files differ
diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/textedit.trace b/tests/benchmarks/gui/painting/qtracebench/traces/textedit.trace
deleted file mode 100644
index 998716d6c1..0000000000
--- a/tests/benchmarks/gui/painting/qtracebench/traces/textedit.trace
+++ /dev/null
Binary files differ
diff --git a/tests/benchmarks/gui/painting/qtracebench/traces/webkit.trace b/tests/benchmarks/gui/painting/qtracebench/traces/webkit.trace
deleted file mode 100644
index 43e752d193..0000000000
--- a/tests/benchmarks/gui/painting/qtracebench/traces/webkit.trace
+++ /dev/null
Binary files differ
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"