aboutsummaryrefslogtreecommitdiffstats
path: root/tests/benchmarks/quick/colorresolving/data/tst_colorresolving.qml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmarks/quick/colorresolving/data/tst_colorresolving.qml')
-rw-r--r--tests/benchmarks/quick/colorresolving/data/tst_colorresolving.qml149
1 files changed, 149 insertions, 0 deletions
diff --git a/tests/benchmarks/quick/colorresolving/data/tst_colorresolving.qml b/tests/benchmarks/quick/colorresolving/data/tst_colorresolving.qml
new file mode 100644
index 0000000000..37aecaa3a4
--- /dev/null
+++ b/tests/benchmarks/quick/colorresolving/data/tst_colorresolving.qml
@@ -0,0 +1,149 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later 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 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtTest 1.2
+import QtQuick 6.0
+
+TestCase {
+ id: testCase
+ width: 800
+ height: 600
+ visible: true
+ when: windowShown
+
+ property var items: []
+ property int items_count: 1000
+ property int itemWidth : 50
+ property int itemHeight: 50
+
+ // A reference point (added upon request)
+ function benchmark_do_nothing_with_palettes() {}
+
+ // This test passes through all items in tree to resolve a color. No extra palettes created.
+ // Should be blazingly fast (approx. 0.01 msecs for 999 items).
+ function benchmark_color_lookup() {
+ // Make last item "visible" and create its palette
+ items[items_count - 1].color = items[items_count - 1].palette.button
+
+ compare(items[0].palette.button, items[items_count - 1].palette.button,
+ "Color is not propagated to the last element.")
+ }
+
+ // This test creates palettes for all elements in the tree.
+ function benchmark_create_all_palettes(data) {
+ populate_palettes()
+ check_palettes()
+ }
+
+ // This test creates and resolves palettes for all elements in the tree.
+ function benchmark_create_and_resolve_all_palettes() {
+ populate_palettes()
+ resolve_palettes()
+ check_palettes()
+ }
+
+ function init() {
+ // Re-create all items on each iteration of the benchmark.
+
+ var componentStr = "import QtQuick 6.0;
+
+ Rectangle {
+ x: mapFromItem(testCase, testCase.randomX(), testCase.randomY()).x
+ y: mapFromItem(testCase, testCase.randomX(), testCase.randomY()).y
+
+ color: \"#7F696969\"
+
+ width: testCase.itemWidth
+ height: testCase.itemHeight
+ }";
+ items.push(createTemporaryQmlObject(componentStr, testCase))
+ for (var i = 1; i < items_count; ++i) {
+ items.push(createTemporaryQmlObject(componentStr, items[i - 1]))
+ }
+
+ // Create a pallet for item 0
+ items[0].palette.button = randomRgba()
+
+ // Make item "visible" (can be overlapped by children)
+ items[0].color = items[0].palette.button
+ }
+
+ function cleanup() {
+ // Explicitly remove all "temporary" items to make sure that a memory
+ // will be released after each iteration of the benchmark.
+ for (var i = 0; i < items_count; ++i) {
+ items[i].destroy();
+ }
+
+ items = [];
+ }
+
+ function randomColorComponent() {
+ return Math.floor(Math.random() * 256) / 255.0;
+ }
+
+ function randomRgba() {
+ return Qt.rgba(randomColorComponent(),
+ randomColorComponent(),
+ randomColorComponent(),
+ randomColorComponent());
+ }
+
+ function randomCoordinate(len, itemLen) { return Math.floor(Math.random() * (len - itemLen + 1)); }
+ function randomX() { return randomCoordinate(width, itemWidth); }
+ function randomY() { return randomCoordinate(height, itemHeight); }
+
+ function populate_palettes() {
+ for (var i = 1; i < items_count; ++i) {
+ items[i].color = items[i].palette.button
+ }
+ }
+
+ function check_palettes() {
+ for (var j = 1; j < items_count; ++j) {
+ compare(items[j - 1].palette.button, items[j].palette.button,
+ "Color is not propagated to the next child element.")
+ }
+ }
+
+ function resolve_palettes() {
+ // The loop is just in case. Doesn't affect the benchmark
+ do {
+ var randomColor = randomRgba()
+ } while (items[0].palette.button === randomColor)
+
+ items[0].palette.button = randomColor
+ }
+}