diff options
Diffstat (limited to 'src/core/services/qsysteminformationservice_p_p.h')
-rw-r--r-- | src/core/services/qsysteminformationservice_p_p.h | 87 |
1 files changed, 82 insertions, 5 deletions
diff --git a/src/core/services/qsysteminformationservice_p_p.h b/src/core/services/qsysteminformationservice_p_p.h index e3ce9fe49..222f4e1af 100644 --- a/src/core/services/qsysteminformationservice_p_p.h +++ b/src/core/services/qsysteminformationservice_p_p.h @@ -51,21 +51,98 @@ // We mean it. // -#include <Qt3DCore/qt3dcore_global.h> +#include <QtCore/QThreadStorage> +#include <QtCore/QElapsedTimer> +#include <QtCore/QFile> +#include <QtCore/QMutex> +#include <Qt3DCore/qt3dcore_global.h> +#include <Qt3DCore/private/qt3dcore_global_p.h> #include <Qt3DCore/private/qabstractserviceprovider_p.h> #include <Qt3DCore/private/qservicelocator_p.h> +#include <Qt3DCore/private/qsysteminformationservice_p.h> QT_BEGIN_NAMESPACE namespace Qt3DCore { -class QSystemInformationServicePrivate : public QAbstractServiceProviderPrivate +namespace Debug { +class AspectCommandDebugger; +} // Debug + +union Q_3DCORE_PRIVATE_EXPORT JobId +{ + JobId() : id(0L) { } + JobId(quint32 t, quint32 i) { typeAndInstance[0] = t; typeAndInstance[1] = i; } + + quint32 typeAndInstance[2]; + quint64 id; +}; + +class Q_3DCORE_PRIVATE_EXPORT QSystemInformationServicePrivate : public QAbstractServiceProviderPrivate { public: - QSystemInformationServicePrivate(const QString &description) - : QAbstractServiceProviderPrivate(QServiceLocator::SystemInformation, description) - {} + struct JobRunStats + { + JobRunStats() { jobId.id = 0; startTime = 0L; endTime = 0L; } + + qint64 startTime; + qint64 endTime; + JobId jobId; // QAspectJob subclasses should properly populate the jobId + quint64 threadId; + }; + + QSystemInformationServicePrivate(QAspectEngine *aspectEngine, const QString &description); + ~QSystemInformationServicePrivate(); + + static QSystemInformationServicePrivate *get(QSystemInformationService *q); + + // Aspects + Job threads + void addJobLogStatsEntry(JobRunStats &stats); + + // Submission thread + void addSubmissionLogStatsEntry(JobRunStats &stats); + + void writeFrameJobLogStats(); + + QAspectEngine *m_aspectEngine; + bool m_traceEnabled; + + QElapsedTimer m_jobsStatTimer; + QThreadStorage<QVector<JobRunStats> *> m_jobStatsCached; + + QVector<QVector<JobRunStats> *> m_localStorages; + QVector<JobRunStats> *m_submissionStorage; + + QMutex m_localStoragesMutex; + + QScopedPointer<QFile> m_traceFile; + quint32 m_frameId; + + Debug::AspectCommandDebugger *m_commandDebugger; + + Q_DECLARE_PUBLIC(QSystemInformationService) +}; + +class Q_3DCORE_PRIVATE_EXPORT QTaskLogger { +public: + enum Type { + AspectJob, + Submission + }; + + QTaskLogger(QSystemInformationService *service, const JobId &jobId, Type type); + QTaskLogger(QSystemInformationService *service, const quint32 jobType, const quint32 instance, Type type = Submission); + + ~QTaskLogger(); + + void end(qint64 t = 0L); + qint64 restart(); + +private: + QSystemInformationService *m_service; + QSystemInformationServicePrivate::JobRunStats m_stats; + Type m_type; }; } |