From 22eccf3a95279b85c849c6a49a0a804beb58e2c5 Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Fri, 6 Dec 2019 15:49:36 +0000 Subject: Use jobsDone to sync render capture back to frontend Removes the jobs who's only purpose was to send a message to the frontend. Now added a jobsDone() call to render which is called from main thread when jobs are completed, so it's safe to sync data to frontend. Added a task trace for the backend to front end synching. Change-Id: I587462bea353c5d5a0065b542adcacef4dedb05f Reviewed-by: Paul Lemire --- tests/auto/render/commons/testrenderer.h | 15 ++-- tests/auto/render/render.pro | 1 - tests/auto/render/renderer/tst_renderer.cpp | 10 --- .../sendrendercapturejob/sendrendercapturejob.pro | 12 --- .../tst_sendrendercapturejob.cpp | 85 ---------------------- tests/manual/rendercapture-qml/main.qml | 2 +- 6 files changed, 9 insertions(+), 116 deletions(-) delete mode 100644 tests/auto/render/sendrendercapturejob/sendrendercapturejob.pro delete mode 100644 tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp (limited to 'tests') diff --git a/tests/auto/render/commons/testrenderer.h b/tests/auto/render/commons/testrenderer.h index f3798e5f8..8cab7edfc 100644 --- a/tests/auto/render/commons/testrenderer.h +++ b/tests/auto/render/commons/testrenderer.h @@ -42,33 +42,34 @@ public: void dumpInfo() const override {} API api() const override { return AbstractRenderer::OpenGL; } qint64 time() const override { return 0; } - void setTime(qint64 time) override { Q_UNUSED(time); } + void setTime(qint64 time) override { Q_UNUSED(time) } void setNodeManagers(Qt3DRender::Render::NodeManagers *m) override { m_managers = m; } - void setServices(Qt3DCore::QServiceLocator *services) override { Q_UNUSED(services); } - void setSurfaceExposed(bool exposed) override { Q_UNUSED(exposed); } + void setServices(Qt3DCore::QServiceLocator *services) override { Q_UNUSED(services) } + void setSurfaceExposed(bool exposed) override { Q_UNUSED(exposed) } Qt3DRender::Render::NodeManagers *nodeManagers() const override { return m_managers; } Qt3DCore::QServiceLocator *services() const override { return nullptr; } void initialize() override {} void shutdown() override {} void releaseGraphicsResources() override {} void render() override {} - void doRender(bool swapBuffers) override { Q_UNUSED(swapBuffers); } + void doRender(bool swapBuffers) override { Q_UNUSED(swapBuffers) } void cleanGraphicsResources() override {} bool isRunning() const override { return true; } bool shouldRender() override { return true; } void skipNextFrame() override {} + void jobsDone(Qt3DCore::QAspectManager *manager) override { Q_UNUSED(manager) } QVector preRenderingJobs() override { return QVector(); } QVector renderBinJobs() override { return QVector(); } Qt3DCore::QAspectJobPtr pickBoundingVolumeJob() override { return Qt3DCore::QAspectJobPtr(); } Qt3DCore::QAspectJobPtr rayCastingJob() override { return Qt3DCore::QAspectJobPtr(); } Qt3DCore::QAspectJobPtr syncLoadingJobs() override { return Qt3DCore::QAspectJobPtr(); } Qt3DCore::QAspectJobPtr expandBoundingVolumeJob() override { return Qt3DCore::QAspectJobPtr(); } - void setSceneRoot(Qt3DRender::Render::Entity *root) override { Q_UNUSED(root); } + void setSceneRoot(Qt3DRender::Render::Entity *root) override { Q_UNUSED(root) } Qt3DRender::Render::Entity *sceneRoot() const override { return nullptr; } Qt3DRender::Render::FrameGraphNode *frameGraphRoot() const override { return nullptr; } Qt3DCore::QAbstractFrameAdvanceService *frameAdvanceService() const override { return nullptr; } - void registerEventFilter(Qt3DCore::QEventFilterService *service) override { Q_UNUSED(service); } - void setSettings(Qt3DRender::Render::RenderSettings *settings) override { Q_UNUSED(settings); } + void registerEventFilter(Qt3DCore::QEventFilterService *service) override { Q_UNUSED(service) } + void setSettings(Qt3DRender::Render::RenderSettings *settings) override { Q_UNUSED(settings) } Qt3DRender::Render::RenderSettings *settings() const override { return nullptr; } void markDirty(Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet changes, Qt3DRender::Render::BackendNode *node) override; diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro index 180ff7ac1..908426570 100644 --- a/tests/auto/render/render.pro +++ b/tests/auto/render/render.pro @@ -137,7 +137,6 @@ qtConfig(qt3d-opengl-renderer):qtConfig(private_tests) { renderviews \ renderqueue \ renderviewbuilder \ - sendrendercapturejob \ gltexture qtConfig(qt3d-extras) { diff --git a/tests/auto/render/renderer/tst_renderer.cpp b/tests/auto/render/renderer/tst_renderer.cpp index a343d6e57..ede95fe14 100644 --- a/tests/auto/render/renderer/tst_renderer.cpp +++ b/tests/auto/render/renderer/tst_renderer.cpp @@ -77,16 +77,6 @@ private Q_SLOTS: 1 + // PickBoundingVolumeJob 1); // RayCastingJob - // WHEN - renderer.addRenderCaptureSendRequest(Qt3DCore::QNodeId::createId()); - jobs = renderer.preRenderingJobs(); - - // THEN - QCOMPARE(jobs.size(), - 1 + // PickBoundingVolumeJob - 1 + // RayCastingJob - 1); // SendRenderCaptureJob - // WHEN renderer.m_sendBufferCaptureJob->addRequest({Qt3DCore::QNodeId(), {}}); jobs = renderer.preRenderingJobs(); diff --git a/tests/auto/render/sendrendercapturejob/sendrendercapturejob.pro b/tests/auto/render/sendrendercapturejob/sendrendercapturejob.pro deleted file mode 100644 index 6aff0bebd..000000000 --- a/tests/auto/render/sendrendercapturejob/sendrendercapturejob.pro +++ /dev/null @@ -1,12 +0,0 @@ -TEMPLATE = app - -TARGET = tst_sendrendercapturejob - -QT += core-private 3dcore 3dcore-private 3drender 3drender-private testlib - -CONFIG += testcase - -SOURCES += tst_sendrendercapturejob.cpp - -include(../commons/commons.pri) -include(../../core/common/common.pri) diff --git a/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp b/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp deleted file mode 100644 index 53a646ccd..000000000 --- a/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "Qt3DRender/QRenderAspect" -#include "Qt3DRender/private/renderer_p.h" -#include "Qt3DRender/private/nodemanagers_p.h" -#include "Qt3DRender/private/rendercapture_p.h" -#include -#include "testpostmanarbiter.h" - -class tst_SendRenderCaptureJob : public QObject -{ - Q_OBJECT -private Q_SLOTS: - void testSendRenderCaptureRequest() - { - // GIVEN - TestArbiter arbiter; - Qt3DRender::Render::RenderCapture *renderCapture = new Qt3DRender::Render::RenderCapture; - Qt3DCore::QBackendNodePrivate::get(renderCapture)->setArbiter(&arbiter); - - QImage image(10, 10, QImage::Format_ARGB32); - - Qt3DRender::Render::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); - Qt3DRender::Render::SendRenderCaptureJob job; - - Qt3DRender::Render::NodeManagers nodeManagers; - nodeManagers.frameGraphManager()->appendNode(renderCapture->peerId(), renderCapture); - renderer.setNodeManagers(&nodeManagers); - job.setManagers(&nodeManagers); - - renderCapture->requestCapture({ 42, QRect() }); - auto request = renderCapture->takeCaptureRequest(); - renderCapture->addRenderCapture(request.captureId, image); - renderer.addRenderCaptureSendRequest(renderCapture->peerId()); - job.setPendingCaptureRequests(renderer.takePendingRenderCaptureSendRequests()); - - //WHEN - job.run(); - - //THEN - QCOMPARE(arbiter.events.count(), 1); - Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast(); - QCOMPARE(change->subjectId(), renderCapture->peerId()); - QCOMPARE(change->propertyName(), "renderCaptureData"); - auto data = change->value().value(); - QCOMPARE(data.data()->captureId, 42); - QCOMPARE(data.data()->image.width(), 10); - QCOMPARE(data.data()->image.height(), 10); - QCOMPARE(data.data()->image.format(), QImage::Format_ARGB32); - - // renderCapture will be deallocated by the nodeManagers destructor - renderer.shutdown(); - } -}; - -QTEST_APPLESS_MAIN(tst_SendRenderCaptureJob) - -#include "tst_sendrendercapturejob.moc" diff --git a/tests/manual/rendercapture-qml/main.qml b/tests/manual/rendercapture-qml/main.qml index 9aff1fefe..98b24e251 100644 --- a/tests/manual/rendercapture-qml/main.qml +++ b/tests/manual/rendercapture-qml/main.qml @@ -50,7 +50,7 @@ import QtQuick 2.2 import QtQuick.Layouts 1.3 -import QtQuick.Controls 1.4 +import QtQuick.Controls 2.12 import Qt3D.Render 2.9 import QtQuick.Scene3D 2.0 -- cgit v1.2.3