aboutsummaryrefslogtreecommitdiffstats
path: root/tests/benchmarks
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@qt.io>2016-08-05 15:57:36 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2017-11-03 11:13:33 +0000
commited19f16eec849f2e14381f1f5418896bf7f8f14a (patch)
treef07901c7ec693220b57c2c752af97d06f5d54b05 /tests/benchmarks
parent0f043c594b559f2f936333c8cf9779283a480c7d (diff)
Add benchmark for event delivery
Change-Id: Ic433a832190ff3e89fae696e1eabf0c7dfa57cec Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io> Reviewed-by: Robin Burchell <robin.burchell@crimson.no> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'tests/benchmarks')
-rw-r--r--tests/benchmarks/benchmarks.pro2
-rw-r--r--tests/benchmarks/quick/events/data/mouseevent.qml47
-rw-r--r--tests/benchmarks/quick/events/data/touchevent.qml49
-rw-r--r--tests/benchmarks/quick/events/events.pro11
-rw-r--r--tests/benchmarks/quick/events/tst_events.cpp143
-rw-r--r--tests/benchmarks/quick/quick.pro4
6 files changed, 255 insertions, 1 deletions
diff --git a/tests/benchmarks/benchmarks.pro b/tests/benchmarks/benchmarks.pro
index 07a6d5ecaa..6d62fa09d9 100644
--- a/tests/benchmarks/benchmarks.pro
+++ b/tests/benchmarks/benchmarks.pro
@@ -1,5 +1,5 @@
TEMPLATE = subdirs
-SUBDIRS = qml
+SUBDIRS = qml quick
qtConfig(private_tests) {
qtConfig(opengl(es1|es2)?):SUBDIRS += particles
}
diff --git a/tests/benchmarks/quick/events/data/mouseevent.qml b/tests/benchmarks/quick/events/data/mouseevent.qml
new file mode 100644
index 0000000000..0959cc025e
--- /dev/null
+++ b/tests/benchmarks/quick/events/data/mouseevent.qml
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** 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$
+**
+****************************************************************************/
+import QtQuick 2.0
+
+Item {
+ id: root
+ width: 400
+ height: 400
+ MouseArea {
+ anchors.fill: parent
+ }
+
+ Item {
+ width: 400
+ height: 400
+
+ MouseArea {
+ objectName: "mouseArea"
+ anchors.fill: parent
+ }
+ }
+}
diff --git a/tests/benchmarks/quick/events/data/touchevent.qml b/tests/benchmarks/quick/events/data/touchevent.qml
new file mode 100644
index 0000000000..f9a4c84189
--- /dev/null
+++ b/tests/benchmarks/quick/events/data/touchevent.qml
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** 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$
+**
+****************************************************************************/
+import QtQuick 2.0
+
+Item {
+ id: root
+ width: 400
+ height: 400
+
+ MouseArea {
+ anchors.fill: parent
+ }
+
+ Item {
+ width: 400
+ height: 400
+
+ MultiPointTouchArea {
+ anchors.fill: parent
+ touchPoints: [ TouchPoint { id: point1 }]
+ touchPoints: [ TouchPoint { id: point2 }]
+ }
+ }
+}
diff --git a/tests/benchmarks/quick/events/events.pro b/tests/benchmarks/quick/events/events.pro
new file mode 100644
index 0000000000..88e85d0278
--- /dev/null
+++ b/tests/benchmarks/quick/events/events.pro
@@ -0,0 +1,11 @@
+CONFIG += benchmark
+TEMPLATE = app
+TARGET = tst_qevents
+QT += quick quick-private qml testlib
+macos:CONFIG -= app_bundle
+
+SOURCES += tst_events.cpp
+
+include (../../../auto/shared/util.pri)
+include (../../../auto/quick/shared/util.pri)
+
diff --git a/tests/benchmarks/quick/events/tst_events.cpp b/tests/benchmarks/quick/events/tst_events.cpp
new file mode 100644
index 0000000000..344842153b
--- /dev/null
+++ b/tests/benchmarks/quick/events/tst_events.cpp
@@ -0,0 +1,143 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** 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 <qtest.h>
+#include <QtQuick>
+#include <QtQuick/private/qquickmousearea_p.h>
+#include <QDebug>
+#include "../../../auto/shared/util.h"
+#include "../../../auto/quick/shared/viewtestutil.h"
+
+
+class TestView : public QQuickView
+{
+public:
+ void handleEvent(QEvent *ev) { event(ev); }
+};
+
+
+class tst_events : public QQmlDataTest
+{
+ Q_OBJECT
+
+private slots:
+ void mousePressRelease();
+ void mouseMove();
+ void touchToMousePressRelease();
+ void touchToMousePressMove();
+
+public slots:
+ void initTestCase() {
+ QQmlDataTest::initTestCase();
+ window.setBaseSize(QSize(400, 400));
+ window.setSource(testFileUrl("mouseevent.qml"));
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+ }
+
+private:
+ TestView window;
+};
+
+void tst_events::mousePressRelease()
+{
+ QQuickMouseArea *mouseArea = window.rootObject()->findChild<QQuickMouseArea *>("mouseArea");
+ QCOMPARE(mouseArea->pressed(), false);
+
+ QBENCHMARK {
+ QMouseEvent pressEvent(QEvent::MouseButtonPress, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ window.handleEvent(&pressEvent);
+ QCOMPARE(mouseArea->pressed(), true);
+ QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ window.handleEvent(&releaseEvent);
+ }
+ QCOMPARE(mouseArea->pressed(), false);
+}
+
+void tst_events::mouseMove()
+{
+ QQuickMouseArea *mouseArea = window.rootObject()->findChild<QQuickMouseArea *>("mouseArea");
+ QCOMPARE(mouseArea->pressed(), false);
+
+ QMouseEvent pressEvent(QEvent::MouseButtonPress, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ window.handleEvent(&pressEvent);
+ QCOMPARE(mouseArea->pressed(), true);
+ QMouseEvent moveEvent1(QEvent::MouseMove, QPoint(101, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ QMouseEvent moveEvent2(QEvent::MouseMove, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ QBENCHMARK {
+ window.handleEvent(&moveEvent1);
+ window.handleEvent(&moveEvent2);
+ }
+ QCOMPARE(mouseArea->pressed(), true);
+ QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(100, 100), Qt::LeftButton, Qt::LeftButton, 0);
+ window.handleEvent(&releaseEvent);
+ QCOMPARE(mouseArea->pressed(), false);
+}
+
+void tst_events::touchToMousePressRelease()
+{
+ QQuickMouseArea *mouseArea = window.rootObject()->findChild<QQuickMouseArea *>("mouseArea");
+ QCOMPARE(mouseArea->pressed(), false);
+
+ auto device = QTest::createTouchDevice();
+ auto p = QPoint(80, 80);
+
+ QBENCHMARK {
+ QTest::touchEvent(&window, device).press(0, p, &window).commit();
+ QCOMPARE(mouseArea->pressed(), true);
+ QTest::touchEvent(&window, device).release(0, p, &window).commit();
+ }
+ QCOMPARE(mouseArea->pressed(), false);
+}
+
+void tst_events::touchToMousePressMove()
+{
+ QQuickMouseArea *mouseArea = window.rootObject()->findChild<QQuickMouseArea *>("mouseArea");
+ QCOMPARE(mouseArea->pressed(), false);
+
+ auto device = QTest::createTouchDevice();
+ auto p = QPoint(80, 80);
+ auto p2 = QPoint(81, 80);
+
+ QTest::touchEvent(&window, device).press(0, p, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ QCOMPARE(mouseArea->pressed(), true);
+
+ QBENCHMARK {
+ QTest::touchEvent(&window, device).move(0, p, &window).commit();
+ QCOMPARE(mouseArea->pressed(), true);
+ QTest::touchEvent(&window, device).move(0, p2, &window).commit();
+ }
+ QCOMPARE(mouseArea->pressed(), true);
+ QTest::touchEvent(&window, device).release(0, p, &window).commit();
+ QQuickTouchUtils::flush(&window);
+ QCOMPARE(mouseArea->pressed(), false);
+}
+
+QTEST_MAIN(tst_events)
+#include "tst_events.moc"
diff --git a/tests/benchmarks/quick/quick.pro b/tests/benchmarks/quick/quick.pro
new file mode 100644
index 0000000000..87df78bd2f
--- /dev/null
+++ b/tests/benchmarks/quick/quick.pro
@@ -0,0 +1,4 @@
+TEMPLATE = subdirs
+
+SUBDIRS += \
+ events