summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-08-21 08:43:46 +0200
committerPaul Lemire <paul.lemire@kdab.com>2020-08-24 16:00:46 +0200
commitc2630bd66cdec12721375236f1f2d7c4dd9ccad4 (patch)
tree1bc8352de9cb11bdbcb575d3b148c4471be757a1
parent312890f18b77cd898ca2ab1f93331e2f56d5cd80 (diff)
Job Graph dump improvements
- Reverse dependency order so that graph shows jobs from first to last instead of last to first - Add instance id to RenderViewBuilder jobs, otherwise it all appears as if there's a single instance of a given job when in reality there is one per RenderView Change-Id: Id47764151f0321c794068e71e21a25e921d04589 Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r--src/core/qscheduler.cpp2
-rw-r--r--src/plugins/renderers/opengl/renderer/renderer.cpp6
-rw-r--r--src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp26
-rw-r--r--src/plugins/renderers/opengl/renderer/renderviewbuilder_p.h4
-rw-r--r--src/render/jobs/filterproximitydistancejob.cpp11
-rw-r--r--src/render/jobs/filterproximitydistancejob_p.h1
-rw-r--r--src/render/jobs/frustumcullingjob.cpp11
-rw-r--r--src/render/jobs/frustumcullingjob_p.h1
-rw-r--r--src/render/jobs/genericlambdajob_p.h4
9 files changed, 46 insertions, 20 deletions
diff --git a/src/core/qscheduler.cpp b/src/core/qscheduler.cpp
index b9d3b75aa..a18a0b144 100644
--- a/src/core/qscheduler.cpp
+++ b/src/core/qscheduler.cpp
@@ -80,7 +80,7 @@ void dumpJobs(const std::vector<Qt3DCore::QAspectJobPtr> &jobs) {
for (const auto &job: jobs) {
auto dependencies = job->dependencies();
for (const auto &dependency: dependencies)
- stream << QLatin1String("\t") << formatJob(job.data()) << QLatin1String(" -> ") << formatJob(dependency.toStrongRef().data()) << Qt::endl;
+ stream << QLatin1String("\t") << formatJob(dependency.toStrongRef().data()) << QLatin1String(" -> ") << formatJob(job.data()) << Qt::endl;
}
stream << "}" << Qt::endl;
diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp
index 7eceaf944..55a9fa4e4 100644
--- a/src/plugins/renderers/opengl/renderer/renderer.cpp
+++ b/src/plugins/renderers/opengl/renderer/renderer.cpp
@@ -255,9 +255,9 @@ Renderer::Renderer()
, m_lightGathererJob(new CachingLightGatherer(&m_cache))
, m_renderableEntityFilterJob(new CachingRenderableEntityFilter(&m_cache))
, m_computableEntityFilterJob(new CachingComputableEntityFilter(&m_cache))
- , m_bufferGathererJob(CreateSynchronizerJobPtr([this] { lookForDirtyBuffers(); }, JobTypes::DirtyBufferGathering))
- , m_vaoGathererJob(CreateSynchronizerJobPtr([this] { lookForAbandonedVaos(); }, JobTypes::DirtyVaoGathering))
- , m_textureGathererJob(CreateSynchronizerJobPtr([this] { lookForDirtyTextures(); }, JobTypes::DirtyTextureGathering))
+ , m_bufferGathererJob(CreateSynchronizerJobPtr([this] { lookForDirtyBuffers(); }, JobTypes::DirtyBufferGathering, 0))
+ , m_vaoGathererJob(CreateSynchronizerJobPtr([this] { lookForAbandonedVaos(); }, JobTypes::DirtyVaoGathering, 0))
+ , m_textureGathererJob(CreateSynchronizerJobPtr([this] { lookForDirtyTextures(); }, JobTypes::DirtyTextureGathering, 0))
, m_introspectShaderJob(CreateSynchronizerPostFramePtr([this] { reloadDirtyShaders(); },
[this] (Qt3DCore::QAspectManager *m) { sendShaderChangesToFrontend(m); },
JobTypes::DirtyShaderGathering))
diff --git a/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp b/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp
index 9cd7e27b7..26ad8f0ec 100644
--- a/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp
+++ b/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp
@@ -534,8 +534,8 @@ RenderViewBuilder::RenderViewBuilder(Render::FrameGraphNode *leafNode, int rende
, m_renderViewJob(RenderViewInitializerJobPtr::create())
, m_filterEntityByLayerJob()
, m_frustumCullingJob(new Render::FrustumCullingJob())
- , m_syncPreFrustumCullingJob(CreateSynchronizerJobPtr(SyncPreFrustumCulling(m_renderViewJob, m_frustumCullingJob), JobTypes::SyncFrustumCulling))
- , m_setClearDrawBufferIndexJob(CreateSynchronizerJobPtr(SetClearDrawBufferIndex(m_renderViewJob), JobTypes::ClearBufferDrawIndex))
+ , m_syncPreFrustumCullingJob(CreateSynchronizerJobPtr(SyncPreFrustumCulling(m_renderViewJob, m_frustumCullingJob), JobTypes::SyncFrustumCulling, renderViewIndex))
+ , m_setClearDrawBufferIndexJob(CreateSynchronizerJobPtr(SetClearDrawBufferIndex(m_renderViewJob), JobTypes::ClearBufferDrawIndex, renderViewIndex))
, m_syncFilterEntityByLayerJob()
, m_filterProximityJob(Render::FilterProximityDistanceJobPtr::create())
{
@@ -637,7 +637,8 @@ void RenderViewBuilder::prepareJobs()
m_renderViewCommandBuilderJobs,
m_renderer,
m_leafNode),
- JobTypes::SyncRenderViewPreCommandBuilding);
+ JobTypes::SyncRenderViewPreCommandBuilding,
+ m_renderViewIndex);
}
m_renderViewJob->setRenderer(m_renderer);
@@ -675,7 +676,8 @@ void RenderViewBuilder::prepareJobs()
m_syncMaterialGathererJob = CreateSynchronizerJobPtr(SyncMaterialParameterGatherer(m_materialGathererJobs,
m_renderer,
m_leafNode),
- JobTypes::SyncMaterialGatherer);
+ JobTypes::SyncMaterialGatherer,
+ m_renderViewIndex);
}
const bool layerCacheNeedsRebuild = m_rebuildFlags.testFlag(RebuildFlag::LayerCacheRebuild);
@@ -683,9 +685,10 @@ void RenderViewBuilder::prepareJobs()
m_filterEntityByLayerJob = Render::FilterLayerEntityJobPtr::create();
m_filterEntityByLayerJob->setManager(m_renderer->nodeManagers());
m_syncFilterEntityByLayerJob = CreateSynchronizerJobPtr(SyncFilterEntityByLayer(m_filterEntityByLayerJob,
- m_renderer,
- m_leafNode),
- JobTypes::SyncFilterEntityByLayer);
+ m_renderer,
+ m_leafNode),
+ JobTypes::SyncFilterEntityByLayer,
+ m_renderViewIndex);
}
m_syncRenderViewPreCommandUpdateJob = CreateSynchronizerJobPtr(SyncRenderViewPreCommandUpdate(m_renderViewJob,
@@ -697,12 +700,14 @@ void RenderViewBuilder::prepareJobs()
m_renderer,
m_leafNode,
m_rebuildFlags),
- JobTypes::SyncRenderViewPreCommandUpdate);
+ JobTypes::SyncRenderViewPreCommandUpdate,
+ m_renderViewIndex);
m_syncRenderViewPostCommandUpdateJob = CreateSynchronizerJobPtr(SyncRenderViewPostCommandUpdate(m_renderViewJob,
m_renderViewCommandUpdaterJobs,
m_renderer),
- JobTypes::SyncRenderViewPostCommandUpdate);
+ JobTypes::SyncRenderViewPostCommandUpdate,
+ m_renderViewIndex);
m_syncRenderViewPostInitializationJob = CreateSynchronizerJobPtr(SyncRenderViewPostInitialization(m_renderViewJob,
m_frustumCullingJob,
@@ -711,7 +716,8 @@ void RenderViewBuilder::prepareJobs()
m_materialGathererJobs,
m_renderViewCommandUpdaterJobs,
m_renderViewCommandBuilderJobs),
- JobTypes::SyncRenderViewInitialization);
+ JobTypes::SyncRenderViewInitialization,
+ m_renderViewIndex);
}
std::vector<Qt3DCore::QAspectJobPtr> RenderViewBuilder::buildJobHierachy() const
diff --git a/src/plugins/renderers/opengl/renderer/renderviewbuilder_p.h b/src/plugins/renderers/opengl/renderer/renderviewbuilder_p.h
index b7d3ed270..77fec9f0c 100644
--- a/src/plugins/renderers/opengl/renderer/renderviewbuilder_p.h
+++ b/src/plugins/renderers/opengl/renderer/renderviewbuilder_p.h
@@ -74,8 +74,8 @@ namespace OpenGL {
class Renderer;
using SynchronizerJobPtr = GenericLambdaJobPtr<std::function<void()>>;
-#define CreateSynchronizerJobPtr(lambda, type) \
- SynchronizerJobPtr::create(lambda, type, #type)
+#define CreateSynchronizerJobPtr(lambda, type, instance) \
+ SynchronizerJobPtr::create(lambda, type, #type, instance)
using RenderViewCommandBuilderJobPtr = Render::RenderViewCommandBuilderJobPtr<RenderView, RenderCommand>;
using RenderViewCommandUpdaterJobPtr = Render::RenderViewCommandUpdaterJobPtr<RenderView, RenderCommand>;
diff --git a/src/render/jobs/filterproximitydistancejob.cpp b/src/render/jobs/filterproximitydistancejob.cpp
index cbfea14a1..cbbd39b8c 100644
--- a/src/render/jobs/filterproximitydistancejob.cpp
+++ b/src/render/jobs/filterproximitydistancejob.cpp
@@ -40,13 +40,22 @@ namespace Qt3DRender {
namespace Render {
+namespace {
+int instanceCounter = 0;
+} // anonymous
+
FilterProximityDistanceJob::FilterProximityDistanceJob()
: m_manager(nullptr)
, m_targetEntity(nullptr)
, m_distanceThresholdSquared(0.)
{
- SET_JOB_RUN_STAT_TYPE(this, JobTypes::ProximityFiltering, 0)
+ SET_JOB_RUN_STAT_TYPE(this, JobTypes::ProximityFiltering, instanceCounter++)
+}
+
+FilterProximityDistanceJob::~FilterProximityDistanceJob()
+{
+ --instanceCounter;
}
void FilterProximityDistanceJob::run()
diff --git a/src/render/jobs/filterproximitydistancejob_p.h b/src/render/jobs/filterproximitydistancejob_p.h
index fd93d529d..fe93ba731 100644
--- a/src/render/jobs/filterproximitydistancejob_p.h
+++ b/src/render/jobs/filterproximitydistancejob_p.h
@@ -57,6 +57,7 @@ class Q_3DRENDERSHARED_PRIVATE_EXPORT FilterProximityDistanceJob : public Qt3DCo
{
public:
FilterProximityDistanceJob();
+ ~FilterProximityDistanceJob();
inline void setManager(NodeManagers *manager) { m_manager = manager; }
inline void setProximityFilterIds(const Qt3DCore::QNodeIdVector &proximityFilterIds) { m_proximityFilterIds = proximityFilterIds; }
diff --git a/src/render/jobs/frustumcullingjob.cpp b/src/render/jobs/frustumcullingjob.cpp
index aa1a57a31..17dac3c49 100644
--- a/src/render/jobs/frustumcullingjob.cpp
+++ b/src/render/jobs/frustumcullingjob.cpp
@@ -51,13 +51,22 @@ namespace Qt3DRender {
namespace Render {
+namespace {
+int instanceCounter = 0;
+} // anonymous
+
FrustumCullingJob::FrustumCullingJob()
: Qt3DCore::QAspectJob()
, m_root(nullptr)
, m_manager(nullptr)
, m_active(false)
{
- SET_JOB_RUN_STAT_TYPE(this, JobTypes::FrustumCulling, 0)
+ SET_JOB_RUN_STAT_TYPE(this, JobTypes::FrustumCulling, instanceCounter++)
+}
+
+FrustumCullingJob::~FrustumCullingJob()
+{
+ --instanceCounter;
}
void FrustumCullingJob::run()
diff --git a/src/render/jobs/frustumcullingjob_p.h b/src/render/jobs/frustumcullingjob_p.h
index 60cc05388..276c0c803 100644
--- a/src/render/jobs/frustumcullingjob_p.h
+++ b/src/render/jobs/frustumcullingjob_p.h
@@ -73,6 +73,7 @@ class Q_3DRENDERSHARED_PRIVATE_EXPORT FrustumCullingJob : public Qt3DCore::QAspe
{
public:
FrustumCullingJob();
+ ~FrustumCullingJob();
QT3D_ALIGNED_MALLOC_AND_FREE()
diff --git a/src/render/jobs/genericlambdajob_p.h b/src/render/jobs/genericlambdajob_p.h
index 994cd3a14..765746b0c 100644
--- a/src/render/jobs/genericlambdajob_p.h
+++ b/src/render/jobs/genericlambdajob_p.h
@@ -64,11 +64,11 @@ template<typename T>
class GenericLambdaJob : public Qt3DCore::QAspectJob
{
public:
- explicit GenericLambdaJob(T callable, JobTypes::JobType type = JobTypes::GenericLambda, const char *name = "GenericLambda")
+ explicit GenericLambdaJob(T callable, JobTypes::JobType type = JobTypes::GenericLambda, const char *name = "GenericLambda", int instance = 0)
: Qt3DCore::QAspectJob()
, m_callable(callable)
{
- SET_JOB_RUN_STAT_TYPE_AND_NAME(this, type, name, 0)
+ SET_JOB_RUN_STAT_TYPE_AND_NAME(this, type, name, instance)
}
// QAspectJob interface