From 1802f11f4b99c93dc9c2e4b5556592db005b5817 Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Mon, 23 May 2016 15:54:13 +0100 Subject: Avoid changing access rights to virtual methods Added QRenderAspectTester as friend for testing Task-number: QTBUG-53569 Change-Id: Ia7adde188065a2ba02b7fd480fcfe545ccbf4720 Reviewed-by: Sean Harmer --- src/logic/qlogicaspect.h | 4 +- src/render/frontend/qrenderaspect.h | 13 +- tests/benchmarks/render/jobs/tst_bench_jobs.cpp | 162 +++++++++++++----------- tests/benchmarks/render/render.pro | 4 +- 4 files changed, 100 insertions(+), 83 deletions(-) diff --git a/src/logic/qlogicaspect.h b/src/logic/qlogicaspect.h index 3d7e8b957..e73e2eb2d 100644 --- a/src/logic/qlogicaspect.h +++ b/src/logic/qlogicaspect.h @@ -56,9 +56,8 @@ public: explicit QLogicAspect(QObject *parent = nullptr); ~QLogicAspect(); - QVector jobsToExecute(qint64 time) Q_DECL_OVERRIDE; - private: + QVector jobsToExecute(qint64 time) Q_DECL_OVERRIDE; void onRegistered() Q_DECL_OVERRIDE; void onEngineStartup() Q_DECL_OVERRIDE; @@ -71,4 +70,3 @@ private: QT_END_NAMESPACE #endif // QT3DLOGIC_QLOGICASPECT_H - diff --git a/src/render/frontend/qrenderaspect.h b/src/render/frontend/qrenderaspect.h index 45e982873..c6254da3a 100644 --- a/src/render/frontend/qrenderaspect.h +++ b/src/render/frontend/qrenderaspect.h @@ -55,6 +55,10 @@ class Renderer; class QRenderAspectPrivate; +#if defined(QT_BUILD_INTERNAL) +class QRenderAspectTester; +#endif + class QT3DRENDERSHARED_EXPORT QRenderAspect : public Qt3DCore::QAbstractAspect { Q_OBJECT @@ -68,19 +72,22 @@ public: explicit QRenderAspect(RenderType type, QObject *parent = nullptr); ~QRenderAspect(); - QVector jobsToExecute(qint64 time) Q_DECL_OVERRIDE; - protected: QRenderAspect(QRenderAspectPrivate &dd, QObject *parent); Q_DECLARE_PRIVATE(QRenderAspect) +private: + QVector jobsToExecute(qint64 time) Q_DECL_OVERRIDE; + void onRegistered() Q_DECL_OVERRIDE; void onUnregistered() Q_DECL_OVERRIDE; void onEngineStartup() Q_DECL_OVERRIDE; -private: friend class Render::Renderer; +#if defined(QT_BUILD_INTERNAL) + friend class QRenderAspectTester; +#endif }; } diff --git a/tests/benchmarks/render/jobs/tst_bench_jobs.cpp b/tests/benchmarks/render/jobs/tst_bench_jobs.cpp index 7593d2992..c0d9a34fd 100644 --- a/tests/benchmarks/render/jobs/tst_bench_jobs.cpp +++ b/tests/benchmarks/render/jobs/tst_bench_jobs.cpp @@ -54,90 +54,100 @@ #include #include -class TestAspect : public Qt3DRender::QRenderAspect -{ - Q_OBJECT -public: - TestAspect(bool withWindow = false) - : Qt3DRender::QRenderAspect(QRenderAspect::Synchronous) - , m_jobManager(new Qt3DCore::QAspectJobManager()) +QT_BEGIN_NAMESPACE + +namespace Qt3DRender { + + class QRenderAspectTester : public Qt3DRender::QRenderAspect { - Qt3DCore::QAbstractAspectPrivate::get(this)->m_jobManager = m_jobManager.data(); - if (!withWindow) { - d_func()->m_renderer->createAllocators(m_jobManager.data()); - } else { - m_window.reset(new QWindow()); - m_window->resize(1024, 768); - - QSurfaceFormat format; - if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { - format.setVersion(4, 3); - format.setProfile(QSurfaceFormat::CoreProfile); + Q_OBJECT + public: + QRenderAspectTester(bool withWindow = false) + : Qt3DRender::QRenderAspect(QRenderAspect::Synchronous) + , m_jobManager(new Qt3DCore::QAspectJobManager()) + { + Qt3DCore::QAbstractAspectPrivate::get(this)->m_jobManager = m_jobManager.data(); + if (!withWindow) { + d_func()->m_renderer->createAllocators(m_jobManager.data()); + } else { + m_window.reset(new QWindow()); + m_window->resize(1024, 768); + + QSurfaceFormat format; + if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { + format.setVersion(4, 3); + format.setProfile(QSurfaceFormat::CoreProfile); + } + format.setDepthBufferSize( 24 ); + format.setSamples( 4 ); + format.setStencilBufferSize(8); + m_window->setFormat(format); + m_window->create(); + + QRenderAspect::onRegistered(); } - format.setDepthBufferSize( 24 ); - format.setSamples( 4 ); - format.setStencilBufferSize(8); - m_window->setFormat(format); - m_window->create(); - - QRenderAspect::onRegistered(); } - } - QVector worldTransformJob() - { - d_func()->m_worldTransformJob->setRoot(d_func()->m_renderer->sceneRoot()); - return QVector() << d_func()->m_worldTransformJob; - } + QVector worldTransformJob() + { + d_func()->m_worldTransformJob->setRoot(d_func()->m_renderer->sceneRoot()); + return QVector() << d_func()->m_worldTransformJob; + } - QVector updateBoundingJob() - { - d_func()->m_updateBoundingVolumeJob->setRoot(d_func()->m_renderer->sceneRoot()); - return QVector() << d_func()->m_updateBoundingVolumeJob; - } + QVector updateBoundingJob() + { + d_func()->m_updateBoundingVolumeJob->setRoot(d_func()->m_renderer->sceneRoot()); + return QVector() << d_func()->m_updateBoundingVolumeJob; + } - QVector calculateBoundingVolumeJob() - { - d_func()->m_calculateBoundingVolumeJob->setRoot(d_func()->m_renderer->sceneRoot()); - return QVector() << d_func()->m_calculateBoundingVolumeJob; - } + QVector calculateBoundingVolumeJob() + { + d_func()->m_calculateBoundingVolumeJob->setRoot(d_func()->m_renderer->sceneRoot()); + return QVector() << d_func()->m_calculateBoundingVolumeJob; + } - QVector framePreparationJob() - { - d_func()->m_framePreparationJob->setRoot(d_func()->m_renderer->sceneRoot()); - return QVector() << d_func()->m_framePreparationJob; - } + QVector framePreparationJob() + { + d_func()->m_framePreparationJob->setRoot(d_func()->m_renderer->sceneRoot()); + return QVector() << d_func()->m_framePreparationJob; + } - QVector frameCleanupJob() - { - d_func()->m_cleanupJob->setRoot(d_func()->m_renderer->sceneRoot()); - return QVector() << d_func()->m_cleanupJob; - } + QVector frameCleanupJob() + { + d_func()->m_cleanupJob->setRoot(d_func()->m_renderer->sceneRoot()); + return QVector() << d_func()->m_cleanupJob; + } - QVector renderBinJobs() - { - return d_func()->m_renderer->renderBinJobs(); - } + QVector renderBinJobs() + { + return d_func()->m_renderer->renderBinJobs(); + } - void onRootEntityChanged(Qt3DCore::QEntity *root) - { - if (!m_window) { - const Qt3DCore::QNodeCreatedChangeGenerator generator(root); - const QVector creationChanges = generator.creationChanges(); + void onRootEntityChanged(Qt3DCore::QEntity *root) + { + if (!m_window) { + const Qt3DCore::QNodeCreatedChangeGenerator generator(root); + const QVector creationChanges = generator.creationChanges(); - for (const Qt3DCore::QNodeCreatedChangeBasePtr change : creationChanges) - d_func()->createBackendNode(change); + for (const Qt3DCore::QNodeCreatedChangeBasePtr change : creationChanges) + d_func()->createBackendNode(change); - static_cast(d_func()->m_renderer)->m_renderSceneRoot = - d_func()->m_renderer->nodeManagers() - ->lookupResource(root->id()); + static_cast(d_func()->m_renderer)->m_renderSceneRoot = + d_func()->m_renderer->nodeManagers() + ->lookupResource(root->id()); + } } - } -private: - QScopedPointer m_jobManager; - QScopedPointer m_window; -}; + private: + QScopedPointer m_jobManager; + QScopedPointer m_window; + }; + +} + +QT_END_NAMESPACE + +using namespace Qt3DRender; Qt3DCore::QEntity *loadFromQML(const QUrl &source) { @@ -231,7 +241,7 @@ private Q_SLOTS: { // GIVEN QFETCH(Qt3DCore::QEntity*, rootEntity); - TestAspect aspect; + QRenderAspectTester aspect; Qt3DCore::QAbstractAspectPrivate::get(&aspect)->setRootAndCreateNodes(qobject_cast(rootEntity), QVector()); @@ -255,7 +265,7 @@ private Q_SLOTS: { // GIVEN QFETCH(Qt3DCore::QEntity*, rootEntity); - TestAspect aspect; + QRenderAspectTester aspect; Qt3DCore::QAbstractAspectPrivate::get(&aspect)->setRootAndCreateNodes(qobject_cast(rootEntity), QVector()); @@ -279,7 +289,7 @@ private Q_SLOTS: { // GIVEN QFETCH(Qt3DCore::QEntity*, rootEntity); - TestAspect aspect; + QRenderAspectTester aspect; Qt3DCore::QAbstractAspectPrivate::get(&aspect)->setRootAndCreateNodes(qobject_cast(rootEntity), QVector()); @@ -303,7 +313,7 @@ private Q_SLOTS: { // GIVEN QFETCH(Qt3DCore::QEntity*, rootEntity); - TestAspect aspect; + QRenderAspectTester aspect; Qt3DCore::QAbstractAspectPrivate::get(&aspect)->setRootAndCreateNodes(qobject_cast(rootEntity), QVector()); @@ -327,7 +337,7 @@ private Q_SLOTS: { // GIVEN QFETCH(Qt3DCore::QEntity*, rootEntity); - TestAspect aspect; + QRenderAspectTester aspect; Qt3DCore::QAbstractAspectPrivate::get(&aspect)->setRootAndCreateNodes(qobject_cast(rootEntity), QVector()); @@ -353,7 +363,7 @@ private Q_SLOTS: // GIVEN QFETCH(Qt3DCore::QEntity*, rootEntity); QScopedPointer aspectThread(new QThread); - TestAspect aspect(true); + QRenderAspectTester aspect(true); aspect.moveToThread(aspectThread.data()); qDebug() << 1; diff --git a/tests/benchmarks/render/render.pro b/tests/benchmarks/render/render.pro index 6accd1788..c553199e3 100644 --- a/tests/benchmarks/render/render.pro +++ b/tests/benchmarks/render/render.pro @@ -1,3 +1,5 @@ TEMPLATE=subdirs -SUBDIRS += jobs +contains(QT_CONFIG, private_tests) { + SUBDIRS += jobs +} -- cgit v1.2.3