summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2018-06-20 12:23:37 +0200
committerPaul Lemire <paul.lemire@kdab.com>2018-06-25 04:39:23 +0000
commitf6a0587ef0a90f2e8333ea012aafdd956bca91f6 (patch)
treee3d28bf525a7a33c3ae3437473ae140358b01612 /tests
parentbe0cd9c0b19f1f1b72d2bc165e948d162b998f88 (diff)
Fix race condition when executing multiple filterlayerjobs at once
The updating of referenced layer ids for each Entity should only be performed once and not by multiple jobs. Therefore, this update was moved into a dedicated job which is now a dependency of the filterentityjob instances. Change-Id: Ie8ecc49a7c6c7d41a1f1f0d18619b5e142b68204 Task-number: QTBUG-68942 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/render/layerfiltering/tst_layerfiltering.cpp6
-rw-r--r--tests/auto/render/renderer/tst_renderer.cpp4
-rw-r--r--tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp3
3 files changed, 10 insertions, 3 deletions
diff --git a/tests/auto/render/layerfiltering/tst_layerfiltering.cpp b/tests/auto/render/layerfiltering/tst_layerfiltering.cpp
index c2651c477..eeffc69b2 100644
--- a/tests/auto/render/layerfiltering/tst_layerfiltering.cpp
+++ b/tests/auto/render/layerfiltering/tst_layerfiltering.cpp
@@ -46,9 +46,11 @@ private Q_SLOTS:
{
// GIVEN
Qt3DRender::Render::FilterLayerEntityJob filterJob;
+ Qt3DRender::Render::UpdateEntityLayersJob updateEntityLayerJob;
Qt3DRender::QLayer frontendLayer;
// THEN
+ QVERIFY(updateEntityLayerJob.manager() == nullptr);
QCOMPARE(filterJob.hasLayerFilter(), false);
QCOMPARE(filterJob.filteredEntities().size(), 0);
QCOMPARE(filterJob.layerFilters().size(), 0);
@@ -635,6 +637,10 @@ private Q_SLOTS:
updateTreeEnabledJob.run();
// WHEN
+ Qt3DRender::Render::UpdateEntityLayersJob updateLayerEntityJob;
+ updateLayerEntityJob.setManager(aspect->nodeManagers());
+ updateLayerEntityJob.run();
+
Qt3DRender::Render::FilterLayerEntityJob filterJob;
filterJob.setLayerFilters(layerFilterIds);
filterJob.setManager(aspect->nodeManagers());
diff --git a/tests/auto/render/renderer/tst_renderer.cpp b/tests/auto/render/renderer/tst_renderer.cpp
index d5961e9fd..9f6007181 100644
--- a/tests/auto/render/renderer/tst_renderer.cpp
+++ b/tests/auto/render/renderer/tst_renderer.cpp
@@ -212,8 +212,8 @@ private Q_SLOTS:
1 + // VAOGatherer
1 + // BufferGathererJob
1 + // TexturesGathererJob
- 1 // SyncTextureLoadingJob
- );
+ 1 + // SyncTextureLoadingJob
+ 1); // UpdateEntityLayersJob
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
diff --git a/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp b/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp
index cb51012c1..81bca0158 100644
--- a/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp
+++ b/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp
@@ -352,7 +352,8 @@ private Q_SLOTS:
QCOMPARE(renderViewBuilder.syncRenderViewInitializationJob()->dependencies().first().data(), renderViewBuilder.renderViewJob().data());
// Step 3
- QCOMPARE(renderViewBuilder.filterEntityByLayerJob()->dependencies().size(), 2);
+ QCOMPARE(renderViewBuilder.filterEntityByLayerJob()->dependencies().size(), 3);
+ QVERIFY(renderViewBuilder.filterEntityByLayerJob()->dependencies().contains(testAspect.renderer()->updateEntityLayersJob()));
QVERIFY(renderViewBuilder.filterEntityByLayerJob()->dependencies().contains(renderViewBuilder.syncRenderViewInitializationJob()));
QVERIFY(renderViewBuilder.filterEntityByLayerJob()->dependencies().contains(testAspect.renderer()->updateTreeEnabledJob()));