summaryrefslogtreecommitdiffstats
path: root/src/logic
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-05-27 11:49:33 +0200
committerPaul Lemire <paul.lemire@kdab.com>2019-08-07 08:51:10 +0200
commit8daa8bcb8e9a7110289d15c94f53a4be9adac1ac (patch)
tree56330947d547e59efd9b08182a51589d82be5049 /src/logic
parentfd64e870fad0e619704e79689f20645760dbdc0e (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.cpp6
-rw-r--r--src/logic/executor_p.h2
-rw-r--r--src/logic/manager.cpp6
-rw-r--r--src/logic/manager_p.h1
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;
};