aboutsummaryrefslogtreecommitdiffstats
path: root/tests/benchmarks
diff options
context:
space:
mode:
authorMaximilian Goldstein <max.goldstein@qt.io>2021-02-15 17:11:47 +0100
committerMaximilian Goldstein <max.goldstein@qt.io>2021-02-24 09:29:30 +0100
commitc603d30887d6b56ec7e67f9adfcfe01ca3d9b523 (patch)
tree2ec43123276d5982cb453601c8c1a76aba0af49d /tests/benchmarks
parentc71c48f5125c116f01f615f51f10e4f2877b2b1d (diff)
Add additional binding benchmarks
Change-Id: I82b2a099553e28ac004f0425d1544fbcb10c28c6 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/benchmarks')
-rwxr-xr-xtests/benchmarks/qml/binding/data/repeat.sh13
-rw-r--r--tests/benchmarks/qml/binding/data/repeated.branch.in.txt4
-rw-r--r--tests/benchmarks/qml/binding/data/repeated.branch.out.txt410
-rw-r--r--tests/benchmarks/qml/binding/data/repeated.multiple.in.txt6
-rw-r--r--tests/benchmarks/qml/binding/data/repeated.multiple.out.txt610
-rw-r--r--tests/benchmarks/qml/binding/data/repeated.plain.in.txt3
-rw-r--r--tests/benchmarks/qml/binding/data/repeated.plain.out.txt310
-rw-r--r--tests/benchmarks/qml/binding/tst_binding.cpp4
8 files changed, 1360 insertions, 0 deletions
diff --git a/tests/benchmarks/qml/binding/data/repeat.sh b/tests/benchmarks/qml/binding/data/repeat.sh
new file mode 100755
index 0000000000..287a948950
--- /dev/null
+++ b/tests/benchmarks/qml/binding/data/repeat.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+REPEAT_TIMES=100
+
+to_repeat=$(cat $1)
+
+echo -e "import QtQuick 2.15\nimport Test 1.0\n\nMyQmlObject {\nid: qmlObject\nresult: ###\n\n" > $2
+
+for x in $(seq 1 $REPEAT_TIMES); do
+ echo "$to_repeat" >> $2;
+done
+
+echo -e "}\n" >> $2
diff --git a/tests/benchmarks/qml/binding/data/repeated.branch.in.txt b/tests/benchmarks/qml/binding/data/repeated.branch.in.txt
new file mode 100644
index 0000000000..a2db5c7fd6
--- /dev/null
+++ b/tests/benchmarks/qml/binding/data/repeated.branch.in.txt
@@ -0,0 +1,4 @@
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
diff --git a/tests/benchmarks/qml/binding/data/repeated.branch.out.txt b/tests/benchmarks/qml/binding/data/repeated.branch.out.txt
new file mode 100644
index 0000000000..b502af3d27
--- /dev/null
+++ b/tests/benchmarks/qml/binding/data/repeated.branch.out.txt
@@ -0,0 +1,410 @@
+import QtQuick 2.15
+import Test 1.0
+
+MyQmlObject {
+id: qmlObject
+result: ###
+
+
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+Item {
+ function fib(n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); }
+ width: qmlObject.value < 100 ? qmlObject.value : qmlObject.value * fib(10)
+}
+}
+
diff --git a/tests/benchmarks/qml/binding/data/repeated.multiple.in.txt b/tests/benchmarks/qml/binding/data/repeated.multiple.in.txt
new file mode 100644
index 0000000000..89f99e98a8
--- /dev/null
+++ b/tests/benchmarks/qml/binding/data/repeated.multiple.in.txt
@@ -0,0 +1,6 @@
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
diff --git a/tests/benchmarks/qml/binding/data/repeated.multiple.out.txt b/tests/benchmarks/qml/binding/data/repeated.multiple.out.txt
new file mode 100644
index 0000000000..0bb0409a5d
--- /dev/null
+++ b/tests/benchmarks/qml/binding/data/repeated.multiple.out.txt
@@ -0,0 +1,610 @@
+import QtQuick 2.15
+import Test 1.0
+
+MyQmlObject {
+id: qmlObject
+result: ###
+
+
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+Item {
+ width: qmlObject.value
+ height: width + 10
+ x: width / height
+ y: x + width + height
+}
+}
+
diff --git a/tests/benchmarks/qml/binding/data/repeated.plain.in.txt b/tests/benchmarks/qml/binding/data/repeated.plain.in.txt
new file mode 100644
index 0000000000..3f3cfefe02
--- /dev/null
+++ b/tests/benchmarks/qml/binding/data/repeated.plain.in.txt
@@ -0,0 +1,3 @@
+Item {
+ width: qmlObject.value
+}
diff --git a/tests/benchmarks/qml/binding/data/repeated.plain.out.txt b/tests/benchmarks/qml/binding/data/repeated.plain.out.txt
new file mode 100644
index 0000000000..a1b8d227f2
--- /dev/null
+++ b/tests/benchmarks/qml/binding/data/repeated.plain.out.txt
@@ -0,0 +1,310 @@
+import QtQuick 2.15
+import Test 1.0
+
+MyQmlObject {
+id: qmlObject
+result: ###
+
+
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+Item {
+ width: qmlObject.value
+}
+}
+
diff --git a/tests/benchmarks/qml/binding/tst_binding.cpp b/tests/benchmarks/qml/binding/tst_binding.cpp
index c5cea86fce..dddbf26ed7 100644
--- a/tests/benchmarks/qml/binding/tst_binding.cpp
+++ b/tests/benchmarks/qml/binding/tst_binding.cpp
@@ -122,6 +122,10 @@ void tst_binding::basicproperty_data()
QTest::addColumn<QString>("file");
QTest::addColumn<QString>("binding");
+ QTest::newRow("value (repeated)") << SRCDIR "/data/repeated.plain.out.txt" << "value";
+ QTest::newRow("value (repeated multiple)") << SRCDIR "/data/repeated.multiple.out.txt" << "value";
+ QTest::newRow("value (repeated branch)") << SRCDIR "/data/repeated.branch.out.txt" << "value";
+
QTest::newRow("value") << SRCDIR "/data/localproperty.txt" << "value";
QTest::newRow("value + 10") << SRCDIR "/data/localproperty.txt" << "value + 10";
QTest::newRow("value + value + 10") << SRCDIR "/data/localproperty.txt" << "value + value + 10";