summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-06-04 14:20:44 +0200
committerPaul Lemire <paul.lemire@kdab.com>2020-06-18 13:29:16 +0200
commit5f83aa911364925d93c552c4bbea885a4e2807ee (patch)
tree7f31420c9c270bbc890bfbb987b2aa34719e1ffa /tests/auto
parenta3453480c4247028c38f75c0775d9ff4f21ce1bb (diff)
Fix QBuffer::updateData being called several times in a row
QBuffer::updateData would send a single update at the time and would overwrite the latest update if it was called again before synching with the backend took place. This patches fixes by storing a list of pending updates instead. Change-Id: I1fc501ad921c953ec88117fcc49c0cfcde6ca8aa Task-number: QTBUG-81921 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/render/buffer/tst_buffer.cpp34
-rw-r--r--tests/auto/render/qbuffer/tst_qbuffer.cpp47
2 files changed, 81 insertions, 0 deletions
diff --git a/tests/auto/render/buffer/tst_buffer.cpp b/tests/auto/render/buffer/tst_buffer.cpp
index 5c2ae296d..2401c2789 100644
--- a/tests/auto/render/buffer/tst_buffer.cpp
+++ b/tests/auto/render/buffer/tst_buffer.cpp
@@ -365,6 +365,40 @@ private Q_SLOTS:
// THEN
QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::BuffersDirty);
}
+
+ void checkHandlesMultipleUpdates()
+ {
+ // GIVEN
+ Qt3DRender::Render::Buffer renderBuffer;
+ Qt3DRender::QBuffer buffer;
+ Qt3DRender::Render::BufferManager bufferManager;
+ TestRenderer renderer;
+
+ const QByteArray initData("000000");
+ buffer.setData(initData);
+
+ renderBuffer.setRenderer(&renderer);
+ renderBuffer.setManager(&bufferManager);
+
+ simulateInitializationSync(&buffer, &renderBuffer);
+
+ // THEN
+ QCOMPARE(renderBuffer.data(), initData);
+ renderBuffer.pendingBufferUpdates().clear();
+
+ // WHEN
+ buffer.updateData(0, QByteArray("012"));
+ buffer.updateData(3, QByteArray("345"));
+ renderBuffer.syncFromFrontEnd(&buffer, false);
+
+ // THEN
+ QCOMPARE(renderBuffer.pendingBufferUpdates().size(), 2);
+ QCOMPARE(renderBuffer.pendingBufferUpdates().first().offset, 0);
+ QCOMPARE(renderBuffer.pendingBufferUpdates().first().data, QByteArray("012"));
+ QCOMPARE(renderBuffer.pendingBufferUpdates().last().offset, 3);
+ QCOMPARE(renderBuffer.pendingBufferUpdates().last().data, QByteArray("345"));
+ QCOMPARE(renderBuffer.data(), QByteArray("012345"));
+ }
};
diff --git a/tests/auto/render/qbuffer/tst_qbuffer.cpp b/tests/auto/render/qbuffer/tst_qbuffer.cpp
index fd96bf1c2..084ad0347 100644
--- a/tests/auto/render/qbuffer/tst_qbuffer.cpp
+++ b/tests/auto/render/qbuffer/tst_qbuffer.cpp
@@ -181,6 +181,53 @@ private Q_SLOTS:
QCOMPARE(arbiter.dirtyNodes.size(), 1);
QCOMPARE(arbiter.dirtyNodes.front(), buffer.data());
}
+
+ void checkAccumulatesBufferUpdates()
+ {
+ // GIVEN
+ TestArbiter arbiter;
+ QScopedPointer<Qt3DRender::QBuffer> buffer(new Qt3DRender::QBuffer);
+ arbiter.setArbiterOnNode(buffer.data());
+
+ QByteArray initData(6, '\0');
+ buffer->setData(initData);
+
+ // THEN
+ QCOMPARE(buffer->data(), initData);
+ QCOMPARE(buffer->property(Qt3DRender::QBufferPrivate::UpdateDataPropertyName), QVariant());
+
+ // WHEN
+ const QByteArray uData("012");
+ buffer->updateData(0, uData);
+
+ // THEN
+ {
+ const QVariant v = buffer->property(Qt3DRender::QBufferPrivate::UpdateDataPropertyName);
+ QVERIFY(v.isValid());
+ const QVariantList l = v.toList();
+ QCOMPARE(l.size(), 1);
+ const Qt3DRender::QBufferUpdate update = l.first().value<Qt3DRender::QBufferUpdate>();
+ QCOMPARE(update.offset, 0);
+ QCOMPARE(update.data, uData);
+ QCOMPARE(buffer->data().mid(0, 3), uData);
+ }
+
+ // WHEN
+ const QByteArray uData2("345");
+ buffer->updateData(3, uData2);
+
+ // THEN
+ {
+ const QVariant v = buffer->property(Qt3DRender::QBufferPrivate::UpdateDataPropertyName);
+ QVERIFY(v.isValid());
+ const QVariantList l = v.toList();
+ QCOMPARE(l.size(), 2);
+ const Qt3DRender::QBufferUpdate update = l.last().value<Qt3DRender::QBufferUpdate>();
+ QCOMPARE(update.offset, 3);
+ QCOMPARE(update.data, uData2);
+ QCOMPARE(buffer->data(), QByteArray("012345"));
+ }
+ }
};
QTEST_MAIN(tst_QBuffer)