summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-04-29 14:50:04 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-04-30 13:35:41 +0300
commit44b410f080c4820cea682c4d1278152d2767595c (patch)
treecebc33aae831beee71f52bddb6f4d4f9a768c69b /tests
parent35a52776f687c43a4894fafbec9af3893f1d7f65 (diff)
Bar data item and row changing optimizations
No longer reset the entire render item array if single item or row changes, significantly speeding up these operations. Task-number: QTRD-2190 Change-Id: I44b8abd384003e252e4bfc34af5d73ac1dee34bf Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com> Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/barstest/chart.cpp269
-rw-r--r--tests/barstest/chart.h6
-rw-r--r--tests/barstest/main.cpp13
-rw-r--r--tests/surfacetest/graphmodifier.cpp4
4 files changed, 259 insertions, 33 deletions
diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp
index 2c095cf8..9bf21cbd 100644
--- a/tests/barstest/chart.cpp
+++ b/tests/barstest/chart.cpp
@@ -316,32 +316,14 @@ void GraphModifier::releaseAxes()
// Releases all axes - results in default axes for all dimensions.
// Axes reset when the graph is switched as set*Axis calls are made, which
// implicitly add axes.
- m_graph->releaseAxis(m_autoAdjustingAxis);
- m_graph->releaseAxis(m_fixedRangeAxis);
- m_graph->releaseAxis(m_temperatureAxis);
- m_graph->releaseAxis(m_yearAxis);
- m_graph->releaseAxis(m_monthAxis);
- m_graph->releaseAxis(m_genericRowAxis);
- m_graph->releaseAxis(m_genericColumnAxis);
+ foreach (QAbstract3DAxis *axis, m_graph->axes())
+ m_graph->releaseAxis(axis);
}
-void GraphModifier::releaseProxies()
+void GraphModifier::releaseSeries()
{
- // Releases all series/add all series toggle
- if (m_graph->seriesList().size() > 0) {
- m_graph->removeSeries(m_temperatureData);
- m_graph->removeSeries(m_temperatureData2);
- m_graph->removeSeries(m_genericData);
- m_graph->removeSeries(m_dummyData);
- m_graph->removeSeries(m_dummyData2);
- m_graph->removeSeries(m_dummyData3);
- m_graph->removeSeries(m_dummyData4);
- m_graph->removeSeries(m_dummyData5);
- } else {
- m_graph->addSeries(m_temperatureData);
- m_graph->addSeries(m_temperatureData2);
- m_graph->addSeries(m_genericData);
- }
+ foreach (QBar3DSeries *series, m_graph->seriesList())
+ m_graph->removeSeries(series);
}
void GraphModifier::flipViews()
@@ -771,7 +753,7 @@ void GraphModifier::changeShadowQuality(int quality)
void GraphModifier::showFiveSeries()
{
- releaseProxies();
+ releaseSeries();
releaseAxes();
m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemRowAndColumn | QAbstract3DGraph::SelectionMultiSeries);
@@ -838,7 +820,7 @@ void GraphModifier::primarySeriesTest()
case 0: {
qDebug() << "Step 0 - Init:";
m_graph->addSeries(m_dummyData); // Add one series to enforce release in releaseProxies()
- releaseProxies();
+ releaseSeries();
releaseAxes();
m_dummyData->dataProxy()->resetArray(makeDummyData(),
testLabels,
@@ -1028,11 +1010,11 @@ void GraphModifier::insertRemoveTestToggle()
m_selectionTimer.stop();
m_graph->removeSeries(m_dummyData);
m_graph->removeSeries(m_dummyData2);
- releaseProxies();
+ releaseSeries();
releaseAxes();
m_graph->setActiveInputHandler(m_defaultInputHandler);
} else {
- releaseProxies();
+ releaseSeries();
releaseAxes();
m_graph->rowAxis()->setRange(0, 32);
m_graph->columnAxis()->setRange(0, 10);
@@ -1211,6 +1193,213 @@ void GraphModifier::addRemoveSeries()
counter++;
}
+void GraphModifier::testItemAndRowChanges()
+{
+ static int counter = 0;
+ const int rowCount = 12;
+ const int colCount = 10;
+ const float flatValue = 10.0f;
+ static QBar3DSeries *series0 = 0;
+ static QBar3DSeries *series1 = 0;
+ static QBar3DSeries *series2 = 0;
+ QBarDataItem item25;
+ QBarDataItem item50;
+ QBarDataItem item75;
+ item25.setValue(25);
+ item50.setValue(50);
+ item75.setValue(75);
+
+ switch (counter) {
+ case 0: {
+ qDebug() << __FUNCTION__ << counter << "Setup test";
+ releaseSeries();
+ releaseAxes();
+ delete series0;
+ delete series1;
+ delete series2;
+ series0 = new QBar3DSeries;
+ series1 = new QBar3DSeries;
+ series2 = new QBar3DSeries;
+ populateFlatSeries(series0, rowCount, colCount, flatValue);
+ populateFlatSeries(series1, rowCount, colCount, flatValue);
+ populateFlatSeries(series2, rowCount, colCount, flatValue);
+ m_graph->rowAxis()->setRange(4.0f, 8.0f);
+ m_graph->columnAxis()->setRange(3.0f, 6.0f);
+ m_graph->valueAxis()->setRange(0.0f, 100.0f);
+ m_graph->addSeries(series0);
+ m_graph->addSeries(series1);
+ m_graph->addSeries(series2);
+ //counter = 11; // skip single item tests
+ }
+ break;
+ case 1: {
+ qDebug() << __FUNCTION__ << counter << "Change single item, unselected";
+ series0->dataProxy()->setItem(4, 3, item50);
+ }
+ break;
+ case 2: {
+ qDebug() << __FUNCTION__ << counter << "Change single item, selected";
+ series1->setSelectedBar(QPoint(4, 5));
+ series1->dataProxy()->setItem(4, 5, item25);
+ }
+ break;
+ case 3: {
+ qDebug() << __FUNCTION__ << counter << "Change item outside visible area";
+ series1->dataProxy()->setItem(0, 3, item25);
+ }
+ break;
+ case 4: {
+ qDebug() << __FUNCTION__ << counter << "Change single item from two series, unselected";
+ series0->dataProxy()->setItem(5, 3, item25);
+ series1->dataProxy()->setItem(5, 3, item75);
+ }
+ break;
+ case 5: {
+ qDebug() << __FUNCTION__ << counter << "Change single item from two series, one selected";
+ series0->dataProxy()->setItem(5, 4, item25);
+ series1->dataProxy()->setItem(4, 5, item75);
+ }
+ break;
+ case 6: {
+ qDebug() << __FUNCTION__ << counter << "Change single item from two series, one outside range";
+ series0->dataProxy()->setItem(1, 2, item25);
+ series1->dataProxy()->setItem(6, 6, item75);
+ }
+ break;
+ case 7: {
+ qDebug() << __FUNCTION__ << counter << "Change single item from two series, both outside range";
+ series0->dataProxy()->setItem(1, 2, item25);
+ series1->dataProxy()->setItem(8, 8, item75);
+ }
+ break;
+ case 8: {
+ qDebug() << __FUNCTION__ << counter << "Change item to same value";
+ series1->dataProxy()->setItem(6, 6, item75);
+ }
+ break;
+ case 9: {
+ qDebug() << __FUNCTION__ << counter << "Change 3 items on each series";
+ series0->dataProxy()->setItem(7, 3, item25);
+ series0->dataProxy()->setItem(7, 4, item50);
+ series0->dataProxy()->setItem(7, 5, item75);
+ series1->dataProxy()->setItem(6, 3, item25);
+ series1->dataProxy()->setItem(6, 4, item50);
+ series1->dataProxy()->setItem(6, 5, item75);
+ }
+ break;
+ case 10: {
+ qDebug() << __FUNCTION__ << counter << "Level the field single item at a time";
+ QBarDataItem item;
+ item.setValue(15.0f);
+ for (int i = 0; i < rowCount; i++) {
+ for (int j = 0; j < colCount; j++) {
+ series0->dataProxy()->setItem(i, j, item);
+ series1->dataProxy()->setItem(i, j, item);
+ series2->dataProxy()->setItem(i, j, item);
+ }
+ }
+ }
+ break;
+ case 11: {
+ qDebug() << __FUNCTION__ << counter << "Change same items multiple times";
+ series0->dataProxy()->setItem(7, 3, item25);
+ series1->dataProxy()->setItem(7, 3, item25);
+ series0->dataProxy()->setItem(7, 3, item50);
+ series1->dataProxy()->setItem(7, 3, item50);
+ series0->dataProxy()->setItem(7, 3, item75);
+ series1->dataProxy()->setItem(7, 3, item75);
+ }
+ break;
+ case 12: {
+ qDebug() << __FUNCTION__ << counter << "Change row";
+ series0->dataProxy()->setRow(5, createFlatRow(colCount, 50.0f));
+ }
+ break;
+ case 13: {
+ qDebug() << __FUNCTION__ << counter << "Change row with selected item";
+ series1->setSelectedBar(QPoint(6, 6));
+ series1->dataProxy()->setRow(6, createFlatRow(colCount, 40.0f));
+ }
+ break;
+ case 14: {
+ qDebug() << __FUNCTION__ << counter << "Change hidden row";
+ series1->dataProxy()->setRow(9, createFlatRow(colCount, 50.0f));
+ }
+ break;
+ case 15: {
+ qDebug() << __FUNCTION__ << counter << "Change multiple rows singly";
+ series0->dataProxy()->setRow(6, createFlatRow(colCount, 70.0f));
+ series1->dataProxy()->setRow(6, createFlatRow(colCount, 80.0f));
+ series2->dataProxy()->setRow(6, createFlatRow(colCount, 90.0f));
+ }
+ break;
+ case 16: {
+ qDebug() << __FUNCTION__ << counter << "Change multiple rows many at a time";
+ QBarDataArray newRows;
+ newRows.reserve(4);
+ newRows.append(createFlatRow(colCount, 26.0f));
+ newRows.append(createFlatRow(colCount, 30.0f));
+ newRows.append(createFlatRow(colCount, 34.0f));
+ newRows.append(createFlatRow(colCount, 38.0f));
+ series0->dataProxy()->setRows(2, newRows);
+ newRows[0] = createFlatRow(colCount, 26.0f);
+ newRows[1] = createFlatRow(colCount, 30.0f);
+ newRows[2] = createFlatRow(colCount, 34.0f);
+ newRows[3] = createFlatRow(colCount, 38.0f);
+ series1->dataProxy()->setRows(3, newRows);
+ newRows[0] = createFlatRow(colCount, 26.0f);
+ newRows[1] = createFlatRow(colCount, 30.0f);
+ newRows[2] = createFlatRow(colCount, 34.0f);
+ newRows[3] = createFlatRow(colCount, 38.0f);
+ series2->dataProxy()->setRows(4, newRows);
+ }
+ break;
+ case 17: {
+ qDebug() << __FUNCTION__ << counter << "Change same rows multiple times";
+ QBarDataArray newRows;
+ newRows.reserve(4);
+ newRows.append(createFlatRow(colCount, 65.0f));
+ newRows.append(createFlatRow(colCount, 65.0f));
+ newRows.append(createFlatRow(colCount, 65.0f));
+ newRows.append(createFlatRow(colCount, 65.0f));
+ series0->dataProxy()->setRows(4, newRows);
+ newRows[0] = createFlatRow(colCount, 65.0f);
+ newRows[1] = createFlatRow(colCount, 65.0f);
+ newRows[2] = createFlatRow(colCount, 65.0f);
+ newRows[3] = createFlatRow(colCount, 65.0f);
+ series1->dataProxy()->setRows(4, newRows);
+ newRows[0] = createFlatRow(colCount, 65.0f);
+ newRows[1] = createFlatRow(colCount, 65.0f);
+ newRows[2] = createFlatRow(colCount, 65.0f);
+ newRows[3] = createFlatRow(colCount, 65.0f);
+ series2->dataProxy()->setRows(4, newRows);
+ series0->dataProxy()->setRow(6, createFlatRow(colCount, 20.0f));
+ series1->dataProxy()->setRow(6, createFlatRow(colCount, 20.0f));
+ series2->dataProxy()->setRow(6, createFlatRow(colCount, 20.0f));
+ series0->dataProxy()->setRow(6, createFlatRow(colCount, 90.0f));
+ series1->dataProxy()->setRow(6, createFlatRow(colCount, 90.0f));
+ series2->dataProxy()->setRow(6, createFlatRow(colCount, 90.0f));
+ }
+ break;
+ case 18: {
+ qDebug() << __FUNCTION__ << counter << "Change row to different length";
+ series0->dataProxy()->setRow(4, createFlatRow(5, 20.0f));
+ series1->dataProxy()->setRow(4, createFlatRow(0, 20.0f));
+ series2->dataProxy()->setRow(4, 0);
+ }
+ break;
+ case 19: {
+ qDebug() << __FUNCTION__ << counter << "Change selected row shorter so that selected item is no longer valid";
+ series1->dataProxy()->setRow(6, createFlatRow(6, 20.0f));
+ }
+ break;
+ default:
+ qDebug() << __FUNCTION__ << "Resetting test";
+ counter = -1;
+ }
+ counter++;
+}
+
void GraphModifier::changeValueAxisSegments(int value)
{
qDebug() << __FUNCTION__ << value;
@@ -1285,6 +1474,32 @@ void GraphModifier::handleFpsChange(qreal fps)
m_fpsLabel->setText(fpsPrefix + QString::number(qRound(fps)));
}
+void GraphModifier::populateFlatSeries(QBar3DSeries *series, int rows, int columns, float value)
+{
+ QBarDataArray *dataArray = new QBarDataArray;
+ dataArray->reserve(rows);
+ for (int i = 0; i < rows; i++) {
+ QBarDataRow *dataRow = new QBarDataRow(columns);
+ for (int j = 0; j < columns; j++)
+ (*dataRow)[j].setValue(value);
+ dataArray->append(dataRow);
+ }
+ QStringList axisLabels;
+ int count = qMax(rows, columns);
+ for (int i = 0; i < count; i++)
+ axisLabels << QString::number(i);
+
+ series->dataProxy()->resetArray(dataArray, axisLabels, axisLabels);
+}
+
+QBarDataRow *GraphModifier::createFlatRow(int columns, float value)
+{
+ QBarDataRow *dataRow = new QBarDataRow(columns);
+ for (int j = 0; j < columns; j++)
+ (*dataRow)[j].setValue(value);
+ return dataRow;
+}
+
void GraphModifier::setBackgroundEnabled(int enabled)
{
m_graph->activeTheme()->setBackgroundEnabled(bool(enabled));
diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h
index e64b282a..385e139c 100644
--- a/tests/barstest/chart.h
+++ b/tests/barstest/chart.h
@@ -77,7 +77,7 @@ public:
void selectBar();
void swapAxis();
void releaseAxes();
- void releaseProxies();
+ void releaseSeries();
void createMassiveArray();
void useOwnTheme();
void changeBaseColor(const QColor &color);
@@ -92,6 +92,7 @@ public:
void changeLogBase(const QString & text);
void setFpsLabel(QLabel *fpsLabel) { m_fpsLabel = fpsLabel; }
void addRemoveSeries();
+ void testItemAndRowChanges();
public slots:
void flipViews();
@@ -118,6 +119,9 @@ signals:
void shadowQualityChanged(int quality);
private:
+ void populateFlatSeries(QBar3DSeries *series, int rows, int columns, float value);
+ QBarDataRow *createFlatRow(int columns, float value);
+
Q3DBars *m_graph;
QColorDialog *m_colorDialog;
int m_columnCount;
diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp
index e02bddce..1182ffdf 100644
--- a/tests/barstest/main.cpp
+++ b/tests/barstest/main.cpp
@@ -175,6 +175,10 @@ int main(int argc, char **argv)
logAxisButton->setText(QStringLiteral("Use Log Axis"));
logAxisButton->setEnabled(true);
+ QPushButton *testItemAndRowChangesButton = new QPushButton(widget);
+ testItemAndRowChangesButton->setText(QStringLiteral("Test Item/Row changing"));
+ testItemAndRowChangesButton->setEnabled(true);
+
QColorDialog *colorDialog = new QColorDialog(widget);
QLinearGradient grBtoY(0, 0, 100, 0);
@@ -337,7 +341,9 @@ int main(int argc, char **argv)
vLayout->addWidget(ownThemeButton, 0, Qt::AlignTop);
vLayout->addWidget(primarySeriesTestsButton, 0, Qt::AlignTop);
vLayout->addWidget(toggleRotationButton, 0, Qt::AlignTop);
- vLayout->addWidget(gradientBtoYPB, 1, Qt::AlignTop);
+ vLayout->addWidget(gradientBtoYPB, 0, Qt::AlignTop);
+ vLayout->addWidget(logAxisButton, 0, Qt::AlignTop);
+ vLayout->addWidget(testItemAndRowChangesButton, 1, Qt::AlignTop);
vLayout2->addWidget(staticCheckBox, 0, Qt::AlignTop);
vLayout2->addWidget(rotationCheckBox, 0, Qt::AlignTop);
@@ -372,7 +378,6 @@ int main(int argc, char **argv)
vLayout2->addWidget(logBaseEdit, 0, Qt::AlignTop);
vLayout2->addWidget(new QLabel(QStringLiteral("Value axis segments")), 0, Qt::AlignTop);
vLayout2->addWidget(valueAxisSegmentsSpin, 0, Qt::AlignTop);
- vLayout->addWidget(logAxisButton, 1, Qt::AlignTop);
// TODO: Add example for setMeshFileName
widget->show();
@@ -446,7 +451,7 @@ int main(int argc, char **argv)
QObject::connect(releaseAxesButton, &QPushButton::clicked, modifier,
&GraphModifier::releaseAxes);
QObject::connect(releaseProxiesButton, &QPushButton::clicked, modifier,
- &GraphModifier::releaseProxies);
+ &GraphModifier::releaseSeries);
QObject::connect(flipViewsButton, &QPushButton::clicked, modifier,
&GraphModifier::flipViews);
@@ -460,6 +465,8 @@ int main(int argc, char **argv)
&GraphModifier::toggleRotation);
QObject::connect(logAxisButton, &QPushButton::clicked, modifier,
&GraphModifier::useLogAxis);
+ QObject::connect(testItemAndRowChangesButton, &QPushButton::clicked, modifier,
+ &GraphModifier::testItemAndRowChanges);
QObject::connect(colorDialog, &QColorDialog::currentColorChanged, modifier,
&GraphModifier::changeBaseColor);
QObject::connect(gradientBtoYPB, &QPushButton::clicked, modifier,
diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp
index a4eb3a27..0f3aa985 100644
--- a/tests/surfacetest/graphmodifier.cpp
+++ b/tests/surfacetest/graphmodifier.cpp
@@ -143,7 +143,7 @@ void GraphModifier::fillSeries()
for (int i = 0; i < m_zCount; i++) {
QSurfaceDataRow *newRow[4];
float zAdjust = 0.0f;
- if (i == 3)
+ if (i == 2)
zAdjust = 0.7f;
for (int s = 0; s < 4; s++) {
@@ -151,7 +151,7 @@ void GraphModifier::fillSeries()
float z = float(i) - m_limitZ + 0.5f + m_multiSampleOffsetZ[s] + zAdjust;
for (int j = 0; j < m_xCount; j++) {
float xAdjust = 0.0f;
- if (j == 3)
+ if (j == 4)
xAdjust = 0.7f;
float x = float(j) - m_limitX + 0.5f + m_multiSampleOffsetX[s] + xAdjust;
float angle = (z * x) / full * 1.57f;