summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/jobs/qaspectjob.cpp14
-rw-r--r--src/core/jobs/qaspectjob.h4
-rw-r--r--src/core/jobs/qaspectjob_p.h4
-rw-r--r--src/core/qscheduler.cpp3
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