summaryrefslogtreecommitdiff
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-25 12:27:36 +0200
commit09ef0c77a3b6dccaaa8d26bc2572052e38dcc070 (patch)
tree5bafe3af4f6d9d9170d0ced5891c6982bc184be6
parenta026e98d7f9e3d7d8a2757c98bd7de4fe28ff798 (diff)
downloadqt3d-09ef0c77a3b6dccaaa8d26bc2572052e38dcc070.tar.gz
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.cpp8
-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, 47 insertions, 21 deletions
diff --git a/src/core/qscheduler.cpp b/src/core/qscheduler.cpp
index c52445a35..cb4a6f180 100644
--- a/src/core/qscheduler.cpp
+++ b/src/core/qscheduler.cpp
@@ -80,7 +80,7 @@ void dumpJobs(QVector<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 dcccc5c17..27e00d9cb 100644
--- a/src/plugins/renderers/opengl/renderer/renderer.cpp
+++ b/src/plugins/renderers/opengl/renderer/renderer.cpp
@@ -251,10 +251,10 @@ Renderer::Renderer(QRenderAspect::RenderType type)
, 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_sendSetFenceHandlesToFrontendJob(CreateSynchronizerJobPtr([this] { sendSetFenceHandlesToFrontend(); }, JobTypes::SendSetFenceHandlesToFrontend))
+ , 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_sendSetFenceHandlesToFrontendJob(CreateSynchronizerJobPtr([this] { sendSetFenceHandlesToFrontend(); }, JobTypes::SendSetFenceHandlesToFrontend, 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 7dad70483..32667dceb 100644
--- a/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp
+++ b/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp
@@ -561,8 +561,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())
{
@@ -664,7 +664,8 @@ void RenderViewBuilder::prepareJobs()
m_renderViewCommandBuilderJobs,
m_renderer,
m_leafNode),
- JobTypes::SyncRenderViewPreCommandBuilding);
+ JobTypes::SyncRenderViewPreCommandBuilding,
+ m_renderViewIndex);
}
m_renderViewJob->setRenderer(m_renderer);
@@ -704,7 +705,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);
@@ -712,9 +714,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,
@@ -726,13 +729,15 @@ 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,
m_leafNode),
- JobTypes::SyncRenderViewPostCommandUpdate);
+ JobTypes::SyncRenderViewPostCommandUpdate,
+ m_renderViewIndex);
m_syncRenderViewPostInitializationJob = CreateSynchronizerJobPtr(SyncRenderViewPostInitialization(m_renderViewJob,
m_frustumCullingJob,
@@ -741,7 +746,8 @@ void RenderViewBuilder::prepareJobs()
m_materialGathererJobs,
m_renderViewCommandUpdaterJobs,
m_renderViewCommandBuilderJobs),
- JobTypes::SyncRenderViewInitialization);
+ JobTypes::SyncRenderViewInitialization,
+ m_renderViewIndex);
}
QVector<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 98ac126f7..c97ab03a2 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)
class Q_AUTOTEST_EXPORT RenderViewBuilder
{
diff --git a/src/render/jobs/filterproximitydistancejob.cpp b/src/render/jobs/filterproximitydistancejob.cpp
index 56c3baa62..53c814805 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 e058f011a..08ee43fac 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 636585c2f..9dc80f435 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