summaryrefslogtreecommitdiffstats
path: root/tests/manual/qmlperf
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@theqtcompany.com>2015-10-20 13:18:59 +0300
committerMiikka Heikkinen <miikka.heikkinen@theqtcompany.com>2015-10-22 10:08:51 +0000
commit31f9c57bc50ae053cfaf039a1dfdb128e2494458 (patch)
tree316138cb73c49877f5a80a8496c2f1b737122fb5 /tests/manual/qmlperf
parent4162ddeb02ee41fd4217d7f3d93d45cab3313ba8 (diff)
Fix issues with COIN builds
-Fix miscellaneous compile errors -Move manual tests to manual folder and enable export of autotests -Added widgets requirement -Fixed autotests -Fixed renderer and controller synchronization in QML case -Treat fallback Mesa as ES2 similar to setting AA_UseSoftwareOpenGL Change-Id: If6619733725d079e339bef16262e5ea1450ab20f Reviewed-by: Tomi Korpipää <tomi.korpipaa@theqtcompany.com>
Diffstat (limited to 'tests/manual/qmlperf')
-rw-r--r--tests/manual/qmlperf/datagenerator.cpp89
-rw-r--r--tests/manual/qmlperf/datagenerator.h47
-rw-r--r--tests/manual/qmlperf/main.cpp56
-rw-r--r--tests/manual/qmlperf/qml/qmlperf/main.qml194
-rw-r--r--tests/manual/qmlperf/qmlperf.pro16
-rw-r--r--tests/manual/qmlperf/qmlperf.qrc5
6 files changed, 407 insertions, 0 deletions
diff --git a/tests/manual/qmlperf/datagenerator.cpp b/tests/manual/qmlperf/datagenerator.cpp
new file mode 100644
index 00000000..265b78ee
--- /dev/null
+++ b/tests/manual/qmlperf/datagenerator.cpp
@@ -0,0 +1,89 @@
+/******************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Data Visualization module.
+**
+** $QT_BEGIN_LICENSE:COMM$
+**
+** 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.
+**
+** $QT_END_LICENSE$
+**
+******************************************************************************/
+
+#include "datagenerator.h"
+#include <QDebug>
+
+using namespace QtDataVisualization;
+
+Q_DECLARE_METATYPE(QScatter3DSeries *)
+
+DataGenerator::DataGenerator(QObject *parent) :
+ QObject(parent)
+{
+ qRegisterMetaType<QScatter3DSeries *>();
+
+ m_file = new QFile("results.txt");
+ if (!m_file->open(QIODevice::WriteOnly | QIODevice::Text)) {
+ delete m_file;
+ m_file = 0;
+ }
+}
+
+DataGenerator::~DataGenerator()
+{
+ m_file->close();
+ delete m_file;
+}
+
+void DataGenerator::generateData(QScatter3DSeries *series, uint count)
+{
+ QScatterDataArray *dataArray = new QScatterDataArray;
+ dataArray->resize(count);
+ QScatterDataItem *ptrToDataArray = &dataArray->first();
+
+ float rand_max = float(RAND_MAX);
+ for (uint i = 0; i < count; i++) {
+ ptrToDataArray->setPosition(QVector3D(float(qrand()) / rand_max,
+ float(qrand()) / rand_max,
+ float(qrand()) / rand_max));
+ ptrToDataArray++;
+ }
+
+ series->dataProxy()->resetArray(dataArray);
+}
+
+void DataGenerator::add(QScatter3DSeries *series, uint count)
+{
+ QScatterDataArray appendArray;
+ appendArray.resize(count);
+
+ float rand_max = float(RAND_MAX);
+ for (uint i = 0; i < count; i++) {
+ appendArray[i].setPosition(QVector3D(float(qrand()) / rand_max,
+ float(qrand()) / rand_max,
+ float(qrand()) / rand_max));
+ }
+
+ series->dataProxy()->addItems(appendArray);
+}
+
+void DataGenerator::writeLine(int itemCount, float fps)
+{
+ if (m_file) {
+ QTextStream out(m_file);
+
+ QString fpsFormatString(QStringLiteral("%1 %2\n"));
+ QString fpsString = fpsFormatString.arg(itemCount).arg(fps);
+
+ out << fpsString;
+ }
+}
diff --git a/tests/manual/qmlperf/datagenerator.h b/tests/manual/qmlperf/datagenerator.h
new file mode 100644
index 00000000..cb7960cc
--- /dev/null
+++ b/tests/manual/qmlperf/datagenerator.h
@@ -0,0 +1,47 @@
+/******************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Data Visualization module.
+**
+** $QT_BEGIN_LICENSE:COMM$
+**
+** 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.
+**
+** $QT_END_LICENSE$
+**
+******************************************************************************/
+
+#ifndef DATAGENERATOR_H
+#define DATAGENERATOR_H
+
+#include <QtDataVisualization/QScatter3DSeries>
+#include <QtCore/QFile>
+
+using namespace QtDataVisualization;
+
+class DataGenerator : public QObject
+{
+ Q_OBJECT
+public:
+ DataGenerator(QObject *parent = 0);
+ virtual ~DataGenerator();
+
+public Q_SLOTS:
+ void generateData(QScatter3DSeries *series, uint count);
+ void add(QScatter3DSeries *series, uint count);
+ void writeLine(int itemCount, float fps);
+
+private:
+ QScatter3DSeries m_series;
+ QFile *m_file;
+};
+
+#endif // DATAGENERATOR_H
diff --git a/tests/manual/qmlperf/main.cpp b/tests/manual/qmlperf/main.cpp
new file mode 100644
index 00000000..41fade04
--- /dev/null
+++ b/tests/manual/qmlperf/main.cpp
@@ -0,0 +1,56 @@
+/******************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Data Visualization module.
+**
+** $QT_BEGIN_LICENSE:COMM$
+**
+** 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.
+**
+** $QT_END_LICENSE$
+**
+******************************************************************************/
+
+#include "datagenerator.h"
+
+#include <QtGui/QGuiApplication>
+#include <QtCore/QDir>
+#include <QtQml/QQmlContext>
+#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);
+
+ DataGenerator dataGenerator;
+ viewer.rootContext()->setContextProperty("dataGenerator", &dataGenerator);
+
+ 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/manual/qmlperf/qml/qmlperf/main.qml b/tests/manual/qmlperf/qml/qmlperf/main.qml
new file mode 100644
index 00000000..7f73110b
--- /dev/null
+++ b/tests/manual/qmlperf/qml/qmlperf/main.qml
@@ -0,0 +1,194 @@
+/******************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Data Visualization module.
+**
+** $QT_BEGIN_LICENSE:COMM$
+**
+** 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.
+**
+** $QT_END_LICENSE$
+**
+******************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0
+import QtDataVisualization 1.1
+import "."
+
+Rectangle {
+ id: mainview
+ width: 1280
+ height: 1024
+
+ property var itemCount: 1000.0
+ property var addItems: 500.0
+
+ Button {
+ id: changeButton
+ width: parent.width / 7
+ 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: (parent.width / 7) * 3
+ height: 50
+ anchors.left: changeButton.right
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+ Button {
+ id: optimization
+ width: parent.width / 7
+ 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: parent.width / 7
+ height: 50
+ anchors.left: optimization.right
+ enabled: true
+ text: "Add"
+ onClicked: {
+ itemCount = itemCount + addItems;
+ dataGenerator.add(scatterSeries, addItems);
+ }
+ }
+
+ Button {
+ id: writeLine
+ width: parent.width / 7
+ height: 50
+ anchors.left: itemAdd.right
+ enabled: true
+ text: "Write"
+ onClicked: {
+ dataGenerator.writeLine(itemCount, scatterPlot.currentFps.toFixed(1));
+ }
+ }
+
+ Item {
+ id: graphView
+ width: mainview.width
+ height: mainview.height
+ anchors.top: changeButton.bottom
+ anchors.left: mainview.left
+ state: "meshsphere"
+
+ 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
+ }
+
+ Component.onCompleted: dataGenerator.generateData(scatterSeries, itemCount);
+ }
+
+ 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/manual/qmlperf/qmlperf.pro b/tests/manual/qmlperf/qmlperf.pro
new file mode 100644
index 00000000..e29ef75d
--- /dev/null
+++ b/tests/manual/qmlperf/qmlperf.pro
@@ -0,0 +1,16 @@
+!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 \
+ datagenerator.cpp
+
+RESOURCES += qmlperf.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/* \
+ qml/qmlperf/*
+
+HEADERS += \
+ datagenerator.h
diff --git a/tests/manual/qmlperf/qmlperf.qrc b/tests/manual/qmlperf/qmlperf.qrc
new file mode 100644
index 00000000..b52f4bb9
--- /dev/null
+++ b/tests/manual/qmlperf/qmlperf.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/qmlperf/main.qml</file>
+ </qresource>
+</RCC>