diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-12-05 17:23:18 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-12-17 07:21:59 +0000 |
commit | b8b516ff1273ebabf64391aa12de45c47326d98b (patch) | |
tree | e29096bb476f4517802af817d1482834c0d09ae2 | |
parent | 94e79666cc987fcc928d43f7f82b8c7b9d4c4acc (diff) |
Move AspectCommandDebugger to system service, activate command executer
- Always compile in AspectCommandDebugger and CommandExecuter
- AspectCommandDebugger start when QT3D_COMMAND_SERVER_ENABLED is set
- System information service becomes entry point for commands
from the debugger
- Added commands to enable and disable tracing
Change-Id: Ic0d7fe72fa8a118a43ca348ca4284595a71827a4
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/core/aspects/aspectcommanddebugger.cpp | 20 | ||||
-rw-r--r-- | src/core/aspects/aspectcommanddebugger_p.h | 18 | ||||
-rw-r--r-- | src/core/aspects/aspects.pri | 10 | ||||
-rw-r--r-- | src/core/aspects/qaspectengine.cpp | 12 | ||||
-rw-r--r-- | src/core/aspects/qaspectengine_p.h | 10 | ||||
-rw-r--r-- | src/core/configure.json | 3 | ||||
-rw-r--r-- | src/core/services/qsysteminformationservice.cpp | 33 | ||||
-rw-r--r-- | src/core/services/qsysteminformationservice_p.h | 5 | ||||
-rw-r--r-- | src/core/services/qsysteminformationservice_p_p.h | 6 | ||||
-rw-r--r-- | src/render/backend/render-backend.pri | 13 | ||||
-rw-r--r-- | src/render/renderers/opengl/renderer/renderer.cpp | 28 | ||||
-rw-r--r-- | src/render/renderers/opengl/renderer/renderer_p.h | 5 | ||||
-rw-r--r-- | tests/auto/core/core.pro | 4 |
13 files changed, 69 insertions, 98 deletions
diff --git a/src/core/aspects/aspectcommanddebugger.cpp b/src/core/aspects/aspectcommanddebugger.cpp index eceec1bbd..7635f44c0 100644 --- a/src/core/aspects/aspectcommanddebugger.cpp +++ b/src/core/aspects/aspectcommanddebugger.cpp @@ -39,12 +39,12 @@ #include "aspectcommanddebugger_p.h" -#include <Qt3DCore/qaspectengine.h> #include <QtNetwork/QTcpSocket> #include <QtCore/QJsonDocument> #include <QtCore/QJsonObject> #include <Qt3DCore/private/qabstractaspect_p.h> +#include <Qt3DCore/private/qsysteminformationservice_p.h> QT_BEGIN_NAMESPACE @@ -64,13 +64,6 @@ struct CommandHeader } // anonymous -AspectCommandDebugger::ReadBuffer::ReadBuffer() - : buffer() - , startIdx(0) - , endIdx(0) -{ -} - void AspectCommandDebugger::ReadBuffer::insert(const QByteArray &array) { buffer.insert(endIdx, array); @@ -88,9 +81,9 @@ void AspectCommandDebugger::ReadBuffer::trim() } } -AspectCommandDebugger::AspectCommandDebugger(QObject *parent) +AspectCommandDebugger::AspectCommandDebugger(QSystemInformationService *parent) : QTcpServer(parent) - , m_aspectEngine(nullptr) + , m_service(parent) { } @@ -115,11 +108,6 @@ void AspectCommandDebugger::initialize() qWarning() << Q_FUNC_INFO << "failed to listen on port 8883"; } -void AspectCommandDebugger::setAspectEngine(QAspectEngine *engine) -{ - m_aspectEngine = engine; -} - void AspectCommandDebugger::asynchronousReplyFinished(AsynchronousCommandReply *reply) { Q_ASSERT(reply->isFinished()); @@ -189,7 +177,7 @@ void AspectCommandDebugger::executeCommand(const QString &command, QTcpSocket *socket) { // Only a single aspect is going to reply - const QVariant response = m_aspectEngine->executeCommand(command); + const QVariant response = m_service->executeCommand(command); if (response.userType() == qMetaTypeId<AsynchronousCommandReply *>()) { // AsynchronousCommand // Store the command | socket in a table AsynchronousCommandReply *reply = response.value<AsynchronousCommandReply *>(); diff --git a/src/core/aspects/aspectcommanddebugger_p.h b/src/core/aspects/aspectcommanddebugger_p.h index bb6100df5..b39708ab1 100644 --- a/src/core/aspects/aspectcommanddebugger_p.h +++ b/src/core/aspects/aspectcommanddebugger_p.h @@ -54,32 +54,30 @@ // #include <QTcpServer> +#include <Qt3DCore/private/qt3dcore_global_p.h> QT_BEGIN_NAMESPACE namespace Qt3DCore { -class QAspectEngine; +class QSystemInformationService; namespace Debug { class AsynchronousCommandReply; -class Q_AUTOTEST_EXPORT AspectCommandDebugger : public QTcpServer +class Q_3DCORE_PRIVATE_EXPORT AspectCommandDebugger : public QTcpServer { Q_OBJECT public: - explicit AspectCommandDebugger(QObject *parent = nullptr); + explicit AspectCommandDebugger(QSystemInformationService *parent = nullptr); void initialize(); - void setAspectEngine(QAspectEngine *engine); - - struct ReadBuffer { - ReadBuffer(); + struct Q_3DCORE_PRIVATE_EXPORT ReadBuffer { QByteArray buffer; - int startIdx; - int endIdx; + int startIdx = 0; + int endIdx = 0; inline int size() const { return endIdx - startIdx; } void insert(const QByteArray &array); @@ -95,7 +93,7 @@ private: void executeCommand(const QString &command, QTcpSocket *socket); QVector<QTcpSocket *> m_connections; - QAspectEngine *m_aspectEngine; + QSystemInformationService *m_service; ReadBuffer m_readBuffer; QHash<AsynchronousCommandReply *, QTcpSocket *> m_asyncCommandToSocketEntries; diff --git a/src/core/aspects/aspects.pri b/src/core/aspects/aspects.pri index 5e8327192..068f74389 100644 --- a/src/core/aspects/aspects.pri +++ b/src/core/aspects/aspects.pri @@ -4,7 +4,8 @@ SOURCES += \ $$PWD/qabstractaspect.cpp \ $$PWD/qaspectengine.cpp \ $$PWD/qaspectfactory.cpp \ - $$PWD/qaspectmanager.cpp + $$PWD/qaspectmanager.cpp \ + $$PWD/aspectcommanddebugger.cpp HEADERS += \ $$PWD/qabstractaspect.h \ @@ -12,13 +13,10 @@ HEADERS += \ $$PWD/qabstractaspect_p.h \ $$PWD/qaspectengine_p.h \ $$PWD/qaspectfactory_p.h \ - $$PWD/qaspectmanager_p.h + $$PWD/qaspectmanager_p.h \ + $$PWD/aspectcommanddebugger_p.h INCLUDEPATH += $$PWD include($$QT3D_BUILD_ROOT/src/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/qaspectengine.cpp b/src/core/aspects/qaspectengine.cpp index e16635cb2..d28306197 100644 --- a/src/core/aspects/qaspectengine.cpp +++ b/src/core/aspects/qaspectengine.cpp @@ -58,10 +58,6 @@ #include <Qt3DCore/private/qsysteminformationservice_p.h> #include <Qt3DCore/qt3dcore-config.h> -#if QT_CONFIG(qt3d_profile_jobs) -#include <Qt3DCore/private/aspectcommanddebugger_p.h> -#endif - QT_BEGIN_NAMESPACE namespace{ @@ -123,9 +119,6 @@ QAspectEnginePrivate::QAspectEnginePrivate() , m_scene(nullptr) , m_initialized(false) , m_runMode(QAspectEngine::Automatic) - #if QT_CONFIG(qt3d_profile_jobs) - , m_commandDebugger(new Debug::AspectCommandDebugger(q_func())) - #endif { qRegisterMetaType<Qt3DCore::QAbstractAspect *>(); qRegisterMetaType<Qt3DCore::QObserverInterface *>(); @@ -277,11 +270,6 @@ void QAspectEnginePrivate::initialize() arbiter->setScene(m_scene); m_initialized = true; m_aspectManager->setPostConstructorInit(m_scene->postConstructorInit()); - Q_Q(QAspectEngine); -#if QT_CONFIG(qt3d_profile_jobs) - m_commandDebugger->setAspectEngine(q_func()); - m_commandDebugger->initialize(); -#endif } /*! diff --git a/src/core/aspects/qaspectengine_p.h b/src/core/aspects/qaspectengine_p.h index c83940435..8f3abcd38 100644 --- a/src/core/aspects/qaspectengine_p.h +++ b/src/core/aspects/qaspectengine_p.h @@ -69,12 +69,6 @@ class QAspectManager; class QPostman; class QScene; -#if QT_CONFIG(qt3d_profile_jobs) -namespace Debug { -class AspectCommandDebugger; -} // Debug -#endif - class Q_3DCORE_PRIVATE_EXPORT QAspectEnginePrivate : public QObjectPrivate { public: @@ -93,10 +87,6 @@ public: bool m_initialized; QAspectEngine::RunMode m_runMode; -#if QT_CONFIG(qt3d_profile_jobs) - Debug::AspectCommandDebugger *m_commandDebugger; -#endif - void initialize(); void shutdown(); diff --git a/src/core/configure.json b/src/core/configure.json index 2ba205530..2e13d9027 100644 --- a/src/core/configure.json +++ b/src/core/configure.json @@ -44,7 +44,7 @@ "output": [ "privateFeature" ] }, "qt3d-profile-jobs": { - "label": "Output Qt3D Job traces", + "label": "Output Qt3D Job traces (deprecated)", "autoDetect": false, "output": [ "privateFeature" ] }, @@ -112,7 +112,6 @@ "entries": [ "assimp", "system-assimp", - "qt3d-profile-jobs", "qt3d-profile-gl", "qt3d-simd-sse2", "qt3d-simd-avx2", diff --git a/src/core/services/qsysteminformationservice.cpp b/src/core/services/qsysteminformationservice.cpp index ae7b96f89..40f3594fb 100644 --- a/src/core/services/qsysteminformationservice.cpp +++ b/src/core/services/qsysteminformationservice.cpp @@ -51,8 +51,9 @@ #include <QtCore/QCoreApplication> #include <Qt3DCore/QAspectEngine> -#include <Qt3DCore/private/qaspectengine_p.h> #include <Qt3DCore/QAbstractAspect> +#include <Qt3DCore/private/qaspectengine_p.h> +#include <Qt3DCore/private/aspectcommanddebugger_p.h> QT_BEGIN_NAMESPACE @@ -86,10 +87,17 @@ QSystemInformationServicePrivate::QSystemInformationServicePrivate(QAspectEngine , m_aspectEngine(aspectEngine) , m_submissionStorage(nullptr) , m_frameId(0) + , m_commandDebugger(nullptr) { m_traceEnabled = qEnvironmentVariableIsSet("QT3D_TRACE_ENABLED"); if (m_traceEnabled) m_jobsStatTimer.start(); + + const bool commandServerEnabled = qEnvironmentVariableIsSet("QT3D_COMMAND_SERVER_ENABLED"); + if (commandServerEnabled) { + m_commandDebugger = new Debug::AspectCommandDebugger(q_func()); + m_commandDebugger->initialize(); + } } QSystemInformationServicePrivate::~QSystemInformationServicePrivate() = default; @@ -285,6 +293,12 @@ bool QSystemInformationService::isTraceEnabled() const return d->m_traceEnabled; } +bool QSystemInformationService::isCommandServerEnabled() const +{ + Q_D(const QSystemInformationService); + return d->m_commandDebugger != nullptr; +} + void QSystemInformationService::setTraceEnabled(bool traceEnabled) { Q_D(QSystemInformationService); @@ -344,6 +358,23 @@ void QSystemInformationService::writePreviousFrameTraces() d->writeFrameJobLogStats(); } +QVariant QSystemInformationService::executeCommand(const QString &command) +{ + Q_D(QSystemInformationService); + + if (command == QLatin1String("tracing on")) { + setTraceEnabled(true); + return {isTraceEnabled()}; + } + + if (command == QLatin1String("tracing off")) { + setTraceEnabled(false); + return {isTraceEnabled()}; + } + + return d->m_aspectEngine->executeCommand(command); +} + } QT_END_NAMESPACE diff --git a/src/core/services/qsysteminformationservice_p.h b/src/core/services/qsysteminformationservice_p.h index a524fbfd0..64e6c779e 100644 --- a/src/core/services/qsysteminformationservice_p.h +++ b/src/core/services/qsysteminformationservice_p.h @@ -67,10 +67,13 @@ class Q_3DCORESHARED_EXPORT QSystemInformationService : public QAbstractServiceP { Q_OBJECT Q_PROPERTY(bool traceEnabled READ isTraceEnabled WRITE setTraceEnabled NOTIFY traceEnabledChanged) + Q_PROPERTY(bool commandServerEnabled READ isCommandServerEnabled CONSTANT) public: QSystemInformationService(QAspectEngine *aspectEngine); bool isTraceEnabled() const; + bool isCommandServerEnabled() const; + void setTraceEnabled(bool traceEnabled); QStringList aspectNames() const; @@ -78,6 +81,8 @@ public: void writePreviousFrameTraces(); + QVariant executeCommand(const QString &command); + signals: void traceEnabledChanged(bool traceEnabled); diff --git a/src/core/services/qsysteminformationservice_p_p.h b/src/core/services/qsysteminformationservice_p_p.h index 00282c28a..222f4e1af 100644 --- a/src/core/services/qsysteminformationservice_p_p.h +++ b/src/core/services/qsysteminformationservice_p_p.h @@ -66,6 +66,10 @@ QT_BEGIN_NAMESPACE namespace Qt3DCore { +namespace Debug { +class AspectCommandDebugger; +} // Debug + union Q_3DCORE_PRIVATE_EXPORT JobId { JobId() : id(0L) { } @@ -115,6 +119,8 @@ public: QScopedPointer<QFile> m_traceFile; quint32 m_frameId; + Debug::AspectCommandDebugger *m_commandDebugger; + Q_DECLARE_PUBLIC(QSystemInformationService) }; diff --git a/src/render/backend/render-backend.pri b/src/render/backend/render-backend.pri index 9510b9530..c910adfe4 100644 --- a/src/render/backend/render-backend.pri +++ b/src/render/backend/render-backend.pri @@ -37,7 +37,8 @@ HEADERS += \ $$PWD/resourceaccessor_p.h \ $$PWD/visitorutils_p.h \ $$PWD/segmentsvisitor_p.h \ - $$PWD/pointsvisitor_p.h + $$PWD/pointsvisitor_p.h \ + $$PWD/commandexecuter_p.h SOURCES += \ $$PWD/renderthread.cpp \ @@ -67,11 +68,5 @@ SOURCES += \ $$PWD/offscreensurfacehelper.cpp \ $$PWD/resourceaccessor.cpp \ $$PWD/segmentsvisitor.cpp \ - $$PWD/pointsvisitor.cpp - -include($$QT3D_BUILD_ROOT/src/core/qt3dcore-config.pri) -QT_FOR_CONFIG += 3dcore-private -qtConfig(qt3d-profile-jobs): { - HEADERS += $$PWD/commandexecuter_p.h - SOURCES += $$PWD/commandexecuter.cpp -} + $$PWD/pointsvisitor.cpp \ + $$PWD/commandexecuter.cpp diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp index 84624c02f..ddf57f4fe 100644 --- a/src/render/renderers/opengl/renderer/renderer.cpp +++ b/src/render/renderers/opengl/renderer/renderer.cpp @@ -94,6 +94,7 @@ #include <Qt3DRender/private/qshaderprogrambuilder_p.h> #include <Qt3DRender/private/qshaderprogram_p.h> #include <Qt3DRender/private/filterentitybycomponentjob_p.h> +#include <Qt3DRender/private/commandexecuter_p.h> #include <Qt3DRender/qcameralens.h> #include <Qt3DCore/private/qeventfilterservice_p.h> @@ -102,10 +103,6 @@ #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> -#endif - #include <QStack> #include <QOffscreenSurface> #include <QSurface> @@ -117,19 +114,9 @@ #include <QUrl> #include <QOffscreenSurface> #include <QWindow> - -#include <QtGui/private/qopenglcontext_p.h> - -// For Debug purposes only #include <QThread> - -#if QT_CONFIG(qt3d_profile_jobs) -#include <Qt3DCore/private/qthreadpooler_p.h> -#include <Qt3DRender/private/job_common_p.h> -#include <Qt3DRender/private/commandexecuter_p.h> -#endif - +#include <QtGui/private/qopenglcontext_p.h> #include <Qt3DRender/private/frameprofiler_p.h> QT_BEGIN_NAMESPACE @@ -290,10 +277,8 @@ Renderer::Renderer(QRenderAspect::RenderType type) JobTypes::EntityComponentTypeFiltering)) , m_ownedContext(false) , m_offscreenHelper(nullptr) - , m_shouldSwapBuffers(true) - #if QT_CONFIG(qt3d_profile_jobs) , m_commandExecuter(new Qt3DRender::Debug::CommandExecuter(this)) - #endif + , m_shouldSwapBuffers(true) { // Set renderer as running - it will wait in the context of the // RenderThread for RenderViews to be submitted @@ -798,10 +783,8 @@ void Renderer::doRender(bool swapBuffers) } } -#if QT_CONFIG(qt3d_profile_jobs) // Execute the pending shell commands m_commandExecuter->performAsynchronousCommandExecution(renderViews); -#endif // Delete all the RenderViews which will clear the allocators // that were used for their allocation @@ -899,12 +882,7 @@ bool Renderer::isReadyToSubmit() // Main thread QVariant Renderer::executeCommand(const QStringList &args) { -#if QT_CONFIG(qt3d_profile_jobs) return m_commandExecuter->executeCommand(args); -#else - Q_UNUSED(args); -#endif - return QVariant(); } /*! diff --git a/src/render/renderers/opengl/renderer/renderer_p.h b/src/render/renderers/opengl/renderer/renderer_p.h index aad6f425e..e770b8280 100644 --- a/src/render/renderers/opengl/renderer/renderer_p.h +++ b/src/render/renderers/opengl/renderer/renderer_p.h @@ -125,11 +125,9 @@ class QAbstractShapeMesh; struct GraphicsApiFilterData; class QSceneImporter; -#if QT_CONFIG(qt3d_profile_jobs) namespace Debug { class CommandExecuter; } -#endif namespace Render { @@ -428,10 +426,7 @@ private: OffscreenSurfaceHelper *m_offscreenHelper; QMutex m_offscreenSurfaceMutex; -#if QT_CONFIG(qt3d_profile_jobs) QScopedPointer<Qt3DRender::Debug::CommandExecuter> m_commandExecuter; - friend class Qt3DRender::Debug::CommandExecuter; -#endif #ifdef QT_BUILD_INTERNAL friend class ::tst_Renderer; diff --git a/tests/auto/core/core.pro b/tests/auto/core/core.pro index 001b947d5..13f4a0dc7 100644 --- a/tests/auto/core/core.pro +++ b/tests/auto/core/core.pro @@ -25,10 +25,10 @@ qtConfig(private_tests) { threadpooler \ qpostman \ vector4d_base \ - vector3d_base + vector3d_base \ + aspectcommanddebugger QT_FOR_CONFIG += 3dcore-private - qtConfig(qt3d-profile-jobs): SUBDIRS += aspectcommanddebugger qtConfig(qt3d-simd-sse2) { SUBDIRS += \ vector4d_sse \ |