diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-04-07 14:26:32 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-04-10 08:20:49 +0300 |
commit | 28e42188efb1544cf6b1433c244d590165ee6ebd (patch) | |
tree | 3cc0e1c717a1b21f21616dc87a08db6a9b36bada /tests/barstest | |
parent | 1b5d9a30adc0c9ca4f7929c375db008830586516 (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/barstest')
-rw-r--r-- | tests/barstest/chart.cpp | 64 | ||||
-rw-r--r-- | tests/barstest/chart.h | 2 | ||||
-rw-r--r-- | tests/barstest/main.cpp | 6 |
3 files changed, 71 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); |