From 9db7beabdbaa0182cc9fd25603a790db293d56eb Mon Sep 17 00:00:00 2001 From: Sean Harmer Date: Tue, 9 Jun 2015 09:30:22 +0100 Subject: Make QAspectJobManager and base class private Prevents leaking of private headers and allows use of QT3DCORE_PRIVATE_EXPORT for use with the job manager unit test. Change-Id: I7f0c2b2e27e88eee6cb686f5ae55c78b73ea27d3 Reviewed-by: Paul Lemire --- src/core/aspects/qabstractaspect.cpp | 2 +- src/core/aspects/qaspectmanager.cpp | 4 +- src/core/jobs/jobs.pri | 2 - src/core/jobs/qabstractaspectjobmanager.cpp | 11 +---- src/core/jobs/qabstractaspectjobmanager.h | 73 --------------------------- src/core/jobs/qabstractaspectjobmanager_p.h | 23 ++++++--- src/core/jobs/qaspectjobmanager.cpp | 69 ++++++++------------------ src/core/jobs/qaspectjobmanager.h | 77 ----------------------------- src/core/jobs/qaspectjobmanager_p.h | 29 +++++++---- src/core/jobs/task_p.h | 2 +- src/core/qchangearbiter.cpp | 2 +- src/core/qscheduler.cpp | 2 +- src/render/backend/renderer.cpp | 2 +- 13 files changed, 65 insertions(+), 233 deletions(-) delete mode 100644 src/core/jobs/qabstractaspectjobmanager.h delete mode 100644 src/core/jobs/qaspectjobmanager.h (limited to 'src') diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp index 94e52c086..aae2100c0 100644 --- a/src/core/aspects/qabstractaspect.cpp +++ b/src/core/aspects/qabstractaspect.cpp @@ -38,7 +38,7 @@ #include "qentity.h" #include #include -#include +#include #include #include diff --git a/src/core/aspects/qaspectmanager.cpp b/src/core/aspects/qaspectmanager.cpp index f6ba2ab97..510ea1777 100644 --- a/src/core/aspects/qaspectmanager.cpp +++ b/src/core/aspects/qaspectmanager.cpp @@ -39,8 +39,8 @@ #include "qabstractaspect_p.h" #include "qchangearbiter_p.h" // TODO Make the kind of job manager configurable (e.g. ThreadWeaver vs Intel TBB) -#include "qaspectjobmanager.h" -#include "qabstractaspectjobmanager.h" +#include "qaspectjobmanager_p.h" +#include "qabstractaspectjobmanager_p.h" #include "qentity.h" #include diff --git a/src/core/jobs/jobs.pri b/src/core/jobs/jobs.pri index d21d21975..35de78e50 100644 --- a/src/core/jobs/jobs.pri +++ b/src/core/jobs/jobs.pri @@ -19,9 +19,7 @@ SOURCES += \ HEADERS += \ $$PWD/qaspectjob.h \ $$PWD/qaspectjob_p.h \ - $$PWD/qabstractaspectjobmanager.h \ $$PWD/qaspectjobproviderinterface.h \ - $$PWD/qaspectjobmanager.h \ $$PWD/qaspectjobmanager_p.h \ $$PWD/qabstractaspectjobmanager_p.h \ $$PWD/dependencyhandler_p.h \ diff --git a/src/core/jobs/qabstractaspectjobmanager.cpp b/src/core/jobs/qabstractaspectjobmanager.cpp index bfd9e1638..a3b768ae4 100644 --- a/src/core/jobs/qabstractaspectjobmanager.cpp +++ b/src/core/jobs/qabstractaspectjobmanager.cpp @@ -34,7 +34,6 @@ ** ****************************************************************************/ -#include "qabstractaspectjobmanager.h" #include "qabstractaspectjobmanager_p.h" QT_BEGIN_NAMESPACE @@ -42,17 +41,11 @@ QT_BEGIN_NAMESPACE namespace Qt3D { /*! - \class Qt3D::QAbstractAspectJobManagerPrivate + \class Qt3D::QAbstractAspectJobManager \internal */ QAbstractAspectJobManager::QAbstractAspectJobManager(QObject *parent) - : QObject(*new QAbstractAspectJobManagerPrivate, parent) -{ -} - -/*! \internal */ -QAbstractAspectJobManager::QAbstractAspectJobManager(QAbstractAspectJobManagerPrivate &dd, QObject *parent) - : QObject(dd, parent) + : QObject(parent) { } diff --git a/src/core/jobs/qabstractaspectjobmanager.h b/src/core/jobs/qabstractaspectjobmanager.h deleted file mode 100644 index 541210112..000000000 --- a/src/core/jobs/qabstractaspectjobmanager.h +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QT3D_QABSTRACTASPECTJOBMANAGER_H -#define QT3D_QABSTRACTASPECTJOBMANAGER_H - -#include - -#include - -QT_BEGIN_NAMESPACE - -namespace Qt3D { - -class QAbstractAspectJobManagerPrivate; - -class QAbstractAspectJobManager : public QObject -{ - Q_OBJECT -public: - explicit QAbstractAspectJobManager(QObject *p = 0); - - virtual void initialize() {} - virtual void enqueueJobs(const QVector &jobQueue) = 0; - virtual void waitForAllJobs() = 0; - - // Callback signature for running SynchronizedJobs - typedef void (*JobFunction)(void *); - virtual void waitForPerThreadFunction(JobFunction func, void *arg) = 0; - -protected: - QAbstractAspectJobManager(QAbstractAspectJobManagerPrivate &dd, QObject *parent); - Q_DECLARE_PRIVATE(QAbstractAspectJobManager) -}; - -} // namespace Qt3D - -QT_END_NAMESPACE - -#endif // QT3D_QABSTRACTASPECTJOBMANAGER_H diff --git a/src/core/jobs/qabstractaspectjobmanager_p.h b/src/core/jobs/qabstractaspectjobmanager_p.h index 2ac2d9bcc..29f863ae0 100644 --- a/src/core/jobs/qabstractaspectjobmanager_p.h +++ b/src/core/jobs/qabstractaspectjobmanager_p.h @@ -37,23 +37,30 @@ #ifndef QABSTRACTASPECTJOBMANAGER_P_H #define QABSTRACTASPECTJOBMANAGER_P_H -#include +#include + +#include QT_BEGIN_NAMESPACE namespace Qt3D { -class QAbstractAspectJobManager; - -class QAbstractAspectJobManagerPrivate : public QObjectPrivate +class QAbstractAspectJobManager : public QObject { + Q_OBJECT public: - QAbstractAspectJobManagerPrivate() - : QObjectPrivate() - {} + explicit QAbstractAspectJobManager(QObject *p = 0); + + virtual void initialize() {} + virtual void enqueueJobs(const QVector &jobQueue) = 0; + virtual void waitForAllJobs() = 0; + + // Callback signature for running SynchronizedJobs + typedef void (*JobFunction)(void *); + virtual void waitForPerThreadFunction(JobFunction func, void *arg) = 0; }; -} // Qt3D +} // namespace Qt3D QT_END_NAMESPACE diff --git a/src/core/jobs/qaspectjobmanager.cpp b/src/core/jobs/qaspectjobmanager.cpp index 1488eed21..7fedc2ea8 100644 --- a/src/core/jobs/qaspectjobmanager.cpp +++ b/src/core/jobs/qaspectjobmanager.cpp @@ -42,9 +42,9 @@ #include "weaverjob_p.h" #endif -#include "qaspectjobmanager.h" #include "qaspectjobmanager_p.h" #include "task_p.h" +#include "qthreadpooler_p.h" #include "dependencyhandler_p.h" #include @@ -102,49 +102,27 @@ void SynchronizedJob::run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread *t #endif /*! - \class Qt3D::QAspectJobManagerPrivate + \class Qt3D::QAspectJobManager \internal */ -QAspectJobManagerPrivate::QAspectJobManagerPrivate() - : QAbstractAspectJobManagerPrivate() +QAspectJobManager::QAspectJobManager(QObject *parent) + : QAbstractAspectJobManager(parent) #ifdef THREAD_WEAVER , m_weaver(Q_NULLPTR) #endif + , m_threadPooler(new QThreadPooler(this)) + , m_dependencyHandler(new DependencyHandler) { -} - -QAspectJobManagerPrivate::~QAspectJobManagerPrivate() -{ - delete m_dependencyHandler; -} - -QAspectJobManager::QAspectJobManager(QObject *parent) - : QAbstractAspectJobManager(*new QAspectJobManagerPrivate, parent) -{ - Q_D(QAspectJobManager); #ifdef THREAD_WEAVER - d->m_weaver = new ThreadWeaver::Queue(this); - d->m_weaver->setMaximumNumberOfThreads(QThread::idealThreadCount()); + m_weaver = new ThreadWeaver::Queue(this); + m_weaver->setMaximumNumberOfThreads(QThread::idealThreadCount()); #else - d->m_threadPooler = new QThreadPooler(this); - d->m_dependencyHandler = new DependencyHandler(); - d->m_threadPooler->setDependencyHandler(d->m_dependencyHandler); + m_threadPooler->setDependencyHandler(m_dependencyHandler.data()); #endif } -/*! \internal */ -QAspectJobManager::QAspectJobManager(QAspectJobManagerPrivate &dd, QObject *parent) - : QAbstractAspectJobManager(dd, parent) +QAspectJobManager::~QAspectJobManager() { - Q_D(QAspectJobManager); -#ifdef THREAD_WEAVER - d->m_weaver = new ThreadWeaver::Queue(this); - d->m_weaver->setMaximumNumberOfThreads(QThread::idealThreadCount()); -#else - d->m_threadPooler = new QThreadPooler(this); - d->m_dependencyHandler = new DependencyHandler(); - d->m_threadPooler->setDependencyHandler(d->m_dependencyHandler); -#endif } void QAspectJobManager::initialize() @@ -153,8 +131,6 @@ void QAspectJobManager::initialize() void QAspectJobManager::enqueueJobs(const QVector &jobQueue) { - Q_D(QAspectJobManager); - #ifdef THREAD_WEAVER // Convert QJobs to ThreadWeaver::Jobs QHash > jobsMap; @@ -181,7 +157,7 @@ void QAspectJobManager::enqueueJobs(const QVector &jobQueue) Q_FOREACH (const QAspectJobPtr &job, jobQueue) { QSharedPointer weaverJob = jobsMap.value(job.data()); - d->m_weaver->enqueue(weaverJob); + m_weaver->enqueue(weaverJob); } #else // Convert QJobs to Tasks @@ -207,43 +183,40 @@ void QAspectJobManager::enqueueJobs(const QVector &jobQueue) if (taskDependee) { AspectTaskRunnable *taskDepender = tasksMap.value(job.data()); dependencyList.append(Dependency(taskDepender, taskDependee)); - taskDepender->setDependencyHandler(d->m_dependencyHandler); - taskDependee->setDependencyHandler(d->m_dependencyHandler); + taskDepender->setDependencyHandler(m_dependencyHandler.data()); + taskDependee->setDependencyHandler(m_dependencyHandler.data()); } } } - d->m_dependencyHandler->addDependencies(qMove(dependencyList)); + m_dependencyHandler->addDependencies(qMove(dependencyList)); - d->m_threadPooler->mapDependables(taskList); + m_threadPooler->mapDependables(taskList); #endif } void QAspectJobManager::waitForAllJobs() { - Q_D(QAspectJobManager); #ifdef THREAD_WEAVER - d->m_weaver->finish(); + m_weaver->finish(); #else QFutureWatcher futureWatcher; - futureWatcher.setFuture(d->m_threadPooler->future()); + futureWatcher.setFuture(m_threadPooler->future()); futureWatcher.waitForFinished(); #endif } void QAspectJobManager::waitForPerThreadFunction(JobFunction func, void *arg) { - Q_D(QAspectJobManager); - #ifdef THREAD_WEAVER - const int threadCount = d->m_weaver->maximumNumberOfThreads(); + const int threadCount = m_weaver->maximumNumberOfThreads(); QAtomicInt atomicCount(threadCount); for (int i = 0; i < threadCount; ++i) { SynchronizedJobPtr syncJob(new SynchronizedJob(func, arg, &atomicCount)); - d->m_weaver->enqueue(syncJob); + m_weaver->enqueue(syncJob); } - d->m_weaver->finish(); + m_weaver->finish(); #else const int threadCount = QThread::idealThreadCount(); QAtomicInt atomicCount(threadCount); @@ -254,7 +227,7 @@ void QAspectJobManager::waitForPerThreadFunction(JobFunction func, void *arg) taskList << syncTask; } - QFuture future = d->m_threadPooler->mapDependables(taskList); + QFuture future = m_threadPooler->mapDependables(taskList); QFutureWatcher futureWatcher; futureWatcher.setFuture(future); futureWatcher.waitForFinished(); diff --git a/src/core/jobs/qaspectjobmanager.h b/src/core/jobs/qaspectjobmanager.h deleted file mode 100644 index d2436d29c..000000000 --- a/src/core/jobs/qaspectjobmanager.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QT3D_QASPECTJOBMANAGER_H -#define QT3D_QASPECTJOBMANAGER_H - -#include -#include -#include - -#include - -#include - -QT_BEGIN_NAMESPACE - -namespace Qt3D { - -class QAspectJobManagerPrivate; - -class QT3DCORE_PRIVATE_EXPORT QAspectJobManager : public QAbstractAspectJobManager -{ - Q_OBJECT -public: - explicit QAspectJobManager(QObject *parent = 0); - - void initialize() Q_DECL_OVERRIDE; - - void enqueueJobs(const QVector &jobQueue) Q_DECL_OVERRIDE; - - void waitForAllJobs() Q_DECL_OVERRIDE; - - void waitForPerThreadFunction(JobFunction func, void *arg) Q_DECL_OVERRIDE; - -protected: - QAspectJobManager(QAspectJobManagerPrivate &dd, QObject *parent); - Q_DECLARE_PRIVATE(QAspectJobManager) -}; - -} // namespace Qt3D - -QT_END_NAMESPACE - -#endif // QT3D_QASPECTJOBMANAGER_H diff --git a/src/core/jobs/qaspectjobmanager_p.h b/src/core/jobs/qaspectjobmanager_p.h index 4d6e1feb3..1264bb52b 100644 --- a/src/core/jobs/qaspectjobmanager_p.h +++ b/src/core/jobs/qaspectjobmanager_p.h @@ -38,9 +38,11 @@ #define QT3D_QASPECTJOBMANAGER_P_H #include +#include -#include "qthreadpooler_p.h" -#include "dependencyhandler_p.h" +#include + +#include #ifdef THREAD_WEAVER namespace ThreadWeaver { @@ -52,26 +54,35 @@ QT_BEGIN_NAMESPACE namespace Qt3D { -class QAspectJobManager; +class QThreadPooler; +class DependencyHandler; -class QAspectJobManagerPrivate : public QAbstractAspectJobManagerPrivate +class QT3DCORE_PRIVATE_EXPORT QAspectJobManager : public QAbstractAspectJobManager { + Q_OBJECT public: - QAspectJobManagerPrivate(); - ~QAspectJobManagerPrivate(); + explicit QAspectJobManager(QObject *parent = 0); + ~QAspectJobManager(); + + void initialize() Q_DECL_OVERRIDE; + + void enqueueJobs(const QVector &jobQueue) Q_DECL_OVERRIDE; + + void waitForAllJobs() Q_DECL_OVERRIDE; - Q_DECLARE_PUBLIC(QAspectJobManager) + void waitForPerThreadFunction(JobFunction func, void *arg) Q_DECL_OVERRIDE; +private: #ifdef THREAD_WEAVER // Owned by QAspectJobManager via QObject parent-child ThreadWeaver::Queue *m_weaver; #endif QThreadPooler *m_threadPooler; - DependencyHandler *m_dependencyHandler; + QScopedPointer m_dependencyHandler; }; -} // Qt3D +} // namespace Qt3D QT_END_NAMESPACE diff --git a/src/core/jobs/task_p.h b/src/core/jobs/task_p.h index ea8547303..11f1fb8c6 100644 --- a/src/core/jobs/task_p.h +++ b/src/core/jobs/task_p.h @@ -37,7 +37,7 @@ #ifndef QT3D_TASK_P_H #define QT3D_TASK_P_H -#include "qaspectjobmanager.h" +#include "qaspectjobmanager_p.h" #include #include diff --git a/src/core/qchangearbiter.cpp b/src/core/qchangearbiter.cpp index 7c7dafd0f..886b74036 100644 --- a/src/core/qchangearbiter.cpp +++ b/src/core/qchangearbiter.cpp @@ -36,7 +36,7 @@ #include "qchangearbiter_p.h" #include "qcomponent.h" -#include "qabstractaspectjobmanager.h" +#include "qabstractaspectjobmanager_p.h" #include "qsceneobserverinterface.h" #include "qsceneinterface.h" diff --git a/src/core/qscheduler.cpp b/src/core/qscheduler.cpp index 395c8083e..92c601153 100644 --- a/src/core/qscheduler.cpp +++ b/src/core/qscheduler.cpp @@ -38,7 +38,7 @@ #include "qabstractaspect.h" #include "qaspectmanager_p.h" -#include "qabstractaspectjobmanager.h" +#include "qabstractaspectjobmanager_p.h" QT_BEGIN_NAMESPACE diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index 78805c47e..7a889910c 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -77,7 +77,7 @@ #include #include -#include +#include #include #include -- cgit v1.2.3