From ca9ed9619f1c21ba0b3ef7687bbbad9eaf2bd39a Mon Sep 17 00:00:00 2001 From: Robin Burchell Date: Sat, 9 Jul 2016 12:53:53 +0200 Subject: Improve performance of Qt::mightBeRichText by using QStringRef I noted this taking around 1% of QtQuick Text creation with a few simple bindings which is quite considerable, so hopefully improvements here will add up gradually. Also add a benchmark measuring changes: Test | From | To | Details +--------------------------------------+----------------+----------------+-----------------------+ mightBeRichText:br-invalidspace | 14466.00 instr | 10563.00 instr | -26.98% FASTER! :) mightBeRichText:br-nospace | 18581.00 instr | 14635.00 instr | -21.24% FASTER! :) mightBeRichText:br-space | 18470.00 instr | 14377.00 instr | -22.16% FASTER! :) mightBeRichText:documentation-header | 16336.00 instr | 12992.00 instr | -20.47% FASTER! :) mightBeRichText:empty | 2618.00 instr | 2618.00 instr | more or less the same mightBeRichText:invalid closing tag | 11102.00 instr | 7159.00 instr | -35.52% FASTER! :) mightBeRichText:no tags | 12503.00 instr | 8581.00 instr | -31.37% FASTER! :) mightBeRichText:simple | 17316.00 instr | 14074.00 instr | -18.72% FASTER! :) mightBeRichText:simple2 | 14394.00 instr | 10745.00 instr | -25.35% FASTER! :) +--------------------------------------+----------------+----------------+-----------------------+ Overall result | -201.81% :) Change-Id: I1817a69959d176b381bcbf27b72bb751885c3e9b Reviewed-by: Konstantin Ritt Reviewed-by: Marc Mutz Reviewed-by: Simon Hausmann --- tests/benchmarks/gui/text/qtextdocument/main.cpp | 71 ++++++++++++++++++++++ .../gui/text/qtextdocument/qtextdocument.pro | 7 +++ tests/benchmarks/gui/text/text.pro | 3 +- 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 tests/benchmarks/gui/text/qtextdocument/main.cpp create mode 100644 tests/benchmarks/gui/text/qtextdocument/qtextdocument.pro (limited to 'tests/benchmarks/gui') diff --git a/tests/benchmarks/gui/text/qtextdocument/main.cpp b/tests/benchmarks/gui/text/qtextdocument/main.cpp new file mode 100644 index 0000000000..17fee3b2eb --- /dev/null +++ b/tests/benchmarks/gui/text/qtextdocument/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Robin Burchell +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** 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 The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +class tst_QTextDocument : public QObject +{ + Q_OBJECT +private slots: + void mightBeRichText_data(); + void mightBeRichText(); +}; + +void tst_QTextDocument::mightBeRichText_data() +{ + QTest::addColumn("source"); + QTest::addColumn("isMaybeRichText"); + QTest::newRow("empty") << QString() << false; + QTest::newRow("simple") << QString::fromLatin1("Foo") << true; + QTest::newRow("simple2") << QString::fromLatin1("Foo") << true; + QTest::newRow("documentation-header") << QString("\n" + "\n" + "") + << true; + QTest::newRow("br-nospace") << QString("Test
new line") << true; + QTest::newRow("br-space") << QString("Test
new line") << true; + QTest::newRow("br-invalidspace") << QString("Test
new line") << false; + QTest::newRow("invalid closing tag") << QString("Test