diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2020-06-04 14:20:44 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2020-06-18 13:29:16 +0200 |
commit | 5f83aa911364925d93c552c4bbea885a4e2807ee (patch) | |
tree | 7f31420c9c270bbc890bfbb987b2aa34719e1ffa /tests/auto | |
parent | a3453480c4247028c38f75c0775d9ff4f21ce1bb (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.cpp | 34 | ||||
-rw-r--r-- | tests/auto/render/qbuffer/tst_qbuffer.cpp | 47 |
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) |