From e67bebdaee11223f497e4ebd28bebe0cda2d3dbd Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Thu, 12 Dec 2019 13:50:51 +0000 Subject: Expose number of jobs is last update Useful for tracking amount of work done Change-Id: I1d6e0394c35fffc4b33991373e4d16e4651987c7 Reviewed-by: Paul Lemire --- src/core/aspects/qaspectmanager.cpp | 3 ++- src/core/aspects/qaspectmanager_p.h | 4 +++- src/core/qscheduler.cpp | 4 +++- src/core/qscheduler_p.h | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/core/aspects/qaspectmanager.cpp b/src/core/aspects/qaspectmanager.cpp index df90fd57c..f276d633e 100644 --- a/src/core/aspects/qaspectmanager.cpp +++ b/src/core/aspects/qaspectmanager.cpp @@ -110,6 +110,7 @@ QAspectManager::QAspectManager(QAspectEngine *parent) , m_simulationLoopRunning(false) , m_driveMode(QAspectEngine::Automatic) , m_postConstructorInit(nullptr) + , m_jobsInLastFrame(0) { qRegisterMetaType("QSurface*"); qCDebug(Aspects) << Q_FUNC_INFO; @@ -502,7 +503,7 @@ void QAspectManager::processFrame() QElapsedTimer timer; timer.start(); #endif - m_scheduler->scheduleAndWaitForFrameAspectJobs(t); + m_jobsInLastFrame = m_scheduler->scheduleAndWaitForFrameAspectJobs(t); #if defined(QT3D_CORE_JOB_TIMING) qDebug() << "Jobs took" << timer.nsecsElapsed() / 1.0e6; #endif diff --git a/src/core/aspects/qaspectmanager_p.h b/src/core/aspects/qaspectmanager_p.h index 64c75586a..ed04b314f 100644 --- a/src/core/aspects/qaspectmanager_p.h +++ b/src/core/aspects/qaspectmanager_p.h @@ -112,6 +112,8 @@ public: QNode *lookupNode(QNodeId id) const; QVector lookupNodes(const QVector &ids) const; + int jobsInLastFrame() const { return m_jobsInLastFrame; } + private: bool event(QEvent *event) override; void requestNextFrame(); @@ -128,7 +130,7 @@ private: QAspectEngine::RunMode m_driveMode; QVector m_nodeTreeChanges; NodePostConstructorInit* m_postConstructorInit; - + int m_jobsInLastFrame; }; } // namespace Qt3DCore diff --git a/src/core/qscheduler.cpp b/src/core/qscheduler.cpp index 48cdfb8df..2294976ca 100644 --- a/src/core/qscheduler.cpp +++ b/src/core/qscheduler.cpp @@ -70,7 +70,7 @@ QAspectManager *QScheduler::aspectManager() const return m_aspectManager; } -void QScheduler::scheduleAndWaitForFrameAspectJobs(qint64 time) +int QScheduler::scheduleAndWaitForFrameAspectJobs(qint64 time) { QVector jobQueue; @@ -102,6 +102,8 @@ void QScheduler::scheduleAndWaitForFrameAspectJobs(qint64 time) for (QAbstractAspect *aspect : aspects) QAbstractAspectPrivate::get(aspect)->jobsDone(m_aspectManager); } + + return jobQueue.size(); } } // namespace Qt3DCore diff --git a/src/core/qscheduler_p.h b/src/core/qscheduler_p.h index 9b1685e54..dd4101ef2 100644 --- a/src/core/qscheduler_p.h +++ b/src/core/qscheduler_p.h @@ -64,13 +64,13 @@ class QScheduler : public QObject { Q_OBJECT public: - explicit QScheduler(QObject *parent = 0); + explicit QScheduler(QObject *parent = nullptr); ~QScheduler(); void setAspectManager(QAspectManager *aspectManager); QAspectManager *aspectManager() const; - virtual void scheduleAndWaitForFrameAspectJobs(qint64 time); + virtual int scheduleAndWaitForFrameAspectJobs(qint64 time); private: QAspectManager *m_aspectManager; -- cgit v1.2.3