diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-18 20:01:10 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-01 19:07:29 +0100 |
commit | 6c105dc43722cc199924f78cf044dab7a9251f20 (patch) | |
tree | 025fc5ff151983754fa368e9e221af2891b37f80 | |
parent | 7c044beea804c1bdfe815304272119dcf36bf7a5 (diff) |
Add callback on aspect job when all jobs are completev5.14.0-beta1
This gets called in the main so it's safe for jobs to propagate
results from the run at this point.
Change-Id: I7d2f31472ec1fcd1801dcb9ded735f9f1e5214f9
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-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 |