diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-05-27 11:49:33 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-08-07 08:51:10 +0200 |
commit | 8daa8bcb8e9a7110289d15c94f53a4be9adac1ac (patch) | |
tree | 56330947d547e59efd9b08182a51589d82be5049 /src/logic | |
parent | fd64e870fad0e619704e79689f20645760dbdc0e (diff) |
Remove the Aspect Thread
This now makes the Qt3D simulation loop run in the Main Thread.
In theory having the Aspect Thread allowed Qt3D to continue rendering
even if the main thread got locked. In practice however this leads to
a large amount of complexities in the Qt3D implementations and provides
little value as in most cases blocking the main thread would block animations
driven by frontend nodes.
Removing the Aspect Thread will allow to remove the backend tree copies each
aspect had to make which will allow to reduce memory. In addition, getting direct
access to frontend nodes, will now be possible without introducing races which
should allow to make more optimizations and reduce latencies on some operations.
Change-Id: I80e4cd6427de06ddedfa1bb50d40710b91867b24
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/logic')
-rw-r--r-- | src/logic/executor.cpp | 6 | ||||
-rw-r--r-- | src/logic/executor_p.h | 2 | ||||
-rw-r--r-- | src/logic/manager.cpp | 6 | ||||
-rw-r--r-- | src/logic/manager_p.h | 1 |
4 files changed, 1 insertions, 14 deletions
diff --git a/src/logic/executor.cpp b/src/logic/executor.cpp index 6134e801e..1c428db47 100644 --- a/src/logic/executor.cpp +++ b/src/logic/executor.cpp @@ -64,8 +64,6 @@ void Executor::clearQueueAndProceed() // If the semaphore is acquired, release it to allow the logic job and hence the // manager and frame to complete and shutdown to continue. m_nodeIds.clear(); - if (m_semaphore->available() == 0) - m_semaphore->release(); } void Executor::enqueueLogicFrameUpdates(const QVector<Qt3DCore::QNodeId> &nodeIds) @@ -92,16 +90,12 @@ bool Executor::event(QEvent *e) void Executor::processLogicFrameUpdates(float dt) { Q_ASSERT(m_scene); - Q_ASSERT(m_semaphore); const QVector<QNode *> nodes = m_scene->lookupNodes(m_nodeIds); for (QNode *node : nodes) { QFrameAction *frameAction = qobject_cast<QFrameAction *>(node); if (frameAction && frameAction->isEnabled()) frameAction->onTriggered(dt); } - - // Release the semaphore so the calling Manager can continue - m_semaphore->release(); } } // namespace Logic diff --git a/src/logic/executor_p.h b/src/logic/executor_p.h index e33ff842e..27b9c60c8 100644 --- a/src/logic/executor_p.h +++ b/src/logic/executor_p.h @@ -87,7 +87,6 @@ public: explicit Executor(QObject *parent = 0); void setScene(Qt3DCore::QScene *scene) { m_scene = scene; } - void setSemephore(QSemaphore *semaphore) { m_semaphore = semaphore; } void clearQueueAndProceed(); public Q_SLOTS: @@ -100,7 +99,6 @@ protected: private: QVector<Qt3DCore::QNodeId> m_nodeIds; Qt3DCore::QScene *m_scene; - QSemaphore *m_semaphore; }; } // namespace Logic diff --git a/src/logic/manager.cpp b/src/logic/manager.cpp index e10ace592..3d096a342 100644 --- a/src/logic/manager.cpp +++ b/src/logic/manager.cpp @@ -56,10 +56,8 @@ namespace Logic { Manager::Manager() : m_logicHandlerManager(new HandlerManager) - , m_semaphore(1) , m_dt(0.0f) { - m_semaphore.acquire(); } Manager::~Manager() @@ -69,8 +67,6 @@ Manager::~Manager() void Manager::setExecutor(Executor *executor) { m_executor = executor; - if (m_executor) - m_executor->setSemephore(&m_semaphore); } void Manager::appendHandler(Handler *handler) @@ -93,6 +89,7 @@ bool Manager::hasFrameActions() const return m_logicHandlers.count() > 0; } +// Called from Job Thread void Manager::triggerLogicFrameUpdates() { Q_ASSERT(m_executor); @@ -107,7 +104,6 @@ void Manager::triggerLogicFrameUpdates() // release the semaphore when it has completed its work. m_executor->enqueueLogicFrameUpdates(m_logicComponentIds); qApp->postEvent(m_executor, new FrameUpdateEvent(m_dt)); - m_semaphore.acquire(); } } // namespace Logic diff --git a/src/logic/manager_p.h b/src/logic/manager_p.h index 918bd57e0..e4fa08a47 100644 --- a/src/logic/manager_p.h +++ b/src/logic/manager_p.h @@ -95,7 +95,6 @@ private: QVector<Qt3DCore::QNodeId> m_logicComponentIds; QLogicAspect *m_logicAspect; Executor *m_executor; - QSemaphore m_semaphore; float m_dt; }; |