summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2014-10-10 13:09:01 +0300
committerMika Salmela <mika.salmela@digia.com>2014-10-10 13:29:10 +0300
commitfd9486b6cbe28a766450e35ad97d845584f56fb1 (patch)
treebfff3b43a6b4128c9a71d418bc39c026939c9e24
parent220f236a18967f7dbc1add6425483ad885b1b22e (diff)
Qml performance measurement app
Change-Id: I425da013160a12c1d2b3985e04059886d0695474 Reviewed-by: Mika Salmela <mika.salmela@digia.com>
-rw-r--r--tests/qmlperf/main.cpp47
-rw-r--r--tests/qmlperf/qml/qmlperf/main.qml189
-rw-r--r--tests/qmlperf/qml/qmlperf/script.js33
-rw-r--r--tests/qmlperf/qmlperf.pro12
-rw-r--r--tests/qmlperf/qmlperf.qrc6
-rw-r--r--tests/tests.pro3
6 files changed, 289 insertions, 1 deletions
diff --git a/tests/qmlperf/main.cpp b/tests/qmlperf/main.cpp
new file mode 100644
index 00000000..7d35b2ed
--- /dev/null
+++ b/tests/qmlperf/main.cpp
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include <QtGui/QGuiApplication>
+#include <QtCore/QDir>
+#include <QtQuick/QQuickView>
+#include <QtQml/QQmlEngine>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QQuickView viewer;
+
+ // The following are needed to make examples run without having to install the module
+ // in desktop environments.
+#ifdef Q_OS_WIN
+ QString extraImportPath(QStringLiteral("%1/../../../%2"));
+#else
+ QString extraImportPath(QStringLiteral("%1/../../%2"));
+#endif
+ viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
+ QString::fromLatin1("qml")));
+ QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
+
+ viewer.setTitle(QStringLiteral("QML Performance"));
+ viewer.setSource(QUrl("qrc:/qml/qmlperf/main.qml"));
+ viewer.setResizeMode(QQuickView::SizeRootObjectToView);
+ viewer.show();
+
+ return app.exec();
+}
diff --git a/tests/qmlperf/qml/qmlperf/main.qml b/tests/qmlperf/qml/qmlperf/main.qml
new file mode 100644
index 00000000..35f8df5d
--- /dev/null
+++ b/tests/qmlperf/qml/qmlperf/main.qml
@@ -0,0 +1,189 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0
+import QtDataVisualization 1.1
+import "script.js" as Script
+import "."
+
+Rectangle {
+ id: mainview
+ width: 1280
+ height: 1024
+
+ property var itemCount: 1000.0
+ property var addItems: 1000.0
+
+ Button {
+ id: changeButton
+ width: 350
+ height: 50
+ anchors.left: parent.left
+ enabled: true
+ text: "Change"
+ onClicked: {
+ console.log("changeButton clicked");
+ if (graphView.state == "meshsphere") {
+ graphView.state = "meshcube"
+ } else if (graphView.state == "meshcube") {
+ graphView.state = "meshpyramid"
+ } else if (graphView.state == "meshpyramid") {
+ graphView.state = "meshpoint"
+ } else if (graphView.state == "meshpoint") {
+ graphView.state = "meshsphere"
+ }
+ }
+ }
+
+ Text {
+ id: fpsText
+ text: "Reading"
+ width: 300
+ height: 50
+ anchors.left: changeButton.right
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+ Button {
+ id: optimization
+ width: 300
+ height: 50
+ anchors.left: fpsText.right
+ enabled: true
+ text: scatterPlot.optimizationHints === AbstractGraph3D.OptimizationDefault ? "To Static" : "To Default"
+ onClicked: {
+ console.log("Optimization");
+ if (scatterPlot.optimizationHints === AbstractGraph3D.OptimizationDefault) {
+ scatterPlot.optimizationHints = AbstractGraph3D.OptimizationStatic;
+ optimization.text = "To Default";
+ } else {
+ scatterPlot.optimizationHints = AbstractGraph3D.OptimizationDefault;
+ optimization.text = "To Static";
+ }
+ }
+ }
+
+ Button {
+ id: itemAdd
+ width: 300
+ height: 50
+ anchors.left: optimization.right
+ enabled: true
+ text: "Add"
+ onClicked: {
+ itemCount = itemCount + addItems;
+ Script.createData(addItems);
+ }
+ }
+
+ Item {
+ id: graphView
+ width: mainview.width
+ height: mainview.height
+ anchors.top: changeButton.bottom
+ anchors.left: mainview.left
+ state: "meshsphere"
+
+ ListModel {
+ id: dataModel
+ Component.onCompleted: Script.createData(itemCount)
+ }
+
+ Scatter3D {
+ id: scatterPlot
+ width: graphView.width
+ height: graphView.height
+ shadowQuality: AbstractGraph3D.ShadowQualityNone
+ optimizationHints: AbstractGraph3D.OptimizationDefault
+ scene.activeCamera.yRotation: 45.0
+ measureFps: true
+ onCurrentFpsChanged: {
+ fpsText.text = itemCount + " : " + scatterPlot.currentFps.toFixed(1);
+ }
+
+// theme: Theme3D {
+// type: Theme3D.ThemeRetro
+// colorStyle: Theme3D.ColorStyleRangeGradient
+// baseGradients: customGradient
+
+// ColorGradient {
+// id: customGradient
+// ColorGradientStop { position: 1.0; color: "red" }
+// ColorGradientStop { position: 0.0; color: "blue" }
+// }
+// }
+
+ Scatter3DSeries {
+ id: scatterSeries
+ mesh: Abstract3DSeries.MeshSphere
+ ItemModelScatterDataProxy {
+ itemModel: dataModel
+ xPosRole: "x"
+ yPosRole: "y"
+ zPosRole: "z"
+ }
+ }
+ }
+
+ states: [
+ State {
+ name: "meshsphere"
+ StateChangeScript {
+ name: "doSphere"
+ script: {
+ console.log("Do the sphere");
+ scatterSeries.mesh = Abstract3DSeries.MeshSphere;
+ }
+ }
+ },
+ State {
+ name: "meshcube"
+ StateChangeScript {
+ name: "doCube"
+ script: {
+ console.log("Do the cube");
+ scatterSeries.mesh = Abstract3DSeries.MeshCube;
+ }
+ }
+ },
+ State {
+ name: "meshpyramid"
+ StateChangeScript {
+ name: "doPyramid"
+ script: {
+ console.log("Do the pyramid");
+ scatterSeries.mesh = Abstract3DSeries.MeshPyramid;
+ }
+ }
+ },
+ State {
+ name: "meshpoint"
+ StateChangeScript {
+ name: "doPoint"
+ script: {
+ console.log("Do the point");
+ scatterSeries.mesh = Abstract3DSeries.MeshPoint;
+ }
+ }
+ }
+ ]
+ }
+}
diff --git a/tests/qmlperf/qml/qmlperf/script.js b/tests/qmlperf/qml/qmlperf/script.js
new file mode 100644
index 00000000..dc271e8d
--- /dev/null
+++ b/tests/qmlperf/qml/qmlperf/script.js
@@ -0,0 +1,33 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+//function createData(base) {
+// for (var z = 0; z < 30; z++) {
+// for (var x = 0; x < 30; x++) {
+// var angle = (((z - 16) * (x - 16)) / 144.0) * 1.57;
+// var y = Math.sin(angle + base);
+// dataModel.append({"z": z, "x": x, "y": y});
+// }
+// }
+//}
+
+function createData(base) {
+ for (var i = 0; i < base; i++) {
+ dataModel.append({"z": Math.random(), "x": Math.random(), "y": Math.random()});
+ }
+}
diff --git a/tests/qmlperf/qmlperf.pro b/tests/qmlperf/qmlperf.pro
new file mode 100644
index 00000000..6560f55c
--- /dev/null
+++ b/tests/qmlperf/qmlperf.pro
@@ -0,0 +1,12 @@
+!include( ../tests.pri ) {
+ error( "Couldn't find the tests.pri file!" )
+}
+
+# The .cpp file which was generated for your project. Feel free to hack it.
+SOURCES += main.cpp
+
+RESOURCES += qmlperf.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/* \
+ qml/qmlperf/*
diff --git a/tests/qmlperf/qmlperf.qrc b/tests/qmlperf/qmlperf.qrc
new file mode 100644
index 00000000..e50815c5
--- /dev/null
+++ b/tests/qmlperf/qmlperf.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/qmlperf/main.qml</file>
+ <file>qml/qmlperf/script.js</file>
+ </qresource>
+</RCC>
diff --git a/tests/tests.pro b/tests/tests.pro
index e5364a0e..34ddb5e5 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -19,7 +19,8 @@ SUBDIRS += barstest \
qmlmultitest \
volumetrictest \
qmlvolume \
- auto
+ auto \
+ qmlperf
#SUBDIRS += kinectsurface