diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-10-15 08:16:35 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-10-24 16:02:14 +0200 |
commit | 1194641110288b4e58c92cac17c3289ad7cad49d (patch) | |
tree | 829949faed6dd03c1a60a178bbf30597d20a51f8 /tests | |
parent | 59bcc05abb8606dfc33086870980ffdf4a3937eb (diff) |
ComputeCommand: add unit tests for manual trigger mode
Change-Id: Ia106a235648df7232fbcaf4f61c880a9ab5491ef
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/render/computecommand/tst_computecommand.cpp | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/tests/auto/render/computecommand/tst_computecommand.cpp b/tests/auto/render/computecommand/tst_computecommand.cpp index 4120153e7..2046ecc76 100644 --- a/tests/auto/render/computecommand/tst_computecommand.cpp +++ b/tests/auto/render/computecommand/tst_computecommand.cpp @@ -31,12 +31,37 @@ #include <Qt3DRender/qcomputecommand.h> #include <Qt3DRender/private/qcomputecommand_p.h> #include <Qt3DRender/private/computecommand_p.h> +#include <Qt3DRender/private/renderer_p.h> +#include <Qt3DRender/private/nodemanagers_p.h> +#include <Qt3DRender/private/managers_p.h> #include <Qt3DCore/private/qbackendnode_p.h> +#include <Qt3DCore/private/qaspectmanager_p.h> +#include <Qt3DCore/private/qscene_p.h> #include <Qt3DCore/qpropertyupdatedchange.h> #include "qbackendnodetester.h" #include "testrenderer.h" #include "testpostmanarbiter.h" + +// tst_Renderer is a friend class of Renderer +class tst_Renderer : public Qt3DRender::Render::Renderer +{ +public: + tst_Renderer() + : Qt3DRender::Render::Renderer(Qt3DRender::QRenderAspect::Synchronous) + {} + + ~tst_Renderer() { + shutdown(); + } + + Qt3DRender::Render::SynchronizerPostFramePtr sendDisablesToFrontendJob() const + { + return m_sendDisablesToFrontendJob; + } +}; + + class tst_ComputeCommand : public Qt3DCore::QBackendNodeTester { Q_OBJECT @@ -232,6 +257,99 @@ private Q_SLOTS: QCOMPARE(backendComputeCommand.frameCount(), 0); // Backend stays with enabled == true, frontend will be updated // to be disabled and backend should be disabled on the next sync + + // WHEN + computeCommand.setEnabled(false); + backendComputeCommand.syncFromFrontEnd(&computeCommand, false); + + // THEN + QCOMPARE(backendComputeCommand.isEnabled(), false); + QCOMPARE(backendComputeCommand.frameCount(), 0); + + // WHEN + computeCommand.trigger(1); + backendComputeCommand.syncFromFrontEnd(&computeCommand, false); + + // THEN + QCOMPARE(computeCommand.isEnabled(), true); + QCOMPARE(backendComputeCommand.isEnabled(), true); + QCOMPARE(backendComputeCommand.hasReachedFrameCount(), false); + QCOMPARE(backendComputeCommand.frameCount(), 1); + } + + void checkDisablesFrontend() + { + // GIVEN + Qt3DRender::Render::NodeManagers nodeManager; + tst_Renderer renderer; + TestArbiter arbiter; + + Qt3DCore::QAspectManager manager; + Qt3DCore::QScene scene; + + Qt3DCore::QEntity rootEntity; + Qt3DCore::QNodePrivate::get(&rootEntity)->setScene(&scene); + + Qt3DRender::QComputeCommand computeCommand; + Qt3DRender::Render::ComputeCommand *backendComputeCommand = nullptr; + + renderer.setNodeManagers(&nodeManager); + + // WHEN + computeCommand.setParent(&rootEntity); + // RootEntity is the entry point to retrieve the scene instance for lookups + manager.setRootEntity(&rootEntity, {}); + + // THEN + QVERIFY(scene.lookupNode(computeCommand.id()) != nullptr); + + // WHEN + auto handle = nodeManager.computeJobManager()->getOrAcquireHandle(computeCommand.id()); + backendComputeCommand = nodeManager.computeJobManager()->data(handle); + + // WHEN + computeCommand.setWorkGroupX(256); + computeCommand.setWorkGroupY(512); + computeCommand.setWorkGroupZ(128); + computeCommand.setRunType(Qt3DRender::QComputeCommand::Manual); + computeCommand.trigger(1); + + Qt3DCore::QBackendNodePrivate::get(backendComputeCommand)->setArbiter(&arbiter); + backendComputeCommand->setRenderer(&renderer); + simulateInitializationSync(&computeCommand, backendComputeCommand); + + // THEN + QCOMPARE(backendComputeCommand->frameCount(),1); + QCOMPARE(backendComputeCommand->isEnabled(), true); + QCOMPARE(computeCommand.isEnabled(), true); + QCOMPARE(backendComputeCommand->hasReachedFrameCount(), false); + + // WHEN + backendComputeCommand->updateFrameCount(); + + // THEN + QCOMPARE(backendComputeCommand->frameCount(), 0); + QCOMPARE(backendComputeCommand->hasReachedFrameCount(), true); + + + // Still enabled as we have yet to notify the fronted + QCOMPARE(backendComputeCommand->isEnabled(), true); + QCOMPARE(computeCommand.isEnabled(), true); + + // WHEN + auto sendDisablesJob = renderer.sendDisablesToFrontendJob(); + Qt3DCore::QAspectJobPrivate::get(sendDisablesJob.data())->postFrame(&manager); + + // THEN + QCOMPARE(computeCommand.isEnabled(), false); + QCOMPARE(backendComputeCommand->hasReachedFrameCount(), false); + + // WHEN + backendComputeCommand->syncFromFrontEnd(&computeCommand, false); + + // THEN + QCOMPARE(backendComputeCommand->frameCount(), 0); + QCOMPARE(backendComputeCommand->isEnabled(), false); } }; |