diff options
author | Mike Krus <mike.krus@kdab.com> | 2020-02-14 18:01:04 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2020-02-17 13:00:54 +0000 |
commit | 584c99957de16390b27f1a9ece1a37b4714e08c7 (patch) | |
tree | 46e28dd28959a8c63b946bfd8af9ed5203fba786 | |
parent | 97befcc17ceb75912a9270925850954a8a3dc31a (diff) |
Make sure RenderViewCommandUpdaterJobs only run when necessary
There's a large amount of those and they don't seem to have much to
do, so only actually schedule them when necessary.
Also reset the job instance counter to zero after each frame, helps
counting how many they are in the graph dumps.
Change-Id: I9bbc30f8277ed4204a4150eddd68b36396965281
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp | 29 | ||||
-rw-r--r-- | src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h | 3 |
2 files changed, 31 insertions, 1 deletions
diff --git a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp index 79a115525..ed0854ecf 100644 --- a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp +++ b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp @@ -54,9 +54,36 @@ namespace { int renderViewInstanceCounter = 0; } // anonymous +class RenderViewCommandUpdaterJobPrivate : public Qt3DCore::QAspectJobPrivate +{ +public: + RenderViewCommandUpdaterJobPrivate(RenderViewCommandUpdaterJob *q) : q_ptr(q) { } + ~RenderViewCommandUpdaterJobPrivate() override = default; + + bool isRequired() override; + void postFrame(Qt3DCore::QAspectManager *manager) override; + + RenderViewCommandUpdaterJob *q_ptr; + Q_DECLARE_PUBLIC(RenderViewCommandUpdaterJob) +}; + +bool RenderViewCommandUpdaterJobPrivate::isRequired() +{ + Q_Q(RenderViewCommandUpdaterJob); + + return q->m_renderView && !q->m_renderView->noDraw() && q->m_count > 0; +} + +void RenderViewCommandUpdaterJobPrivate::postFrame(Qt3DCore::QAspectManager *manager) +{ + Q_UNUSED(manager) + + // reset to 0 after every frame, stops the number growing indefinitely + renderViewInstanceCounter = 0; +} RenderViewCommandUpdaterJob::RenderViewCommandUpdaterJob() - : Qt3DCore::QAspectJob() + : Qt3DCore::QAspectJob(*new RenderViewCommandUpdaterJobPrivate(this)) , m_offset(0) , m_count(0) , m_renderView(nullptr) diff --git a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h index 2fe5749ad..bb1975c82 100644 --- a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h +++ b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h @@ -65,6 +65,7 @@ namespace OpenGL { class RenderView; class Renderer; +class RenderViewCommandUpdaterJobPrivate; class Q_AUTOTEST_EXPORT RenderViewCommandUpdaterJob : public Qt3DCore::QAspectJob { @@ -92,6 +93,8 @@ private: Renderer *m_renderer; EntityRenderCommandDataPtr m_renderables; QVector<RenderCommand> m_commands; + + Q_DECLARE_PRIVATE(RenderViewCommandUpdaterJob) }; typedef QSharedPointer<RenderViewCommandUpdaterJob> RenderViewCommandUpdaterJobPtr; |