diff options
Diffstat (limited to 'src/core/aspects')
-rw-r--r-- | src/core/aspects/aspectcommanddebugger.cpp | 12 | ||||
-rw-r--r-- | src/core/aspects/aspectcommanddebugger_p.h | 4 | ||||
-rw-r--r-- | src/core/aspects/aspects.pri | 13 | ||||
-rw-r--r-- | src/core/aspects/qabstractaspect.cpp | 39 | ||||
-rw-r--r-- | src/core/aspects/qabstractaspect.h | 15 | ||||
-rw-r--r-- | src/core/aspects/qabstractaspect_p.h | 20 | ||||
-rw-r--r-- | src/core/aspects/qaspectengine.cpp | 41 | ||||
-rw-r--r-- | src/core/aspects/qaspectengine.h | 5 | ||||
-rw-r--r-- | src/core/aspects/qaspectengine_p.h | 6 | ||||
-rw-r--r-- | src/core/aspects/qaspectfactory.cpp | 6 | ||||
-rw-r--r-- | src/core/aspects/qaspectfactory_p.h | 4 | ||||
-rw-r--r-- | src/core/aspects/qaspectmanager.cpp | 32 | ||||
-rw-r--r-- | src/core/aspects/qaspectmanager_p.h | 11 | ||||
-rw-r--r-- | src/core/aspects/qaspectthread.cpp | 5 | ||||
-rw-r--r-- | src/core/aspects/qaspectthread_p.h | 4 |
15 files changed, 130 insertions, 87 deletions
diff --git a/src/core/aspects/aspectcommanddebugger.cpp b/src/core/aspects/aspectcommanddebugger.cpp index 6bb93c827..eceec1bbd 100644 --- a/src/core/aspects/aspectcommanddebugger.cpp +++ b/src/core/aspects/aspectcommanddebugger.cpp @@ -37,14 +37,14 @@ ** ****************************************************************************/ -#ifdef QT3D_JOBS_RUN_STATS - #include "aspectcommanddebugger_p.h" + #include <Qt3DCore/qaspectengine.h> +#include <QtNetwork/QTcpSocket> +#include <QtCore/QJsonDocument> +#include <QtCore/QJsonObject> + #include <Qt3DCore/private/qabstractaspect_p.h> -#include <QTcpSocket> -#include <QJsonDocument> -#include <QJsonObject> QT_BEGIN_NAMESPACE @@ -216,5 +216,3 @@ void AspectCommandDebugger::executeCommand(const QString &command, } // Qt3DCore QT_END_NAMESPACE - -#endif diff --git a/src/core/aspects/aspectcommanddebugger_p.h b/src/core/aspects/aspectcommanddebugger_p.h index b173a5c09..bb6100df5 100644 --- a/src/core/aspects/aspectcommanddebugger_p.h +++ b/src/core/aspects/aspectcommanddebugger_p.h @@ -37,7 +37,7 @@ ** ****************************************************************************/ -#ifdef QT3D_JOBS_RUN_STATS +#include <Qt3DCore/qt3dcore-config.h> #ifndef QT3DCORE_DEBUG_ASPECTCOMMANDDEBUGGER_H #define QT3DCORE_DEBUG_ASPECTCOMMANDDEBUGGER_H @@ -108,5 +108,3 @@ private: QT_END_NAMESPACE #endif // QT3DCORE_DEBUG_ASPECTCOMMANDDEBUGGER_H - -#endif // QT3D_JOBS_RUN_STATS diff --git a/src/core/aspects/aspects.pri b/src/core/aspects/aspects.pri index 773c736a3..54d939138 100644 --- a/src/core/aspects/aspects.pri +++ b/src/core/aspects/aspects.pri @@ -5,8 +5,7 @@ SOURCES += \ $$PWD/qaspectengine.cpp \ $$PWD/qaspectfactory.cpp \ $$PWD/qaspectmanager.cpp \ - $$PWD/qaspectthread.cpp \ - $$PWD/aspectcommanddebugger.cpp + $$PWD/qaspectthread.cpp HEADERS += \ $$PWD/qabstractaspect.h \ @@ -15,7 +14,13 @@ HEADERS += \ $$PWD/qaspectengine_p.h \ $$PWD/qaspectfactory_p.h \ $$PWD/qaspectmanager_p.h \ - $$PWD/qaspectthread_p.h \ - $$PWD/aspectcommanddebugger_p.h + $$PWD/qaspectthread_p.h INCLUDEPATH += $$PWD + +include($$OUT_PWD/../core/qt3dcore-config.pri) +QT_FOR_CONFIG += 3dcore-private +qtConfig(qt3d-profile-jobs): { + HEADERS += $$PWD/aspectcommanddebugger_p.h + SOURCES += $$PWD/aspectcommanddebugger.cpp +} diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp index c049d3503..d7e62db68 100644 --- a/src/core/aspects/qabstractaspect.cpp +++ b/src/core/aspects/qabstractaspect.cpp @@ -38,15 +38,17 @@ ****************************************************************************/ #include "qabstractaspect.h" -#include "qentity.h" -#include <Qt3DCore/private/qaspectmanager_p.h> -#include <private/qabstractaspect_p.h> -#include <Qt3DCore/private/qaspectjobmanager_p.h> -#include <private/qchangearbiter_p.h> -#include <Qt3DCore/private/qscene_p.h> -#include <Qt3DCore/private/qnodevisitor_p.h> +#include "qabstractaspect_p.h" + +#include <Qt3DCore/qentity.h> #include <Qt3DCore/qpropertyupdatedchange.h> + #include <Qt3DCore/private/corelogging_p.h> +#include <Qt3DCore/private/qaspectjobmanager_p.h> +#include <Qt3DCore/private/qaspectmanager_p.h> +#include <Qt3DCore/private/qchangearbiter_p.h> +#include <Qt3DCore/private/qnodevisitor_p.h> +#include <Qt3DCore/private/qscene_p.h> QT_BEGIN_NAMESPACE @@ -157,6 +159,12 @@ void QAbstractAspect::registerBackendType(const QMetaObject &obj, const QBackend d->m_backendCreatorFunctors.insert(&obj, functor); } +void QAbstractAspect::unregisterBackendType(const QMetaObject &obj) +{ + Q_D(QAbstractAspect); + d->m_backendCreatorFunctors.remove(&obj); +} + void QAbstractAspectPrivate::sceneNodeAdded(QSceneChangePtr &change) { QNodeCreatedChangeBasePtr creationChange = qSharedPointerCast<QNodeCreatedChangeBase>(change); @@ -282,7 +290,15 @@ QAbstractAspectJobManager *QAbstractAspectPrivate::jobManager() const QVector<QAspectJobPtr> QAbstractAspectPrivate::jobsToExecute(qint64 time) { Q_Q(QAbstractAspect); - return q->jobsToExecute(time); + auto res = q->jobsToExecute(time); + + { + QMutexLocker lock(&m_singleShotMutex); + res << m_singleShotJobs; + m_singleShotJobs.clear(); + } + + return res; } /*! @@ -324,6 +340,13 @@ void QAbstractAspect::onEngineShutdown() { } +void QAbstractAspect::scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job) +{ + Q_D(QAbstractAspect); + QMutexLocker lock(&d->m_singleShotMutex); + d->m_singleShotJobs.push_back(job); +} + namespace Debug { AsynchronousCommandReply::AsynchronousCommandReply(const QString &commandName, QObject *parent) diff --git a/src/core/aspects/qabstractaspect.h b/src/core/aspects/qabstractaspect.h index 86938d2d2..8ac1b251f 100644 --- a/src/core/aspects/qabstractaspect.h +++ b/src/core/aspects/qabstractaspect.h @@ -40,10 +40,10 @@ #ifndef QT3DCORE_QABSTRACTASPECT_H #define QT3DCORE_QABSTRACTASPECT_H -#include <QObject> -#include <QSharedPointer> #include <Qt3DCore/qt3dcore_global.h> #include <Qt3DCore/qnodeid.h> +#include <QtCore/QObject> +#include <QtCore/QSharedPointer> QT_BEGIN_NAMESPACE @@ -68,6 +68,8 @@ public: explicit QAbstractAspect(QObject *parent = nullptr); ~QAbstractAspect(); + void scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job); + protected: explicit QAbstractAspect(QAbstractAspectPrivate &dd, QObject *parent = nullptr); @@ -76,6 +78,9 @@ protected: template<class Frontend> void registerBackendType(const QBackendNodeMapperPtr &functor); void registerBackendType(const QMetaObject &, const QBackendNodeMapperPtr &functor); + template<class Frontend> + void unregisterBackendType(); + void unregisterBackendType(const QMetaObject &); private: virtual QVariant executeCommand(const QStringList &args); @@ -99,6 +104,12 @@ void QAbstractAspect::registerBackendType(const QBackendNodeMapperPtr &functor) registerBackendType(Frontend::staticMetaObject, functor); } +template<class Frontend> +void QAbstractAspect::unregisterBackendType() +{ + unregisterBackendType(Frontend::staticMetaObject); +} + } // namespace Qt3DCore QT_END_NAMESPACE diff --git a/src/core/aspects/qabstractaspect_p.h b/src/core/aspects/qabstractaspect_p.h index 53b01cc40..a6c47c494 100644 --- a/src/core/aspects/qabstractaspect_p.h +++ b/src/core/aspects/qabstractaspect_p.h @@ -51,14 +51,18 @@ // We mean it. // -#include <private/qobject_p.h> -#include <private/qaspectjobproviderinterface_p.h> -#include <private/qbackendnode_p.h> -#include <private/qbackendnodefactory_p.h> -#include <private/qsceneobserverinterface_p.h> -#include <private/qt3dcore_global_p.h> -#include <Qt3DCore/qnodedestroyedchange.h> #include <Qt3DCore/qabstractaspect.h> +#include <Qt3DCore/qnodedestroyedchange.h> + +#include <Qt3DCore/private/qaspectjobproviderinterface_p.h> +#include <Qt3DCore/private/qbackendnode_p.h> +#include <Qt3DCore/private/qbackendnodefactory_p.h> +#include <Qt3DCore/private/qsceneobserverinterface_p.h> +#include <Qt3DCore/private/qt3dcore_global_p.h> +#include <QtCore/private/qobject_p.h> + +#include <QMutex> +#include <QVector> QT_BEGIN_NAMESPACE @@ -136,6 +140,8 @@ public: QAbstractAspectJobManager *m_jobManager; QChangeArbiter *m_arbiter; QHash<const QMetaObject*, QBackendNodeMapperPtr> m_backendCreatorFunctors; + QMutex m_singleShotMutex; + QVector<QAspectJobPtr> m_singleShotJobs; static QAbstractAspectPrivate *get(QAbstractAspect *aspect); }; diff --git a/src/core/aspects/qaspectengine.cpp b/src/core/aspects/qaspectengine.cpp index 15f975332..b9c9d2283 100644 --- a/src/core/aspects/qaspectengine.cpp +++ b/src/core/aspects/qaspectengine.cpp @@ -38,27 +38,30 @@ ****************************************************************************/ #include "qaspectengine.h" +#include "qaspectengine_p.h" + +#include <Qt3DCore/qabstractaspect.h> +#include <Qt3DCore/qcomponent.h> +#include <Qt3DCore/qentity.h> +#include <Qt3DCore/qnode.h> +#include <QtCore/QMetaObject> -#include "qabstractaspect.h" -#include "qaspectthread_p.h" -#include "qaspectmanager_p.h" -#include "qchangearbiter_p.h" -#include "qabstractaspect.h" -#include "qnode.h" #include <Qt3DCore/private/corelogging_p.h> -#include <QMetaObject> -#include <private/qpostman_p.h> -#include <private/qscene_p.h> -#include <private/qaspectengine_p.h> -#include <private/qnode_p.h> -#include <private/qnodevisitor_p.h> -#include <private/qscene_p.h> -#include "qentity.h" -#include "qcomponent.h" +#include <Qt3DCore/private/qaspectthread_p.h> +#include <Qt3DCore/private/qaspectmanager_p.h> +#include <Qt3DCore/private/qchangearbiter_p.h> #include <Qt3DCore/private/qeventfilterservice_p.h> +#include <Qt3DCore/private/qnode_p.h> +#include <Qt3DCore/private/qnodevisitor_p.h> #include <Qt3DCore/private/qnodecreatedchangegenerator_p.h> +#include <Qt3DCore/private/qpostman_p.h> +#include <Qt3DCore/private/qscene_p.h> #include <Qt3DCore/private/qservicelocator_p.h> +#include <Qt3DCore/qt3dcore-config.h> + +#if defined(QT3D_JOBS_RUN_STATS) #include <Qt3DCore/private/aspectcommanddebugger_p.h> +#endif QT_BEGIN_NAMESPACE @@ -100,8 +103,8 @@ QAspectEnginePrivate::~QAspectEnginePrivate() */ void QAspectEnginePrivate::initNode(QNode *node) { - QNodePrivate::get(node)->setScene(m_scene); m_scene->addObservable(node); + QNodePrivate::get(node)->setScene(m_scene); } void QAspectEnginePrivate::initEntity(QEntity *entity) @@ -177,10 +180,6 @@ void QAspectEnginePrivate::generateCreationChanges(QNode *root) QAspectEngine::QAspectEngine(QObject *parent) : QObject(*new QAspectEnginePrivate, parent) { - // Don't show any debug output from Qt3D. If you need to enable additional logging - // for debugging use a rules file as explained in the QLoggingCategory documentation. - QLoggingCategory::setFilterRules(QString::fromUtf8("Qt3D.*.debug=false\n")); - qCDebug(Aspects) << Q_FUNC_INFO; Q_D(QAspectEngine); d->m_scene = new QScene(this); @@ -218,6 +217,8 @@ QAspectEngine::~QAspectEngine() void QAspectEnginePrivate::initNodeTree(QNode *node) { + // Set the root entity on the scene + m_scene->setRootNode(node); QNodeVisitor visitor; visitor.traverse(node, this, &QAspectEnginePrivate::initNode, &QAspectEnginePrivate::initEntity); } diff --git a/src/core/aspects/qaspectengine.h b/src/core/aspects/qaspectengine.h index 6de5df42c..28b15046b 100644 --- a/src/core/aspects/qaspectengine.h +++ b/src/core/aspects/qaspectengine.h @@ -40,10 +40,9 @@ #ifndef QT3DCORE_QASPECTENGINE_H #define QT3DCORE_QASPECTENGINE_H -#include <QObject> -#include <QVector> - #include <Qt3DCore/qt3dcore_global.h> +#include <QtCore/QObject> +#include <QtCore/QVector> QT_BEGIN_NAMESPACE diff --git a/src/core/aspects/qaspectengine_p.h b/src/core/aspects/qaspectengine_p.h index 10b3536df..a7311d054 100644 --- a/src/core/aspects/qaspectengine_p.h +++ b/src/core/aspects/qaspectengine_p.h @@ -51,11 +51,13 @@ // We mean it. // -#include <private/qobject_p.h> +#include <Qt3DCore/qt3dcore-config.h> #include <Qt3DCore/qnodecreatedchange.h> -#include <Qt3DCore/private/qaspectfactory_p.h> #include <QtCore/qsharedpointer.h> +#include <Qt3DCore/private/qaspectfactory_p.h> +#include <QtCore/private/qobject_p.h> + QT_BEGIN_NAMESPACE namespace Qt3DCore { diff --git a/src/core/aspects/qaspectfactory.cpp b/src/core/aspects/qaspectfactory.cpp index 3135e1653..94e04b34d 100644 --- a/src/core/aspects/qaspectfactory.cpp +++ b/src/core/aspects/qaspectfactory.cpp @@ -39,11 +39,9 @@ #include "qaspectfactory_p.h" -#include <QtGlobal> - -#include <QDebug> - #include <Qt3DCore/QAbstractAspect> +#include <QtCore/QDebug> +#include <QtCore/QtGlobal> QT_BEGIN_NAMESPACE diff --git a/src/core/aspects/qaspectfactory_p.h b/src/core/aspects/qaspectfactory_p.h index 9e2bedaaa..67b5e0b9d 100644 --- a/src/core/aspects/qaspectfactory_p.h +++ b/src/core/aspects/qaspectfactory_p.h @@ -51,8 +51,8 @@ // We mean it. // -#include <QHash> -#include <QStringList> +#include <QtCore/QHash> +#include <QtCore/QStringList> #include <Qt3DCore/private/qt3dcore_global_p.h> diff --git a/src/core/aspects/qaspectmanager.cpp b/src/core/aspects/qaspectmanager.cpp index 98fb982df..5ccc89b9e 100644 --- a/src/core/aspects/qaspectmanager.cpp +++ b/src/core/aspects/qaspectmanager.cpp @@ -38,27 +38,27 @@ ****************************************************************************/ #include "qaspectmanager_p.h" -#include "qabstractaspect.h" -#include "qabstractaspect_p.h" -#include "qchangearbiter_p.h" -// TODO Make the kind of job manager configurable (e.g. ThreadWeaver vs Intel TBB) -#include "qaspectjobmanager_p.h" -#include "qabstractaspectjobmanager_p.h" -#include "qentity.h" -#include <Qt3DCore/private/qservicelocator_p.h> +#include <Qt3DCore/qabstractaspect.h> +#include <Qt3DCore/qentity.h> +#include <QtCore/QEventLoop> +#include <QtCore/QThread> +#include <QtCore/QWaitCondition> +#include <QtGui/QSurface> -#include <Qt3DCore/private/qaspectjob_p.h> -#include <Qt3DCore/private/qthreadpooler_p.h> -#include <Qt3DCore/private/qtickclockservice_p.h> #include <Qt3DCore/private/corelogging_p.h> +#include <Qt3DCore/private/qabstractaspect_p.h> +#include <Qt3DCore/private/qabstractaspectjobmanager_p.h> +#include <Qt3DCore/private/qabstractframeadvanceservice_p.h> +// TODO Make the kind of job manager configurable (e.g. ThreadWeaver vs Intel TBB) +#include <Qt3DCore/private/qaspectjobmanager_p.h> +#include <Qt3DCore/private/qaspectjob_p.h> +#include <Qt3DCore/private/qchangearbiter_p.h> #include <Qt3DCore/private/qscheduler_p.h> +#include <Qt3DCore/private/qservicelocator_p.h> +#include <Qt3DCore/private/qthreadpooler_p.h> #include <Qt3DCore/private/qtickclock_p.h> -#include <Qt3DCore/private/qabstractframeadvanceservice_p.h> -#include <QEventLoop> -#include <QThread> -#include <QWaitCondition> -#include <QSurface> +#include <Qt3DCore/private/qtickclockservice_p.h> #if defined(QT3D_CORE_JOB_TIMING) #include <QElapsedTimer> diff --git a/src/core/aspects/qaspectmanager_p.h b/src/core/aspects/qaspectmanager_p.h index e4795516c..1c87738ed 100644 --- a/src/core/aspects/qaspectmanager_p.h +++ b/src/core/aspects/qaspectmanager_p.h @@ -51,13 +51,14 @@ // We mean it. // -#include <QObject> #include <Qt3DCore/qnodecreatedchange.h> +#include <QtCore/QObject> +#include <QtCore/QScopedPointer> +#include <QtCore/QSemaphore> +#include <QtCore/QVariant> +#include <QtCore/QVector> + #include <Qt3DCore/private/qt3dcore_global_p.h> -#include <QVector> -#include <QScopedPointer> -#include <QVariant> -#include <QSemaphore> QT_BEGIN_NAMESPACE diff --git a/src/core/aspects/qaspectthread.cpp b/src/core/aspects/qaspectthread.cpp index 9e6961901..31715b04e 100644 --- a/src/core/aspects/qaspectthread.cpp +++ b/src/core/aspects/qaspectthread.cpp @@ -38,10 +38,11 @@ ****************************************************************************/ #include "qaspectthread_p.h" -#include "qaspectmanager_p.h" +#include <QtCore/QMutexLocker> + +#include <Qt3DCore/private/qaspectmanager_p.h> #include <Qt3DCore/private/corelogging_p.h> -#include <QMutexLocker> QT_BEGIN_NAMESPACE diff --git a/src/core/aspects/qaspectthread_p.h b/src/core/aspects/qaspectthread_p.h index dc508b271..91fb363c5 100644 --- a/src/core/aspects/qaspectthread_p.h +++ b/src/core/aspects/qaspectthread_p.h @@ -51,10 +51,10 @@ // We mean it. // -#include <QThread> #include <Qt3DCore/qt3dcore_global.h> - #include <QtCore/QSemaphore> +#include <QtCore/QThread> + QT_BEGIN_NAMESPACE |