summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-04-07 14:26:32 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-04-10 08:20:49 +0300
commit28e42188efb1544cf6b1433c244d590165ee6ebd (patch)
tree3cc0e1c717a1b21f21616dc87a08db6a9b36bada /tests
parent1b5d9a30adc0c9ca4f7929c375db008830586516 (diff)
Optimize multiple series rendering.
Cache all series instead of just the visible ones on all graphs instead of just surface. Changes to one series now trigger data update to only the affected series, which should significantly improve performance in these cases. Task-number: QTRD-2600 Task-number: QTRD-2957 Change-Id: I6db7c689108fce8d25aace6682a193936d6f0eaf Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/barstest/chart.cpp64
-rw-r--r--tests/barstest/chart.h2
-rw-r--r--tests/barstest/main.cpp6
-rw-r--r--tests/scattertest/main.cpp6
-rw-r--r--tests/scattertest/scatterchart.cpp6
-rw-r--r--tests/scattertest/scatterchart.h1
-rw-r--r--tests/surfacetest/graphmodifier.cpp38
-rw-r--r--tests/surfacetest/graphmodifier.h2
-rw-r--r--tests/surfacetest/main.cpp12
9 files changed, 136 insertions, 1 deletions
diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp
index 0a8bef55..2c095cf8 100644
--- a/tests/barstest/chart.cpp
+++ b/tests/barstest/chart.cpp
@@ -71,7 +71,8 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog)
m_defaultInputHandler(0),
m_ownTheme(0),
m_builtinTheme(new Q3DTheme(Q3DTheme::ThemeStoneMoss)),
- m_customInputHandler(new CustomInputHandler)
+ m_customInputHandler(new CustomInputHandler),
+ m_extraSeries(0)
{
m_temperatureData->setObjectName("m_temperatureData");
m_temperatureData2->setObjectName("m_temperatureData2");
@@ -1149,6 +1150,67 @@ void GraphModifier::changeLogBase(const QString &text)
formatter->setBase(qreal(text.toDouble()));
}
+void GraphModifier::addRemoveSeries()
+{
+ static int counter = 0;
+
+ switch (counter) {
+ case 0: {
+ qDebug() << __FUNCTION__ << counter << "New series";
+ m_extraSeries = new QBar3DSeries;
+ m_graph->addSeries(m_extraSeries);
+ QObject::connect(m_extraSeries, &QBar3DSeries::selectedBarChanged, this,
+ &GraphModifier::handleSelectionChange);
+ }
+ break;
+ case 1: {
+ qDebug() << __FUNCTION__ << counter << "Add data to series";
+ QBarDataArray *array = new QBarDataArray;
+ array->reserve(5);
+ for (int i = 0; i < 5; i++) {
+ array->append(new QBarDataRow(10));
+ for (int j = 0; j < 10; j++)
+ (*array->at(i))[j].setValue(i * j);
+ }
+ m_extraSeries->dataProxy()->resetArray(array);
+ }
+ break;
+ case 2: {
+ qDebug() << __FUNCTION__ << counter << "Hide series";
+ m_extraSeries->setVisible(false);
+ }
+ break;
+ case 3: {
+ qDebug() << __FUNCTION__ << counter << "Modify data when hidden";
+ QBarDataArray array;
+ array.reserve(5);
+ for (int i = 0; i < 5; i++) {
+ array.append(new QBarDataRow(10));
+ for (int j = 0; j < 10; j++)
+ (*array.at(i))[j].setValue(2 * i * j);
+ }
+ m_extraSeries->dataProxy()->addRows(array);
+ }
+ break;
+ case 4: {
+ qDebug() << __FUNCTION__ << counter << "Show series again";
+ m_extraSeries->setVisible(true);
+ }
+ break;
+ case 5: {
+ qDebug() << __FUNCTION__ << counter << "Remove series";
+ m_graph->removeSeries(m_extraSeries);
+ delete m_extraSeries;
+ m_extraSeries = 0;
+ }
+ break;
+ default:
+ qDebug() << __FUNCTION__ << "Resetting test";
+ counter = -1;
+ }
+ counter++;
+}
+
void GraphModifier::changeValueAxisSegments(int value)
{
qDebug() << __FUNCTION__ << value;
diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h
index 214c4e17..e64b282a 100644
--- a/tests/barstest/chart.h
+++ b/tests/barstest/chart.h
@@ -91,6 +91,7 @@ public:
void changeValueAxisFormat(const QString & text);
void changeLogBase(const QString & text);
void setFpsLabel(QLabel *fpsLabel) { m_fpsLabel = fpsLabel; }
+ void addRemoveSeries();
public slots:
void flipViews();
@@ -162,6 +163,7 @@ private:
QTimer m_selectionTimer;
QTimer m_rotationTimer;
QLabel *m_fpsLabel;
+ QBar3DSeries *m_extraSeries;
};
#endif
diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp
index b1589e0f..e02bddce 100644
--- a/tests/barstest/main.cpp
+++ b/tests/barstest/main.cpp
@@ -66,6 +66,10 @@ int main(int argc, char **argv)
hLayout->addLayout(vLayout);
hLayout->addLayout(vLayout2);
+ QPushButton *addSeriesButton = new QPushButton(widget);
+ addSeriesButton->setText(QStringLiteral("Add / Remove a series"));
+ addSeriesButton->setEnabled(true);
+
QPushButton *addDataButton = new QPushButton(widget);
addDataButton->setText(QStringLiteral("Add a row of data"));
addDataButton->setEnabled(false);
@@ -305,6 +309,7 @@ int main(int argc, char **argv)
valueAxisSegmentsSpin->setMaximum(100);
valueAxisSegmentsSpin->setValue(10);
+ vLayout->addWidget(addSeriesButton, 0, Qt::AlignTop);
vLayout->addWidget(addDataButton, 0, Qt::AlignTop);
vLayout->addWidget(addMultiDataButton, 0, Qt::AlignTop);
vLayout->addWidget(insertDataButton, 0, Qt::AlignTop);
@@ -419,6 +424,7 @@ int main(int argc, char **argv)
QObject::connect(labelButton, &QPushButton::clicked, modifier,
&GraphModifier::changeLabelStyle);
QObject::connect(addDataButton, &QPushButton::clicked, modifier, &GraphModifier::addRow);
+ QObject::connect(addSeriesButton, &QPushButton::clicked, modifier, &GraphModifier::addRemoveSeries);
QObject::connect(addMultiDataButton, &QPushButton::clicked, modifier, &GraphModifier::addRows);
QObject::connect(insertDataButton, &QPushButton::clicked, modifier, &GraphModifier::insertRow);
QObject::connect(insertMultiDataButton, &QPushButton::clicked, modifier, &GraphModifier::insertRows);
diff --git a/tests/scattertest/main.cpp b/tests/scattertest/main.cpp
index fbe257f5..2bd60aff 100644
--- a/tests/scattertest/main.cpp
+++ b/tests/scattertest/main.cpp
@@ -102,6 +102,9 @@ int main(int argc, char **argv)
QPushButton *setSelectedItemButton = new QPushButton(widget);
setSelectedItemButton->setText(QStringLiteral("Select/deselect item 3"));
+ QPushButton *clearSeriesDataButton = new QPushButton(widget);
+ clearSeriesDataButton->setText(QStringLiteral("Clear series data"));
+
QPushButton *addSeriesButton = new QPushButton(widget);
addSeriesButton->setText(QStringLiteral("Add Series"));
@@ -220,6 +223,7 @@ int main(int argc, char **argv)
vLayout->addWidget(removeOneButton, 0, Qt::AlignTop);
vLayout->addWidget(removeBunchButton, 0, Qt::AlignTop);
vLayout->addWidget(setSelectedItemButton, 0, Qt::AlignTop);
+ vLayout->addWidget(clearSeriesDataButton, 0, Qt::AlignTop);
vLayout->addWidget(addSeriesButton, 0, Qt::AlignTop);
vLayout->addWidget(removeSeriesButton, 0, Qt::AlignTop);
vLayout->addWidget(toggleSeriesVisibilityButton, 0, Qt::AlignTop);
@@ -280,6 +284,8 @@ int main(int argc, char **argv)
&ScatterDataModifier::removeBunch);
QObject::connect(setSelectedItemButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::selectItem);
+ QObject::connect(clearSeriesDataButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::clearSeriesData);
QObject::connect(addSeriesButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::addSeries);
QObject::connect(removeSeriesButton, &QPushButton::clicked, modifier,
diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp
index a589919f..2e208926 100644
--- a/tests/scattertest/scatterchart.cpp
+++ b/tests/scattertest/scatterchart.cpp
@@ -459,6 +459,12 @@ void ScatterDataModifier::setGradient()
}
}
+void ScatterDataModifier::clearSeriesData()
+{
+ if (m_targetSeries)
+ m_targetSeries->dataProxy()->resetArray(0);
+}
+
void ScatterDataModifier::addSeries()
{
QScatter3DSeries *series = createAndAddSeries();
diff --git a/tests/scattertest/scatterchart.h b/tests/scattertest/scatterchart.h
index 23071c85..1470f07b 100644
--- a/tests/scattertest/scatterchart.h
+++ b/tests/scattertest/scatterchart.h
@@ -71,6 +71,7 @@ public slots:
void selectItem();
void handleSelectionChange(int index);
void setGradient();
+ void clearSeriesData();
void addSeries();
void removeSeries();
void toggleSeriesVisibility();
diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp
index e1fed76a..c87eb2fc 100644
--- a/tests/surfacetest/graphmodifier.cpp
+++ b/tests/surfacetest/graphmodifier.cpp
@@ -1093,6 +1093,44 @@ void GraphModifier::removeRow()
m_zCount--;
}
+void GraphModifier::resetArray()
+{
+ qDebug() << "Reset series data array";
+ int rows = 10;
+ int columns = 10;
+ float randFactor = float(rand() % 100) / 100.0f;
+ QSurfaceDataArray *planeArray = new QSurfaceDataArray;
+ planeArray->reserve(rows);
+
+ for (int i = 0; i < rows; i++) {
+ planeArray->append(new QSurfaceDataRow);
+ (*planeArray)[i]->resize(columns);
+ for (int j = 0; j < columns; j++) {
+ (*planeArray->at(i))[j].setX(float(j) * randFactor);
+ (*planeArray->at(i))[j].setY(float(i - j) * randFactor);
+ (*planeArray->at(i))[j].setZ(float(i));
+ }
+ }
+
+#ifdef MULTI_SERIES
+ int series = rand() % 4;
+ m_multiseries[series]->dataProxy()->resetArray(planeArray);
+#else
+ m_theSeries->dataProxy()->resetArray(planeArray);
+#endif
+}
+
+void GraphModifier::resetArrayEmpty()
+{
+ QSurfaceDataArray *emptryArray = new QSurfaceDataArray;
+#ifdef MULTI_SERIES
+ int series = rand() % 4;
+ m_multiseries[series]->dataProxy()->resetArray(emptryArray);
+#else
+ m_theSeries->dataProxy()->resetArray(emptryArray);
+#endif
+}
+
void GraphModifier::changeMesh()
{
static int model = 0;
diff --git a/tests/surfacetest/graphmodifier.h b/tests/surfacetest/graphmodifier.h
index 9fd0360b..5c4ed033 100644
--- a/tests/surfacetest/graphmodifier.h
+++ b/tests/surfacetest/graphmodifier.h
@@ -105,6 +105,8 @@ public:
void insertRow();
void insertRows();
void removeRow();
+ void resetArray();
+ void resetArrayEmpty();
public slots:
void changeShadowQuality(int quality);
diff --git a/tests/surfacetest/main.cpp b/tests/surfacetest/main.cpp
index 6b54b8dd..bddb2d11 100644
--- a/tests/surfacetest/main.cpp
+++ b/tests/surfacetest/main.cpp
@@ -338,6 +338,12 @@ int main(int argc, char *argv[])
QPushButton *removeRowButton = new QPushButton(widget);
removeRowButton->setText(QStringLiteral("Remove a row"));
+ QPushButton *resetArrayButton = new QPushButton(widget);
+ resetArrayButton->setText(QStringLiteral("Reset Series Array to plane"));
+
+ QPushButton *resetArrayEmptyButton = new QPushButton(widget);
+ resetArrayEmptyButton->setText(QStringLiteral("Reset Series Array to empty"));
+
QFrame* line = new QFrame();
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
@@ -423,6 +429,8 @@ int main(int argc, char *argv[])
vLayout2->addWidget(insertRowButton);
vLayout2->addWidget(insertRowsButton);
vLayout2->addWidget(removeRowButton);
+ vLayout2->addWidget(resetArrayButton);
+ vLayout2->addWidget(resetArrayEmptyButton);
widget->show();
@@ -574,6 +582,10 @@ int main(int argc, char *argv[])
modifier, &GraphModifier::insertRows);
QObject::connect(removeRowButton,&QPushButton::clicked,
modifier, &GraphModifier::removeRow);
+ QObject::connect(resetArrayButton,&QPushButton::clicked,
+ modifier, &GraphModifier::resetArray);
+ QObject::connect(resetArrayEmptyButton,&QPushButton::clicked,
+ modifier, &GraphModifier::resetArrayEmpty);
#ifdef MULTI_SERIES
modifier->setSeries1CB(series1CB);