diff options
Diffstat (limited to 'tests/manual/qmlperf')
-rw-r--r-- | tests/manual/qmlperf/datagenerator.cpp | 89 | ||||
-rw-r--r-- | tests/manual/qmlperf/datagenerator.h | 47 | ||||
-rw-r--r-- | tests/manual/qmlperf/main.cpp | 56 | ||||
-rw-r--r-- | tests/manual/qmlperf/qml/qmlperf/main.qml | 194 | ||||
-rw-r--r-- | tests/manual/qmlperf/qmlperf.pro | 16 | ||||
-rw-r--r-- | tests/manual/qmlperf/qmlperf.qrc | 5 |
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> |