diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-05-16 18:47:54 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-05-20 18:18:12 +0000 |
commit | 701764ed4835d6ca9fd7c06f0ae824bea9bfde51 (patch) | |
tree | 6e4d551ebad7c866abcaabcb4959f88545108e49 /tests/auto/render | |
parent | 244a650a7f577db45ef4a339fe8858577883b04f (diff) |
Avoid crash in QML app shutdown and actually send events in C++ app
The logic was such that in a C++ application the QNode::setParent()
function would bail out early in a C++ application when called from the
destructor of its parent object. This is because by the time the
child is being deleted the parent is in QObjectPrivate::deleteChildren
and therefore the QNode part of the object has already been destroyed.
This led to the cast in the parentNode() == parent to fail, thereby
exiting the functio early and never getting into
QNodePrivate::_q_setParentHelper().
In the case of a QML application, the parent has a dynamic metaobject
set by the QML engine. This resulted in the cast in QNode::setParent()
succeeding and we called into _q_setParentHelper(). The logic in here
resulted in a crash when called from a destructor because the child
had already been removed from its parent's list of children. Thus when
we called QObjectPrivate::setParentHelper(), this function ended up with
an index of -1 for the child in its child list (i.e. not found) and it
then tried to index into the children list with this index and we
then crashed.
The solution in this change is to not do the full logic in
QNode::setParent() and _q_setParentHelper(). Rather, we simply remove
the subtree at this node from the scene and we send node destruction
changes to the backend.
With this we avoid the crash of QML application shutdowns and we also
make sure to correctly send the node destruction changes even in the
case of a C++ Qt 3D application.
The backend does not yet get an opportunity to process these final
changes. This will be addressed in a follow up commit.
As a result of these changes many unit tests began crashing. This is
because the QNode dtor is now actually doing some work, rather than
bailing out of that work early when the parent is no longer a QNode.
This work involves mutating the QScene object which in the unit
tests did not live longer than the QNode's to which it was
associated with.
The unit tests have been adjusted to ensure that the arbiter and
scene objects remain alive longer than the QNodes they are being
used to test.
Task-number: QTBUG-42353
Change-Id: I197870f48fca30656bd85c4c51346d93403fba08
Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com>
Diffstat (limited to 'tests/auto/render')
20 files changed, 81 insertions, 64 deletions
diff --git a/tests/auto/render/commons/testpostmanarbiter.cpp b/tests/auto/render/commons/testpostmanarbiter.cpp index 6371471c9..6c3ca025b 100644 --- a/tests/auto/render/commons/testpostmanarbiter.cpp +++ b/tests/auto/render/commons/testpostmanarbiter.cpp @@ -46,18 +46,13 @@ void TestPostman::notifyBackend(const Qt3DCore::QSceneChangePtr &e) m_arbiter->sceneChangeEventWithLock(e); } -TestArbiter::TestArbiter(Qt3DCore::QNode *node) +TestArbiter::TestArbiter() : m_postman(new TestPostman(this)) - , m_node(node) { - if (m_node) - assignArbiter(m_node); } TestArbiter::~TestArbiter() { - if (m_node) - Qt3DCore::QNodePrivate::get(m_node)->setArbiter(nullptr); } void TestArbiter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) @@ -80,11 +75,11 @@ Qt3DCore::QAbstractPostman *TestArbiter::postman() const return m_postman; } -void TestArbiter::assignArbiter(Qt3DCore::QNode *node) +void TestArbiter::setArbiterOnNode(Qt3DCore::QNode *node) { Qt3DCore::QNodePrivate::get(node)->setArbiter(this); Q_FOREACH (Qt3DCore::QNode *n, node->childNodes()) - assignArbiter(n); + setArbiterOnNode(n); } QT_END_NAMESPACE diff --git a/tests/auto/render/commons/testpostmanarbiter.h b/tests/auto/render/commons/testpostmanarbiter.h index 2861801e5..cb2b87afd 100644 --- a/tests/auto/render/commons/testpostmanarbiter.h +++ b/tests/auto/render/commons/testpostmanarbiter.h @@ -53,8 +53,7 @@ private: class TestArbiter : public Qt3DCore::QAbstractArbiter { public: - TestArbiter(Qt3DCore::QNode *node = nullptr); - + TestArbiter(); ~TestArbiter(); void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_FINAL; @@ -67,11 +66,10 @@ public: QVector<Qt3DCore::QSceneChangePtr> events; + void setArbiterOnNode(Qt3DCore::QNode *node); + private: TestPostman *m_postman; - Qt3DCore::QNode *m_node; - - void assignArbiter(Qt3DCore::QNode *node); }; QT_END_NAMESPACE diff --git a/tests/auto/render/qabstractlight/tst_qabstractlight.cpp b/tests/auto/render/qabstractlight/tst_qabstractlight.cpp index c85fcde6b..9fc6bfa76 100644 --- a/tests/auto/render/qabstractlight/tst_qabstractlight.cpp +++ b/tests/auto/render/qabstractlight/tst_qabstractlight.cpp @@ -143,41 +143,43 @@ private Q_SLOTS: void checkLightPropertyUpdates() { + TestArbiter arbiter; QScopedPointer<Qt3DRender::QAbstractLight> light(new DummyLight); - TestArbiter lightArbiter(light.data()); + arbiter.setArbiterOnNode(light.data()); light->setColor(Qt::red); light->setIntensity(0.5f); QCoreApplication::processEvents(); - QCOMPARE(lightArbiter.events.size(), 2 * 2); // Due to contained shader data + QCOMPARE(arbiter.events.size(), 2 * 2); // Due to contained shader data for (int i = 0; i < 2; i++) - lightArbiter.events.removeAt(i); - Qt3DCore::QPropertyUpdatedChangePtr change = lightArbiter.events[0].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + arbiter.events.removeAt(i); + Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events[0].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "color"); QCOMPARE(change->subjectId(), light->id()); QCOMPARE(change->value().value<QColor>(), QColor(Qt::red)); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - change = lightArbiter.events[1].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + change = arbiter.events[1].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "intensity"); QCOMPARE(change->subjectId(), light->id()); QCOMPARE(change->value().value<float>(), 0.5f); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - lightArbiter.events.clear(); + arbiter.events.clear(); light->setColor(Qt::red); QCoreApplication::processEvents(); - QCOMPARE(lightArbiter.events.size(), 0); + QCOMPARE(arbiter.events.size(), 0); - lightArbiter.events.clear(); + arbiter.events.clear(); } void checkPointLightPropertyUpdates() { + TestArbiter arbiter; QScopedPointer<Qt3DRender::QPointLight> pointLight(new Qt3DRender::QPointLight); - TestArbiter pointLightArbiter(pointLight.data()); + arbiter.setArbiterOnNode(pointLight.data()); pointLight->setColor(Qt::green); pointLight->setIntensity(0.5f); @@ -186,69 +188,71 @@ private Q_SLOTS: pointLight->setQuadraticAttenuation(1.0f); QCoreApplication::processEvents(); - QCOMPARE(pointLightArbiter.events.size(), 4 * 2); // Due to contained shader data + QCOMPARE(arbiter.events.size(), 4 * 2); // Due to contained shader data for (int i = 0; i < 4; i++) - pointLightArbiter.events.removeAt(i); - Qt3DCore::QPropertyUpdatedChangePtr change = pointLightArbiter.events[0].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + arbiter.events.removeAt(i); + Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events[0].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "color"); QCOMPARE(change->subjectId(), pointLight->id()); QCOMPARE(change->value().value<QColor>(), QColor(Qt::green)); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - change = pointLightArbiter.events[1].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + change = arbiter.events[1].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "intensity"); QCOMPARE(change->subjectId(), pointLight->id()); QCOMPARE(change->value().value<float>(), 0.5f); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - change = pointLightArbiter.events[2].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + change = arbiter.events[2].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "constantAttenuation"); QCOMPARE(change->subjectId(), pointLight->id()); QCOMPARE(change->value().value<float>(), 0.5f); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - change = pointLightArbiter.events[3].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + change = arbiter.events[3].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "quadraticAttenuation"); QCOMPARE(change->subjectId(), pointLight->id()); QCOMPARE(change->value().value<float>(), 1.0f); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - pointLightArbiter.events.clear(); + arbiter.events.clear(); } void checkDirectionalLightPropertyUpdates() { + TestArbiter arbiter; QScopedPointer<Qt3DRender::QDirectionalLight> dirLight(new Qt3DRender::QDirectionalLight); - TestArbiter dirLightArbiter(dirLight.data()); + arbiter.setArbiterOnNode(dirLight.data()); dirLight->setColor(Qt::blue); dirLight->setIntensity(0.5f); dirLight->setWorldDirection(QVector3D(0.5f, 0.0f, -1.0f)); QCoreApplication::processEvents(); - QCOMPARE(dirLightArbiter.events.size(), 3 * 2); // Due to contained shader data + QCOMPARE(arbiter.events.size(), 3 * 2); // Due to contained shader data for (int i = 0; i < 3; i++) - dirLightArbiter.events.removeAt(i); - Qt3DCore::QPropertyUpdatedChangePtr change = dirLightArbiter.events[0].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + arbiter.events.removeAt(i); + Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events[0].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "color"); QCOMPARE(change->subjectId(), dirLight->id()); QCOMPARE(change->value().value<QColor>(), QColor(Qt::blue)); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - change = dirLightArbiter.events[1].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + change = arbiter.events[1].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "intensity"); QCOMPARE(change->subjectId(), dirLight->id()); QCOMPARE(change->value().value<float>(), 0.5f); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - change = dirLightArbiter.events[2].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + change = arbiter.events[2].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "worldDirection"); QCOMPARE(change->subjectId(), dirLight->id()); QCOMPARE(change->value().value<QVector3D>(), QVector3D(0.5f, 0.0f, -1.0f)); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - dirLightArbiter.events.clear(); + arbiter.events.clear(); } void checkSpotLightPropertyUpdates() { + TestArbiter arbiter; QScopedPointer<Qt3DRender::QSpotLight> spotLight(new Qt3DRender::QSpotLight); - TestArbiter spotLightArbiter(spotLight.data()); + arbiter.setArbiterOnNode(spotLight.data()); spotLight->setColor(Qt::lightGray); spotLight->setIntensity(0.5f); @@ -256,31 +260,31 @@ private Q_SLOTS: spotLight->setCutOffAngle(0.75f); QCoreApplication::processEvents(); - QCOMPARE(spotLightArbiter.events.size(), 4 * 2); // Due to contained shader data + QCOMPARE(arbiter.events.size(), 4 * 2); // Due to contained shader data for (int i = 0; i < 4; i++) - spotLightArbiter.events.removeAt(i); - Qt3DCore::QPropertyUpdatedChangePtr change = spotLightArbiter.events[0].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + arbiter.events.removeAt(i); + Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events[0].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "color"); QCOMPARE(change->subjectId(), spotLight->id()); QCOMPARE(change->value().value<QColor>(), QColor(Qt::lightGray)); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - change = spotLightArbiter.events[1].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + change = arbiter.events[1].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "intensity"); QCOMPARE(change->subjectId(), spotLight->id()); QCOMPARE(change->value().value<float>(), 0.5f); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - change = spotLightArbiter.events[2].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + change = arbiter.events[2].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "localDirection"); QCOMPARE(change->subjectId(), spotLight->id()); QCOMPARE(change->value().value<QVector3D>(), QVector3D(0.5f, 0.0f, -1.0f)); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - change = spotLightArbiter.events[3].staticCast<Qt3DCore::QPropertyUpdatedChange>(); + change = arbiter.events[3].staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "cutOffAngle"); QCOMPARE(change->subjectId(), spotLight->id()); QCOMPARE(change->value().value<float>(), 0.75f); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - spotLightArbiter.events.clear(); + arbiter.events.clear(); } }; diff --git a/tests/auto/render/qattribute/tst_qattribute.cpp b/tests/auto/render/qattribute/tst_qattribute.cpp index 9632f4fcb..48bdf5c33 100644 --- a/tests/auto/render/qattribute/tst_qattribute.cpp +++ b/tests/auto/render/qattribute/tst_qattribute.cpp @@ -115,8 +115,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QAttribute> attribute(new Qt3DRender::QAttribute()); - TestArbiter arbiter(attribute.data()); + arbiter.setArbiterOnNode(attribute.data()); // WHEN attribute->setDataType(Qt3DRender::QAttribute::Double); diff --git a/tests/auto/render/qbuffer/tst_qbuffer.cpp b/tests/auto/render/qbuffer/tst_qbuffer.cpp index 566f16f13..995593971 100644 --- a/tests/auto/render/qbuffer/tst_qbuffer.cpp +++ b/tests/auto/render/qbuffer/tst_qbuffer.cpp @@ -125,8 +125,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QBuffer> buffer(new Qt3DRender::QBuffer(Qt3DRender::QBuffer::VertexBuffer)); - TestArbiter arbiter(buffer.data()); + arbiter.setArbiterOnNode(buffer.data()); // WHEN buffer->setType(Qt3DRender::QBuffer::IndexBuffer); diff --git a/tests/auto/render/qcameraselector/tst_qcameraselector.cpp b/tests/auto/render/qcameraselector/tst_qcameraselector.cpp index ca6895f90..1cb3eaabf 100644 --- a/tests/auto/render/qcameraselector/tst_qcameraselector.cpp +++ b/tests/auto/render/qcameraselector/tst_qcameraselector.cpp @@ -85,8 +85,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QCameraSelector> cameraSelector(new Qt3DRender::QCameraSelector()); - TestArbiter arbiter(cameraSelector.data()); + arbiter.setArbiterOnNode(cameraSelector.data()); // WHEN Qt3DCore::QEntity *camera = new Qt3DCore::QEntity(); diff --git a/tests/auto/render/qclearbuffers/tst_qclearbuffers.cpp b/tests/auto/render/qclearbuffers/tst_qclearbuffers.cpp index e190d3c96..ce1493e10 100644 --- a/tests/auto/render/qclearbuffers/tst_qclearbuffers.cpp +++ b/tests/auto/render/qclearbuffers/tst_qclearbuffers.cpp @@ -98,8 +98,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QClearBuffers> clearBuffer(new Qt3DRender::QClearBuffers()); - TestArbiter arbiter(clearBuffer.data()); + arbiter.setArbiterOnNode(clearBuffer.data()); // WHEN clearBuffer->setBuffers(Qt3DRender::QClearBuffers::AllBuffers); diff --git a/tests/auto/render/qframegraphnode/tst_qframegraphnode.cpp b/tests/auto/render/qframegraphnode/tst_qframegraphnode.cpp index 17f7e8546..5a5eb266e 100644 --- a/tests/auto/render/qframegraphnode/tst_qframegraphnode.cpp +++ b/tests/auto/render/qframegraphnode/tst_qframegraphnode.cpp @@ -102,8 +102,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QFrameGraphNode> frameGraphNode(new MyFrameGraphNode()); - TestArbiter arbiter(frameGraphNode.data()); + arbiter.setArbiterOnNode(frameGraphNode.data()); // WHEN frameGraphNode->setEnabled(false); diff --git a/tests/auto/render/qgeometry/tst_qgeometry.cpp b/tests/auto/render/qgeometry/tst_qgeometry.cpp index 8e0974657..d07b410ee 100644 --- a/tests/auto/render/qgeometry/tst_qgeometry.cpp +++ b/tests/auto/render/qgeometry/tst_qgeometry.cpp @@ -108,8 +108,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QGeometry> geometry(new Qt3DRender::QGeometry()); - TestArbiter arbiter(geometry.data()); + arbiter.setArbiterOnNode(geometry.data()); // WHEN Qt3DRender::QAttribute attr; diff --git a/tests/auto/render/qgeometryrenderer/tst_qgeometryrenderer.cpp b/tests/auto/render/qgeometryrenderer/tst_qgeometryrenderer.cpp index 11835be2d..d88b63dd8 100644 --- a/tests/auto/render/qgeometryrenderer/tst_qgeometryrenderer.cpp +++ b/tests/auto/render/qgeometryrenderer/tst_qgeometryrenderer.cpp @@ -150,8 +150,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QGeometryRenderer> geometryRenderer(new Qt3DRender::QGeometryRenderer()); - TestArbiter arbiter(geometryRenderer.data()); + arbiter.setArbiterOnNode(geometryRenderer.data()); // WHEN geometryRenderer->setInstanceCount(256); diff --git a/tests/auto/render/qlayerfilter/tst_qlayerfilter.cpp b/tests/auto/render/qlayerfilter/tst_qlayerfilter.cpp index 60ea33f71..9c14af50e 100644 --- a/tests/auto/render/qlayerfilter/tst_qlayerfilter.cpp +++ b/tests/auto/render/qlayerfilter/tst_qlayerfilter.cpp @@ -112,8 +112,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QLayerFilter> layerFilter(new Qt3DRender::QLayerFilter()); - TestArbiter arbiter(layerFilter.data()); + arbiter.setArbiterOnNode(layerFilter.data()); // WHEN auto layer = new Qt3DRender::QLayer(layersNode.data()); diff --git a/tests/auto/render/qmaterial/tst_qmaterial.cpp b/tests/auto/render/qmaterial/tst_qmaterial.cpp index 437cfa5ad..d658b1b3e 100644 --- a/tests/auto/render/qmaterial/tst_qmaterial.cpp +++ b/tests/auto/render/qmaterial/tst_qmaterial.cpp @@ -246,8 +246,9 @@ private Q_SLOTS: void checkEffectUpdate() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QMaterial> material(new Qt3DRender::QMaterial()); - TestArbiter arbiter(material.data()); + arbiter.setArbiterOnNode(material.data()); // WHEN Qt3DRender::QEffect effect; @@ -264,8 +265,9 @@ private Q_SLOTS: arbiter.events.clear(); // GIVEN + TestArbiter arbiter2; QScopedPointer<TestMaterial> material2(new TestMaterial()); - TestArbiter arbiter2(material2.data()); + arbiter2.setArbiterOnNode(material2.data()); QCoreApplication::processEvents(); // Clear events trigger by child generation of TestMnterial @@ -287,8 +289,9 @@ private Q_SLOTS: void checkDynamicParametersAddedUpdates() { // GIVEN + TestArbiter arbiter; TestMaterial *material = new TestMaterial(); - TestArbiter arbiter(material); + arbiter.setArbiterOnNode(material); QCoreApplication::processEvents(); // Clear events trigger by child generation of TestMnterial @@ -357,8 +360,9 @@ private Q_SLOTS: void checkShaderProgramUpdates() { // GIVEN + TestArbiter arbiter; TestMaterial *material = new TestMaterial(); - TestArbiter arbiter(material); + arbiter.setArbiterOnNode(material); QCoreApplication::processEvents(); // Clear events trigger by child generation of TestMnterial diff --git a/tests/auto/render/qobjectpicker/tst_qobjectpicker.cpp b/tests/auto/render/qobjectpicker/tst_qobjectpicker.cpp index ff56d3590..4397954ec 100644 --- a/tests/auto/render/qobjectpicker/tst_qobjectpicker.cpp +++ b/tests/auto/render/qobjectpicker/tst_qobjectpicker.cpp @@ -103,8 +103,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QObjectPicker> objectPicker(new Qt3DRender::QObjectPicker()); - TestArbiter arbiter(objectPicker.data()); + arbiter.setArbiterOnNode(objectPicker.data()); // WHEN objectPicker->setHoverEnabled(true); diff --git a/tests/auto/render/qrenderpassfilter/tst_qrenderpassfilter.cpp b/tests/auto/render/qrenderpassfilter/tst_qrenderpassfilter.cpp index 9e6e4fcc1..8e1565bdf 100644 --- a/tests/auto/render/qrenderpassfilter/tst_qrenderpassfilter.cpp +++ b/tests/auto/render/qrenderpassfilter/tst_qrenderpassfilter.cpp @@ -144,8 +144,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QRenderPassFilter> renderPassFilter(new Qt3DRender::QRenderPassFilter()); - TestArbiter arbiter(renderPassFilter.data()); + arbiter.setArbiterOnNode(renderPassFilter.data()); // WHEN Qt3DRender::QParameter *param1 = new Qt3DRender::QParameter(); diff --git a/tests/auto/render/qrenderstateset/tst_qrenderstateset.cpp b/tests/auto/render/qrenderstateset/tst_qrenderstateset.cpp index 073306237..6782ef8f7 100644 --- a/tests/auto/render/qrenderstateset/tst_qrenderstateset.cpp +++ b/tests/auto/render/qrenderstateset/tst_qrenderstateset.cpp @@ -130,8 +130,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QRenderStateSet> stateSet(new Qt3DRender::QRenderStateSet()); - TestArbiter arbiter(stateSet.data()); + arbiter.setArbiterOnNode(stateSet.data()); // WHEN Qt3DRender::QRenderState *state1 = new MyStateSet(); diff --git a/tests/auto/render/qrendertargetselector/tst_qrendertargetselector.cpp b/tests/auto/render/qrendertargetselector/tst_qrendertargetselector.cpp index b4cb479ba..1ed546c13 100644 --- a/tests/auto/render/qrendertargetselector/tst_qrendertargetselector.cpp +++ b/tests/auto/render/qrendertargetselector/tst_qrendertargetselector.cpp @@ -107,8 +107,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QRenderTargetSelector> renderTargetSelector(new Qt3DRender::QRenderTargetSelector()); - TestArbiter arbiter(renderTargetSelector.data()); + arbiter.setArbiterOnNode(renderTargetSelector.data()); // WHEN Qt3DRender::QRenderTarget *target = new Qt3DRender::QRenderTarget(); diff --git a/tests/auto/render/qsortpolicy/tst_qsortpolicy.cpp b/tests/auto/render/qsortpolicy/tst_qsortpolicy.cpp index cd88785f5..020929e09 100644 --- a/tests/auto/render/qsortpolicy/tst_qsortpolicy.cpp +++ b/tests/auto/render/qsortpolicy/tst_qsortpolicy.cpp @@ -103,8 +103,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QSortPolicy> sortPolicy(new Qt3DRender::QSortPolicy()); - TestArbiter arbiter(sortPolicy.data()); + arbiter.setArbiterOnNode(sortPolicy.data()); // WHEN Qt3DRender::QSortPolicy::SortType sortType1 = Qt3DRender::QSortPolicy::BackToFront; diff --git a/tests/auto/render/qtechniquefilter/tst_qtechniquefilter.cpp b/tests/auto/render/qtechniquefilter/tst_qtechniquefilter.cpp index 8438cf033..97fe917ae 100644 --- a/tests/auto/render/qtechniquefilter/tst_qtechniquefilter.cpp +++ b/tests/auto/render/qtechniquefilter/tst_qtechniquefilter.cpp @@ -149,8 +149,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QTechniqueFilter> techniqueFilter(new Qt3DRender::QTechniqueFilter()); - TestArbiter arbiter(techniqueFilter.data()); + arbiter.setArbiterOnNode(techniqueFilter.data()); // WHEN Qt3DRender::QParameter *param1 = new Qt3DRender::QParameter(); diff --git a/tests/auto/render/qviewport/tst_qviewport.cpp b/tests/auto/render/qviewport/tst_qviewport.cpp index 9ea758fcf..87b22e22b 100644 --- a/tests/auto/render/qviewport/tst_qviewport.cpp +++ b/tests/auto/render/qviewport/tst_qviewport.cpp @@ -87,8 +87,9 @@ private Q_SLOTS: void checkPropertyUpdates() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QViewport> viewport(new Qt3DRender::QViewport()); - TestArbiter arbiter(viewport.data()); + arbiter.setArbiterOnNode(viewport.data()); // WHEN viewport->setNormalizedRect(QRectF(0.5f, 0.5f, 1.0f, 1.0f)); diff --git a/tests/auto/render/renderviewutils/tst_renderviewutils.cpp b/tests/auto/render/renderviewutils/tst_renderviewutils.cpp index 0278b52c7..1bda16cba 100644 --- a/tests/auto/render/renderviewutils/tst_renderviewutils.cpp +++ b/tests/auto/render/renderviewutils/tst_renderviewutils.cpp @@ -467,8 +467,9 @@ void tst_RenderViewUtils::topLevelDynamicProperties() void tst_RenderViewUtils::shouldNotifyDynamicPropertyChanges() { // GIVEN + TestArbiter arbiter; QScopedPointer<Qt3DRender::QShaderData> shaderData(new Qt3DRender::QShaderData()); - TestArbiter arbiter(shaderData.data()); + arbiter.setArbiterOnNode(shaderData.data()); // WHEN shaderData->setProperty("scalar", 883.0f); |