summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2020-02-14 18:01:04 +0000
committerMike Krus <mike.krus@kdab.com>2020-02-17 13:00:54 +0000
commit584c99957de16390b27f1a9ece1a37b4714e08c7 (patch)
tree46e28dd28959a8c63b946bfd8af9ed5203fba786
parent97befcc17ceb75912a9270925850954a8a3dc31a (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.cpp29
-rw-r--r--src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h3
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;