diff options
-rw-r--r-- | src/core/jobs/qaspectjob.cpp | 14 | ||||
-rw-r--r-- | src/core/jobs/qaspectjob.h | 4 | ||||
-rw-r--r-- | src/core/jobs/qaspectjob_p.h | 4 | ||||
-rw-r--r-- | src/core/qscheduler.cpp | 3 |
4 files changed, 24 insertions, 1 deletions
diff --git a/src/core/jobs/qaspectjob.cpp b/src/core/jobs/qaspectjob.cpp index ccb9c3a0e..00ad1ace8 100644 --- a/src/core/jobs/qaspectjob.cpp +++ b/src/core/jobs/qaspectjob.cpp @@ -59,11 +59,18 @@ QAspectJobPrivate::QAspectJobPrivate() { } +QAspectJobPrivate::~QAspectJobPrivate() = default; + QAspectJobPrivate *QAspectJobPrivate::get(QAspectJob *job) { return job->d_func(); } +void QAspectJobPrivate::postFrame(QAspectManager *aspectManager) +{ + Q_UNUSED(aspectManager) +} + QAspectJob::QAspectJob() : d_ptr(new QAspectJobPrivate) { @@ -133,6 +140,13 @@ QVector<QWeakPointer<QAspectJob> > QAspectJob::dependencies() const return d->m_dependencies; } +void QAspectJob::postFrame(QAspectManager *aspectManager) +{ + Q_D(QAspectJob); + if (aspectManager) + d->postFrame(aspectManager); +} + } // namespace Qt3DCore QT_END_NAMESPACE diff --git a/src/core/jobs/qaspectjob.h b/src/core/jobs/qaspectjob.h index 5c088fd1a..7cc784e0f 100644 --- a/src/core/jobs/qaspectjob.h +++ b/src/core/jobs/qaspectjob.h @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE namespace Qt3DCore { class QAspectJobPrivate; +class QAspectManager; class Q_3DCORESHARED_EXPORT QAspectJob { @@ -62,14 +63,15 @@ public: QVector<QWeakPointer<QAspectJob> > dependencies() const; virtual void run() = 0; + void postFrame(QAspectManager *aspectManager); protected: explicit QAspectJob(QAspectJobPrivate &dd); + QAspectJobPrivate *d_ptr; private: Q_DISABLE_COPY(QAspectJob) Q_DECLARE_PRIVATE(QAspectJob) - QAspectJobPrivate *d_ptr; }; typedef QSharedPointer<QAspectJob> QAspectJobPtr; diff --git a/src/core/jobs/qaspectjob_p.h b/src/core/jobs/qaspectjob_p.h index 7aa3151a0..b16c3cad2 100644 --- a/src/core/jobs/qaspectjob_p.h +++ b/src/core/jobs/qaspectjob_p.h @@ -61,6 +61,7 @@ QT_BEGIN_NAMESPACE namespace Qt3DCore { class QAspectJob; +class QAspectManager; #if QT_CONFIG(qt3d_profile_jobs) struct FrameHeader @@ -107,9 +108,12 @@ class Q_3DCORE_PRIVATE_EXPORT QAspectJobPrivate { public: QAspectJobPrivate(); + virtual ~QAspectJobPrivate(); static QAspectJobPrivate *get(QAspectJob *job); + virtual void postFrame(QAspectManager *aspectManager); + QVector<QWeakPointer<QAspectJob> > m_dependencies; #if QT_CONFIG(qt3d_profile_jobs) JobRunStats m_stats; diff --git a/src/core/qscheduler.cpp b/src/core/qscheduler.cpp index cc2f9081e..edfbb391c 100644 --- a/src/core/qscheduler.cpp +++ b/src/core/qscheduler.cpp @@ -91,6 +91,9 @@ void QScheduler::scheduleAndWaitForFrameAspectJobs(qint64 time) // whilst the threadpool works its way through the jobs m_aspectManager->jobManager()->waitForAllJobs(); + + for (auto &job : qAsConst(jobQueue)) + job->postFrame(m_aspectManager); } } // namespace Qt3DCore |