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/core/jobs/qthreadpooler.cpp | |
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/core/jobs/qthreadpooler.cpp')
-rw-r--r-- | src/core/jobs/qthreadpooler.cpp | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/src/core/jobs/qthreadpooler.cpp b/src/core/jobs/qthreadpooler.cpp index 3ab321542..f5c50062a 100644 --- a/src/core/jobs/qthreadpooler.cpp +++ b/src/core/jobs/qthreadpooler.cpp @@ -40,27 +40,10 @@ #include "qthreadpooler_p.h" #include <QtCore/QDebug> -#if QT_CONFIG(qt3d_profile_jobs) - -#ifdef Q_OS_ANDROID -#include <QtCore/QStandardPaths> -#endif - -#include <QtCore/QCoreApplication> -#include <QtCore/QFile> -#include <QtCore/QThreadStorage> -#include <QtCore/QDateTime> -#include <QtCore/QCoreApplication> -#endif - QT_BEGIN_NAMESPACE namespace Qt3DCore { -#if QT_CONFIG(qt3d_profile_jobs) -QElapsedTimer QThreadPooler::m_jobsStatTimer; -#endif - QThreadPooler::QThreadPooler(QObject *parent) : QObject(parent) , m_futureInterface(nullptr) @@ -76,12 +59,8 @@ QThreadPooler::QThreadPooler(QObject *parent) m_threadPool->setMaxThreadCount(maxThreadCountValue); } - // Ensures that threads will never be recycled m_threadPool->setExpiryTimeout(-1); -#if QT_CONFIG(qt3d_profile_jobs) - QThreadPooler::m_jobsStatTimer.start(); -#endif } QThreadPooler::~QThreadPooler() @@ -194,102 +173,6 @@ int QThreadPooler::maxThreadCount() const return m_threadPool->maxThreadCount(); } -#if QT_CONFIG(qt3d_profile_jobs) - -QThreadStorage<QVector<JobRunStats> *> jobStatsCached; - -QVector<QVector<JobRunStats> *> localStorages; -QVector<JobRunStats> *submissionStorage = nullptr; - -QMutex localStoragesMutex; - -// Called by the jobs -void QThreadPooler::addJobLogStatsEntry(JobRunStats &stats) -{ - if (!jobStatsCached.hasLocalData()) { - auto jobVector = new QVector<JobRunStats>; - jobStatsCached.setLocalData(jobVector); - QMutexLocker lock(&localStoragesMutex); - localStorages.push_back(jobVector); - } - jobStatsCached.localData()->push_back(stats); -} - -// Called after jobs have been executed (MainThread QAspectJobManager::enqueueJobs) -void QThreadPooler::writeFrameJobLogStats() -{ - static QScopedPointer<QFile> traceFile; - static quint32 frameId = 0; - if (!traceFile) { - const QString fileName = QStringLiteral("trace_") + QCoreApplication::applicationName() + QDateTime::currentDateTime().toString(QStringLiteral("_ddd_dd_MM_yy-hh_mm_ss_"))+ QSysInfo::productType() + QStringLiteral("_") + QSysInfo::buildAbi() + QStringLiteral(".qt3d"); -#ifdef Q_OS_ANDROID - traceFile.reset(new QFile(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + QStringLiteral("/") + fileName)); -#else - traceFile.reset(new QFile(fileName)); -#endif - if (!traceFile->open(QFile::WriteOnly|QFile::Truncate)) - qCritical("Failed to open trace file"); - } - - // Write Aspect + Job threads - { - FrameHeader header; - header.frameId = frameId; - header.jobCount = 0; - - for (const QVector<JobRunStats> *storage : qAsConst(localStorages)) - header.jobCount += storage->size(); - - traceFile->write(reinterpret_cast<char *>(&header), sizeof(FrameHeader)); - - for (QVector<JobRunStats> *storage : qAsConst(localStorages)) { - for (const JobRunStats &stat : *storage) - traceFile->write(reinterpret_cast<const char *>(&stat), sizeof(JobRunStats)); - storage->clear(); - } - } - - // Write submission thread - { - QMutexLocker lock(&localStoragesMutex); - const int submissionJobSize = submissionStorage != nullptr ? submissionStorage->size() : 0; - if (submissionJobSize > 0) { - FrameHeader header; - header.frameId = frameId; - header.jobCount = submissionJobSize; - header.frameType = FrameHeader::Submission; - - traceFile->write(reinterpret_cast<char *>(&header), sizeof(FrameHeader)); - - for (const JobRunStats &stat : *submissionStorage) - traceFile->write(reinterpret_cast<const char *>(&stat), sizeof(JobRunStats)); - submissionStorage->clear(); - } - } - - traceFile->flush(); - ++frameId; -} - -// Called from Submission thread (which can be main thread in Manual drive mode) -void QThreadPooler::addSubmissionLogStatsEntry(JobRunStats &stats) -{ - QMutexLocker lock(&localStoragesMutex); - if (!jobStatsCached.hasLocalData()) { - submissionStorage = new QVector<JobRunStats>; - jobStatsCached.setLocalData(submissionStorage); - } - - // Handle the case where submission thread is also the main thread (Scene/Manual drive modes with no RenderThread) - if (submissionStorage == nullptr && jobStatsCached.hasLocalData()) - submissionStorage = new QVector<JobRunStats>; - - // When having no submission thread this can be null - submissionStorage->push_back(stats); -} - -#endif - } // namespace Qt3DCore QT_END_NAMESPACE |