diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-17 15:47:59 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-04 07:10:20 +0100 |
commit | 53efe4ea5a26e67b5a37a7a79744872af1ec34bb (patch) | |
tree | d513b42dfabcb87cbb40e9f9a3397a2555ecfda2 /tests/auto/core | |
parent | 703f7964f88df116d0dd3fdd0a8005b9abef8737 (diff) |
Remove use of node/components added/removed messages
Introduce mechanism to notify backend nodes of changes in relationship
between nodes. If a component is added or removed from an entity,
or if a node is added or removed from a property of another node, then
just rely on the node being marked as dirty when syncing takes place.
For nodes that do not support syncing, messages are delivered as before
but allocated on the stack rather than the heap.
Change-Id: I06affac77e42a9998d9c7f44e231c7724c52b320
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'tests/auto/core')
-rw-r--r-- | tests/auto/core/common/testpostmanarbiter.cpp | 7 | ||||
-rw-r--r-- | tests/auto/core/common/testpostmanarbiter.h | 2 | ||||
-rw-r--r-- | tests/auto/core/nodes/tst_nodes.cpp | 142 |
3 files changed, 51 insertions, 100 deletions
diff --git a/tests/auto/core/common/testpostmanarbiter.cpp b/tests/auto/core/common/testpostmanarbiter.cpp index 3fd8c80d1..5869cbad3 100644 --- a/tests/auto/core/common/testpostmanarbiter.cpp +++ b/tests/auto/core/common/testpostmanarbiter.cpp @@ -94,6 +94,13 @@ void TestArbiter::addDirtyFrontEndNode(Qt3DCore::QNode *node) dirtyNodes << node; } +void TestArbiter::addDirtyFrontEndNode(Qt3DCore::QNode *node, Qt3DCore::QNode *subNode, const char *property, Qt3DCore::ChangeFlag change) +{ + if (!dirtyNodes.contains(node)) + dirtyNodes << node; + dirtySubNodes.push_back({node, subNode, change, property}); +} + void TestArbiter::removeDirtyFrontEndNode(Qt3DCore::QNode *node) { dirtyNodes.removeOne(node); diff --git a/tests/auto/core/common/testpostmanarbiter.h b/tests/auto/core/common/testpostmanarbiter.h index e79283763..cecc24f93 100644 --- a/tests/auto/core/common/testpostmanarbiter.h +++ b/tests/auto/core/common/testpostmanarbiter.h @@ -66,9 +66,11 @@ public: QVector<Qt3DCore::QSceneChangePtr> events; QVector<Qt3DCore::QNode *> dirtyNodes; + QVector<Qt3DCore::NodeRelationshipChange> dirtySubNodes; void setArbiterOnNode(Qt3DCore::QNode *node); void addDirtyFrontEndNode(Qt3DCore::QNode *node) final; + void addDirtyFrontEndNode(Qt3DCore::QNode *node, Qt3DCore::QNode *subNode, const char *property, Qt3DCore::ChangeFlag change) final; void removeDirtyFrontEndNode(Qt3DCore::QNode *node) final; private: diff --git a/tests/auto/core/nodes/tst_nodes.cpp b/tests/auto/core/nodes/tst_nodes.cpp index 3da3e97e0..3b93e7715 100644 --- a/tests/auto/core/nodes/tst_nodes.cpp +++ b/tests/auto/core/nodes/tst_nodes.cpp @@ -179,11 +179,18 @@ public: dirtyNodes << node; } + void addDirtyFrontEndNode(Qt3DCore::QNode *node, Qt3DCore::QNode *subNode, const char *property, Qt3DCore::ChangeFlag change) final { + if (!dirtyNodes.contains(node)) + dirtyNodes << node; + dirtySubNodes.push_back({node, subNode, change, property}); + } + void removeDirtyFrontEndNode(Qt3DCore::QNode *node) final { dirtyNodes.removeOne(node); - }; + } QVector<Qt3DCore::QNode *> dirtyNodes; + QVector<Qt3DCore::NodeRelationshipChange> dirtySubNodes; QList<ChangeRecord> events; QScopedPointer<SimplePostman> m_postman; }; @@ -1594,7 +1601,8 @@ void tst_Nodes::checkSceneIsSetOnConstructionWithParent() } // THEN - QCOMPARE(spy.events.size(), 10); // 5 QComponentAddedChange(entity, cmp) and 5 QComponentAddedChange(cmp, entity) + QCOMPARE(spy.events.size(), 0); + QCOMPARE(spy.dirtySubNodes.size(), 5); // 5 entities changed } void tst_Nodes::appendingParentlessComponentToEntityWithoutScene() @@ -1623,33 +1631,21 @@ void tst_Nodes::appendingParentlessComponentToEntityWithoutScene() QVERIFY(entity->components().count() == 1); QVERIFY(entity->components().first() == comp); QVERIFY(comp->parentNode() == entity.data()); - QCOMPARE(entitySpy.events.size(), 1); - QVERIFY(entitySpy.events.first().wasLocked()); - QCOMPARE(componentSpy.events.size(), 1); + QCOMPARE(entitySpy.events.size(), 0); + QCOMPARE(entitySpy.dirtyNodes.size(), 1); + QCOMPARE(entitySpy.dirtySubNodes.size(), 1); + + const auto event = entitySpy.dirtySubNodes.first(); + QCOMPARE(event.change, Qt3DCore::ComponentAdded); + QCOMPARE(event.node, entity.data()); + QCOMPARE(event.subNode, comp); + QCOMPARE(event.property, nullptr); // Note: since QEntity has no scene in this test case, we only have the // ComponentAdded event In theory we should also get the NodeCreated event // when setting the parent but that doesn't happen since no scene is // actually set on the entity and that QNodePrivate::_q_addChild will // return early in such a case. - - // Check that we received ComponentAdded - { - const auto event = entitySpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>(); - QCOMPARE(event->type(), Qt3DCore::ComponentAdded); - QCOMPARE(event->subjectId(), entity->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); - } - { - const auto event = componentSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>(); - QCOMPARE(event->type(), Qt3DCore::ComponentAdded); - QCOMPARE(event->subjectId(), comp->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); - } } } @@ -1687,10 +1683,8 @@ void tst_Nodes::appendingParentlessComponentToNonRootEntity() QVERIFY(entity->components().first() == comp); QVERIFY(comp->parentNode() == entity.data()); - QCOMPARE(eventSpy.events.size(), 3); + QCOMPARE(eventSpy.events.size(), 1); // - entity added as child to root - // - component added for entity - // - component added for compontent QVERIFY(eventSpy.events.first().wasLocked()); QVERIFY(Qt3DCore::QNodePrivate::get(entity.data())->m_hasBackendNode); @@ -1704,24 +1698,6 @@ void tst_Nodes::appendingParentlessComponentToNonRootEntity() QCOMPARE(event->propertyName(), QByteArrayLiteral("children")); QCOMPARE(event->addedNodeId(), entity->id()); } - { - const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>(); - QVERIFY(!event.isNull()); - QCOMPARE(event->type(), Qt3DCore::ComponentAdded); - QCOMPARE(event->subjectId(), entity->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); - } - { - const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>(); - QVERIFY(!event.isNull()); - QCOMPARE(event->type(), Qt3DCore::ComponentAdded); - QCOMPARE(event->subjectId(), comp->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); - } } } @@ -1755,10 +1731,8 @@ void tst_Nodes::appendingParentlessComponentToEntityWithScene() QVERIFY(entity->components().first() == comp); QVERIFY(comp->parentNode() == entity.data()); - QCOMPARE(eventSpy.events.size(), 3); + QCOMPARE(eventSpy.events.size(), 1); // - child added - // - component added for entity - // - component added for compontent QVERIFY(eventSpy.events.first().wasLocked()); { @@ -1769,24 +1743,6 @@ void tst_Nodes::appendingParentlessComponentToEntityWithScene() QCOMPARE(event->propertyName(), QByteArrayLiteral("children")); QCOMPARE(event->addedNodeId(), comp->id()); } - { - const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>(); - QVERIFY(!event.isNull()); - QCOMPARE(event->type(), Qt3DCore::ComponentAdded); - QCOMPARE(event->subjectId(), entity->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); - } - { - const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>(); - QVERIFY(!event.isNull()); - QCOMPARE(event->type(), Qt3DCore::ComponentAdded); - QCOMPARE(event->subjectId(), comp->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); - } } } @@ -1816,24 +1772,15 @@ void tst_Nodes::appendingComponentToEntity() QVERIFY(entity->components().count() == 1); QVERIFY(entity->components().first() == comp); QVERIFY(comp->parentNode() == entity.data()); - QCOMPARE(entitySpy.events.size(), 1); - QVERIFY(entitySpy.events.first().wasLocked()); - { - const auto event = entitySpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>(); - QCOMPARE(event->type(), Qt3DCore::ComponentAdded); - QCOMPARE(event->subjectId(), entity->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); - } - { - const auto event = componentSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>(); - QCOMPARE(event->type(), Qt3DCore::ComponentAdded); - QCOMPARE(event->subjectId(), comp->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); - } + QCOMPARE(entitySpy.events.size(), 0); + QCOMPARE(entitySpy.dirtyNodes.size(), 1); + QCOMPARE(entitySpy.dirtySubNodes.size(), 1); + QCOMPARE(entitySpy.dirtyNodes.first(), entity.data()); + const auto event = entitySpy.dirtySubNodes.takeFirst(); + QCOMPARE(event.node, entity.data()); + QCOMPARE(event.subNode, comp); + QCOMPARE(event.change, Qt3DCore::ComponentAdded); + QCOMPARE(event.property, nullptr); } } @@ -1858,6 +1805,8 @@ void tst_Nodes::removingComponentFromEntity() // WHEN entitySpy.events.clear(); + entitySpy.dirtyNodes.clear(); + entitySpy.dirtySubNodes.clear(); componentSpy.events.clear(); entity->removeComponent(comp); @@ -1865,24 +1814,17 @@ void tst_Nodes::removingComponentFromEntity() QVERIFY(entity->components().count() == 0); QVERIFY(comp->parent() == entity.data()); QVERIFY(entity->children().count() == 1); - QCOMPARE(entitySpy.events.size(), 1); - QVERIFY(entitySpy.events.first().wasLocked()); - QCOMPARE(componentSpy.events.size(), 1); - { - const auto event = entitySpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentRemovedChange>(); - QCOMPARE(event->type(), Qt3DCore::ComponentRemoved); - QCOMPARE(event->subjectId(), entity->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); - } + QCOMPARE(entitySpy.events.size(), 0); + QCOMPARE(entitySpy.dirtyNodes.size(), 1); + QCOMPARE(entitySpy.dirtySubNodes.size(), 1); + QCOMPARE(componentSpy.events.size(), 0); { - const auto event = componentSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentRemovedChange>(); - QCOMPARE(event->type(), Qt3DCore::ComponentRemoved); - QCOMPARE(event->subjectId(), comp->id()); - QCOMPARE(event->entityId(), entity->id()); - QCOMPARE(event->componentId(), comp->id()); - QCOMPARE(event->componentMetaObject(), comp->metaObject()); + const auto event = entitySpy.dirtySubNodes.takeFirst(); + qDebug() << event.change; + QCOMPARE(event.change, Qt3DCore::ComponentRemoved); + QCOMPARE(event.node, entity.data()); + QCOMPARE(event.subNode, comp); + QCOMPARE(event.property, nullptr); } } } |