diff options
author | Milian Wolff <milian.wolff@kdab.com> | 2016-03-31 19:43:27 +0200 |
---|---|---|
committer | Milian Wolff <milian.wolff@kdab.com> | 2016-07-18 08:53:51 +0000 |
commit | 9d4b55640788bf96ea100ad0616fd4236370d140 (patch) | |
tree | 3fa1cc35f6e2c334cb80d7ccf297fd64ce0c4700 /tests/benchmarks/qml/qqmlchangeset | |
parent | b08a4c2f421494b515dc7ef6f50d33e37e18eb91 (diff) |
Add benchmark for pathological O(N^2) behavior in QQmlChangeSet.
This patch is just here for documentation of this behavior and does not
come with a fix yet. This hotspot was found while profiling the example
code attached to QTBUG-34391. It is triggered by the repeated calls
to _q_itemsMoved in QQmlDelegateModel::_q_layoutChanged.
Change-Id: I758744b3650c3c47dc86b914b823c3e9f96ce81e
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Daniel Vrátil <daniel.vratil@kdab.com>
Reviewed-by: Christopher Adams <chris.adams@jollamobile.com>
Diffstat (limited to 'tests/benchmarks/qml/qqmlchangeset')
-rw-r--r-- | tests/benchmarks/qml/qqmlchangeset/qqmlchangeset.pro | 10 | ||||
-rw-r--r-- | tests/benchmarks/qml/qqmlchangeset/tst_qqmlchangeset.cpp | 60 |
2 files changed, 70 insertions, 0 deletions
diff --git a/tests/benchmarks/qml/qqmlchangeset/qqmlchangeset.pro b/tests/benchmarks/qml/qqmlchangeset/qqmlchangeset.pro new file mode 100644 index 0000000000..fc0ccdf8ed --- /dev/null +++ b/tests/benchmarks/qml/qqmlchangeset/qqmlchangeset.pro @@ -0,0 +1,10 @@ +CONFIG += benchmark +TEMPLATE = app +TARGET = tst_qqmlchangeset +QT += qml quick-private testlib +osx:CONFIG -= app_bundle + +SOURCES += tst_qqmlchangeset.cpp + +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 + diff --git a/tests/benchmarks/qml/qqmlchangeset/tst_qqmlchangeset.cpp b/tests/benchmarks/qml/qqmlchangeset/tst_qqmlchangeset.cpp new file mode 100644 index 0000000000..bbfb52343c --- /dev/null +++ b/tests/benchmarks/qml/qqmlchangeset/tst_qqmlchangeset.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com> +** Contact: http://www.qt.io/licensing/ +** +** 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 The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/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. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <qtest.h> + +#include <QDebug> + +#include <private/qqmlchangeset_p.h> + +class tst_qqmlchangeset : public QObject +{ + Q_OBJECT + +private slots: + void move(); +}; + +void tst_qqmlchangeset::move() +{ + QBENCHMARK { + QQmlChangeSet set; + const int MAX_ROWS = 30000; + for (int i = 0; i < MAX_ROWS; ++i) { + set.move(i, MAX_ROWS - 1 - i, 1, i); + } + } +} + +QTEST_MAIN(tst_qqmlchangeset) +#include "tst_qqmlchangeset.moc" |