diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-12-05 10:33:32 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-12-13 15:36:59 +0000 |
commit | ef886f79f99cdae94da8bf5a4ca6e94164d56677 (patch) | |
tree | 98caf12195cb24763292305326d40c6838066312 /src/render | |
parent | 6e448dd5918c70ddfd0d52f62522fa49c02e8ba8 (diff) |
Make tracing a runtime option
- Moved most of the code QSystemInformationService (private class
for now)
- Tracing can be enabled by setting QT3D_TRACE_ENABLED or
calling QSystemInformationService::setTraceEnabled(bool)
- Introduced QTaskLogger class to easy logging (RAII)
Change-Id: I2a3e08e4371fcee3e9ef3cf575725f13f57d1a94
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render')
25 files changed, 35 insertions, 57 deletions
diff --git a/src/render/jobs/calcboundingvolumejob.cpp b/src/render/jobs/calcboundingvolumejob.cpp index 9af2f4f38..172c4ddca 100644 --- a/src/render/jobs/calcboundingvolumejob.cpp +++ b/src/render/jobs/calcboundingvolumejob.cpp @@ -354,7 +354,7 @@ CalculateBoundingVolumeJob::CalculateBoundingVolumeJob() : m_manager(nullptr) , m_node(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::CalcBoundingVolume, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::CalcBoundingVolume, 0) } void CalculateBoundingVolumeJob::run() diff --git a/src/render/jobs/calcgeometrytrianglevolumes.cpp b/src/render/jobs/calcgeometrytrianglevolumes.cpp index d2b12e09c..eb31a25a6 100644 --- a/src/render/jobs/calcgeometrytrianglevolumes.cpp +++ b/src/render/jobs/calcgeometrytrianglevolumes.cpp @@ -53,7 +53,7 @@ CalcGeometryTriangleVolumes::CalcGeometryTriangleVolumes(const Qt3DCore::QNodeId , m_geometryRendererId(geometryRendererId) , m_manager(manager) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::CalcTriangleVolume, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::CalcTriangleVolume, 0) } void CalcGeometryTriangleVolumes::run() diff --git a/src/render/jobs/expandboundingvolumejob.cpp b/src/render/jobs/expandboundingvolumejob.cpp index 641a5c272..8587634cb 100644 --- a/src/render/jobs/expandboundingvolumejob.cpp +++ b/src/render/jobs/expandboundingvolumejob.cpp @@ -84,7 +84,7 @@ ExpandBoundingVolumeJob::ExpandBoundingVolumeJob() : m_node(nullptr) , m_manager(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::ExpandBoundingVolume, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::ExpandBoundingVolume, 0) } void ExpandBoundingVolumeJob::setRoot(Entity *root) diff --git a/src/render/jobs/filterentitybycomponentjob_p.h b/src/render/jobs/filterentitybycomponentjob_p.h index 75e487d7f..cefcdd296 100644 --- a/src/render/jobs/filterentitybycomponentjob_p.h +++ b/src/render/jobs/filterentitybycomponentjob_p.h @@ -74,7 +74,7 @@ public: : Qt3DCore::QAspectJob() , m_manager(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::EntityComponentTypeFiltering, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::EntityComponentTypeFiltering, 0) } inline void setManager(EntityManager *manager) Q_DECL_NOTHROW { m_manager = manager; } diff --git a/src/render/jobs/filterlayerentityjob.cpp b/src/render/jobs/filterlayerentityjob.cpp index e206ef968..032004422 100644 --- a/src/render/jobs/filterlayerentityjob.cpp +++ b/src/render/jobs/filterlayerentityjob.cpp @@ -58,7 +58,7 @@ FilterLayerEntityJob::FilterLayerEntityJob() : Qt3DCore::QAspectJob() , m_manager(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::LayerFiltering, layerFilterJobCounter++); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::LayerFiltering, layerFilterJobCounter++) } diff --git a/src/render/jobs/framecleanupjob.cpp b/src/render/jobs/framecleanupjob.cpp index 17ca60bff..fb63f005b 100644 --- a/src/render/jobs/framecleanupjob.cpp +++ b/src/render/jobs/framecleanupjob.cpp @@ -55,7 +55,7 @@ FrameCleanupJob::FrameCleanupJob() : m_managers(nullptr) , m_root(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::FrameCleanup, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::FrameCleanup, 0) } FrameCleanupJob::~FrameCleanupJob() diff --git a/src/render/jobs/frustumcullingjob.cpp b/src/render/jobs/frustumcullingjob.cpp index 0922fb0cb..e22d625df 100644 --- a/src/render/jobs/frustumcullingjob.cpp +++ b/src/render/jobs/frustumcullingjob.cpp @@ -58,7 +58,7 @@ FrustumCullingJob::FrustumCullingJob() , m_manager(nullptr) , m_active(false) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::FrustumCulling, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::FrustumCulling, 0) } void FrustumCullingJob::run() diff --git a/src/render/jobs/genericlambdajob_p.h b/src/render/jobs/genericlambdajob_p.h index 4d93f0f8d..8cf4276f6 100644 --- a/src/render/jobs/genericlambdajob_p.h +++ b/src/render/jobs/genericlambdajob_p.h @@ -68,7 +68,7 @@ public: : Qt3DCore::QAspectJob() , m_callable(callable) { - SET_JOB_RUN_STAT_TYPE(this, type, 0); + SET_JOB_RUN_STAT_TYPE(this, type, 0) } // QAspectJob interface @@ -111,7 +111,7 @@ public: : Qt3DCore::QAspectJob(*new GenericLambdaJobAndPostFramePrivate<T, U>(postFrameCallable)) , m_runCallable(runCallable) { - SET_JOB_RUN_STAT_TYPE(this, type, 0); + SET_JOB_RUN_STAT_TYPE(this, type, 0) } // QAspectJob interface diff --git a/src/render/jobs/lightgatherer.cpp b/src/render/jobs/lightgatherer.cpp index f4c8dfba8..b79976aef 100644 --- a/src/render/jobs/lightgatherer.cpp +++ b/src/render/jobs/lightgatherer.cpp @@ -53,7 +53,7 @@ LightGatherer::LightGatherer() , m_manager(nullptr) , m_environmentLight(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::LightGathering, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::LightGathering, 0) } void LightGatherer::run() diff --git a/src/render/jobs/loadbufferjob.cpp b/src/render/jobs/loadbufferjob.cpp index c9cbb623d..0f4feb5d4 100644 --- a/src/render/jobs/loadbufferjob.cpp +++ b/src/render/jobs/loadbufferjob.cpp @@ -68,7 +68,7 @@ LoadBufferJob::LoadBufferJob(const HBuffer &handle) , m_handle(handle) , m_nodeManagers(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::LoadBuffer, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::LoadBuffer, 0) } LoadBufferJob::~LoadBufferJob() diff --git a/src/render/jobs/loadgeometryjob.cpp b/src/render/jobs/loadgeometryjob.cpp index 88930038a..2069336cd 100644 --- a/src/render/jobs/loadgeometryjob.cpp +++ b/src/render/jobs/loadgeometryjob.cpp @@ -66,7 +66,7 @@ LoadGeometryJob::LoadGeometryJob(const HGeometryRenderer &handle) , m_handle(handle) , m_nodeManagers(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::LoadGeometry, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::LoadGeometry, 0) } LoadGeometryJob::~LoadGeometryJob() diff --git a/src/render/jobs/loadscenejob.cpp b/src/render/jobs/loadscenejob.cpp index f858f82e3..be855c608 100644 --- a/src/render/jobs/loadscenejob.cpp +++ b/src/render/jobs/loadscenejob.cpp @@ -63,7 +63,7 @@ LoadSceneJob::LoadSceneJob(const QUrl &source, Qt3DCore::QNodeId sceneComponent) , m_sceneComponent(sceneComponent) , m_managers(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::LoadScene, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::LoadScene, 0) } void LoadSceneJob::setData(const QByteArray &data) diff --git a/src/render/jobs/sendbuffercapturejob.cpp b/src/render/jobs/sendbuffercapturejob.cpp index 3fa185684..2ccb72337 100644 --- a/src/render/jobs/sendbuffercapturejob.cpp +++ b/src/render/jobs/sendbuffercapturejob.cpp @@ -69,7 +69,7 @@ SendBufferCaptureJob::SendBufferCaptureJob() : Qt3DCore::QAspectJob(*new SendBufferCaptureJobPrivate) , m_nodeManagers(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::SendBufferCapture, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::SendBufferCapture, 0) } SendBufferCaptureJob::~SendBufferCaptureJob() diff --git a/src/render/jobs/sendrendercapturejob.cpp b/src/render/jobs/sendrendercapturejob.cpp index f622c347a..46b1d9449 100644 --- a/src/render/jobs/sendrendercapturejob.cpp +++ b/src/render/jobs/sendrendercapturejob.cpp @@ -51,7 +51,7 @@ SendRenderCaptureJob::SendRenderCaptureJob() : Qt3DCore::QAspectJob() , m_managers(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::SendRenderCapture, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::SendRenderCapture, 0) } SendRenderCaptureJob::~SendRenderCaptureJob() diff --git a/src/render/jobs/updateentitylayersjob.cpp b/src/render/jobs/updateentitylayersjob.cpp index 2c5e38364..b8c50c179 100644 --- a/src/render/jobs/updateentitylayersjob.cpp +++ b/src/render/jobs/updateentitylayersjob.cpp @@ -52,7 +52,7 @@ namespace Render { UpdateEntityLayersJob::UpdateEntityLayersJob() : m_manager(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateLayerEntity, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateLayerEntity, 0) } diff --git a/src/render/jobs/updatemeshtrianglelistjob.cpp b/src/render/jobs/updatemeshtrianglelistjob.cpp index 1c61d1c90..4837dcad6 100644 --- a/src/render/jobs/updatemeshtrianglelistjob.cpp +++ b/src/render/jobs/updatemeshtrianglelistjob.cpp @@ -60,7 +60,7 @@ namespace Render { UpdateMeshTriangleListJob::UpdateMeshTriangleListJob() : m_manager(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateMeshTriangleList, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateMeshTriangleList, 0) } UpdateMeshTriangleListJob::~UpdateMeshTriangleListJob() diff --git a/src/render/jobs/updateshaderdatatransformjob.cpp b/src/render/jobs/updateshaderdatatransformjob.cpp index c29a827e3..11fe91932 100644 --- a/src/render/jobs/updateshaderdatatransformjob.cpp +++ b/src/render/jobs/updateshaderdatatransformjob.cpp @@ -61,7 +61,7 @@ namespace Render { UpdateShaderDataTransformJob::UpdateShaderDataTransformJob() : m_manager(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateShaderDataTransform, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateShaderDataTransform, 0) } UpdateShaderDataTransformJob::~UpdateShaderDataTransformJob() diff --git a/src/render/jobs/updateskinningpalettejob.cpp b/src/render/jobs/updateskinningpalettejob.cpp index 0f5d3d6d6..b77707f15 100644 --- a/src/render/jobs/updateskinningpalettejob.cpp +++ b/src/render/jobs/updateskinningpalettejob.cpp @@ -50,7 +50,7 @@ UpdateSkinningPaletteJob::UpdateSkinningPaletteJob() , m_nodeManagers(nullptr) , m_root() { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateSkinningPalette, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateSkinningPalette, 0) } UpdateSkinningPaletteJob::~UpdateSkinningPaletteJob() diff --git a/src/render/jobs/updatetreeenabledjob.cpp b/src/render/jobs/updatetreeenabledjob.cpp index 5c6f2b378..22d6f6083 100644 --- a/src/render/jobs/updatetreeenabledjob.cpp +++ b/src/render/jobs/updatetreeenabledjob.cpp @@ -73,7 +73,7 @@ UpdateTreeEnabledJob::UpdateTreeEnabledJob() , m_node(nullptr) , m_manager(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateTreeEnabled, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateTreeEnabled, 0) } void UpdateTreeEnabledJob::setRoot(Entity *root) diff --git a/src/render/jobs/updateworldtransformjob.cpp b/src/render/jobs/updateworldtransformjob.cpp index d72c0a3a8..e3c8077f4 100644 --- a/src/render/jobs/updateworldtransformjob.cpp +++ b/src/render/jobs/updateworldtransformjob.cpp @@ -109,7 +109,7 @@ UpdateWorldTransformJob::UpdateWorldTransformJob() , m_node(nullptr) , m_manager(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateTransform, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateTransform, 0) } void UpdateWorldTransformJob::setRoot(Entity *root) diff --git a/src/render/renderers/opengl/jobs/filtercompatibletechniquejob.cpp b/src/render/renderers/opengl/jobs/filtercompatibletechniquejob.cpp index 342fd3dad..d2a01eef4 100644 --- a/src/render/renderers/opengl/jobs/filtercompatibletechniquejob.cpp +++ b/src/render/renderers/opengl/jobs/filtercompatibletechniquejob.cpp @@ -53,7 +53,7 @@ FilterCompatibleTechniqueJob::FilterCompatibleTechniqueJob() : m_manager(nullptr) , m_renderer(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::FilterCompatibleTechniques, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::FilterCompatibleTechniques, 0) } void FilterCompatibleTechniqueJob::setManager(TechniqueManager *manager) diff --git a/src/render/renderers/opengl/jobs/materialparametergathererjob.cpp b/src/render/renderers/opengl/jobs/materialparametergathererjob.cpp index 5e56e817f..e1f8aa403 100644 --- a/src/render/renderers/opengl/jobs/materialparametergathererjob.cpp +++ b/src/render/renderers/opengl/jobs/materialparametergathererjob.cpp @@ -63,7 +63,7 @@ MaterialParameterGathererJob::MaterialParameterGathererJob() , m_techniqueFilter(nullptr) , m_renderPassFilter(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::MaterialParameterGathering, materialParameterGathererCounter++); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::MaterialParameterGathering, materialParameterGathererCounter++) } // TechniqueFilter / RenderPassFilter diff --git a/src/render/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp b/src/render/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp index 6d6ae7853..5fc2395d3 100644 --- a/src/render/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp +++ b/src/render/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp @@ -60,7 +60,7 @@ RenderViewCommandUpdaterJob::RenderViewCommandUpdaterJob() , m_renderer(nullptr) , m_renderables(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::RenderCommandUpdater, renderViewInstanceCounter++); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::RenderCommandUpdater, renderViewInstanceCounter++) } void RenderViewCommandUpdaterJob::run() diff --git a/src/render/renderers/opengl/jobs/renderviewinitializerjob.cpp b/src/render/renderers/opengl/jobs/renderviewinitializerjob.cpp index 7bf55be40..f0f72803c 100644 --- a/src/render/renderers/opengl/jobs/renderviewinitializerjob.cpp +++ b/src/render/renderers/opengl/jobs/renderviewinitializerjob.cpp @@ -65,7 +65,7 @@ RenderViewInitializerJob::RenderViewInitializerJob() , m_index(0) , m_renderView(nullptr) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::RenderView, renderViewInstanceCounter++); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::RenderView, renderViewInstanceCounter++) } RenderViewInitializerJob::~RenderViewInitializerJob() diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp index 3ab5be6cc..df2517018 100644 --- a/src/render/renderers/opengl/renderer/renderer.cpp +++ b/src/render/renderers/opengl/renderer/renderer.cpp @@ -99,6 +99,8 @@ #include <Qt3DCore/private/qeventfilterservice_p.h> #include <Qt3DCore/private/qabstractaspectjobmanager_p.h> #include <Qt3DCore/private/qaspectmanager_p.h> +#include <Qt3DCore/private/qsysteminformationservice_p.h> +#include <Qt3DCore/private/qsysteminformationservice_p_p.h> #if QT_CONFIG(qt3d_profile_jobs) #include <Qt3DCore/private/aspectcommanddebugger_p.h> @@ -752,19 +754,12 @@ void Renderer::doRender(bool swapBuffers) // RenderQueue is complete (but that means it may be of size 0) if (canSubmit && (queueIsComplete && !queueIsEmpty)) { const QVector<Render::RenderView *> renderViews = m_renderQueue->nextFrameQueue(); - -#if QT_CONFIG(qt3d_profile_jobs) - // Save start of frame - JobRunStats submissionStatsPart1; - JobRunStats submissionStatsPart2; - submissionStatsPart1.jobId.typeAndInstance[0] = JobTypes::FrameSubmissionPart1; - submissionStatsPart1.jobId.typeAndInstance[1] = 0; - submissionStatsPart1.threadId = reinterpret_cast<quint64>(QThread::currentThreadId()); - submissionStatsPart1.startTime = QThreadPooler::m_jobsStatTimer.nsecsElapsed(); - submissionStatsPart2.jobId.typeAndInstance[0] = JobTypes::FrameSubmissionPart2; - submissionStatsPart2.jobId.typeAndInstance[1] = 0; - submissionStatsPart2.threadId = reinterpret_cast<quint64>(QThread::currentThreadId()); -#endif + QTaskLogger submissionStatsPart1(m_services->systemInformation(), + {JobTypes::FrameSubmissionPart1, 0}, + QTaskLogger::Submission); + QTaskLogger submissionStatsPart2(m_services->systemInformation(), + {JobTypes::FrameSubmissionPart2, 0}, + QTaskLogger::Submission); if (canRender()) { { // Scoped to destroy surfaceLock @@ -797,15 +792,11 @@ void Renderer::doRender(bool swapBuffers) m_vsyncFrameAdvanceService->proceedToNextFrame(); hasCleanedQueueAndProceeded = true; -#if QT_CONFIG(qt3d_profile_jobs) - if (preprocessingComplete) { - submissionStatsPart2.startTime = QThreadPooler::m_jobsStatTimer.nsecsElapsed(); - submissionStatsPart1.endTime = submissionStatsPart2.startTime; - } -#endif // Only try to submit the RenderViews if the preprocessing was successful // This part of the submission is happening in parallel to the RV building for the next frame if (preprocessingComplete) { + submissionStatsPart1.end(submissionStatsPart2.restart()); + // 3) Submit the render commands for frame n (making sure we never reference something that could be changing) // Render using current device state and renderer configuration submissionData = submitRenderViews(renderViews); @@ -823,25 +814,12 @@ void Renderer::doRender(bool swapBuffers) // Delete all the RenderViews which will clear the allocators // that were used for their allocation qDeleteAll(renderViews); - -#if QT_CONFIG(qt3d_profile_jobs) - if (preprocessingComplete) { - // Save submission elapsed time - submissionStatsPart2.endTime = QThreadPooler::m_jobsStatTimer.nsecsElapsed(); - // Note this is safe since proceedToNextFrame is the one going to trigger - // the write to the file, and this is performed after this step - Qt3DCore::QThreadPooler::addSubmissionLogStatsEntry(submissionStatsPart1); - Qt3DCore::QThreadPooler::addSubmissionLogStatsEntry(submissionStatsPart2); - Profiling::GLTimeRecorder::writeResults(); - } -#endif } // If hasCleanedQueueAndProceeded isn't true this implies that something went wrong // with the rendering and/or the renderqueue is incomplete from some reason // or alternatively it could be complete but empty (RenderQueue of size 0) - if (!hasCleanedQueueAndProceeded) { // RenderQueue was full but something bad happened when // trying to render it and therefore proceedToNextFrame was not called |