From 10cd55bcacc119fb32c3ff2bee452db7d147d20c Mon Sep 17 00:00:00 2001 From: Andy Nichols Date: Mon, 4 Jun 2018 17:30:04 +0200 Subject: Throttle Viewer refreshes to once per second Qt3D can still have issues in the renderer aspect when rapidly rebuilding scenes. To prevent this issue from crashing the viewer we need to prevent scene reloads from occurring too quickly. In the future this will not be necessary. Task-number: QT3DS-1863 Change-Id: Ib15e83873a5d7896e68fadccf6e7192a6dcba9ee Reviewed-by: Christian Stromme --- tools/q3dsviewer/q3dsmainwindow.cpp | 13 ++++++++++++- tools/q3dsviewer/q3dsmainwindow.h | 4 ++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/q3dsviewer/q3dsmainwindow.cpp b/tools/q3dsviewer/q3dsmainwindow.cpp index 837c63c..1182d8e 100644 --- a/tools/q3dsviewer/q3dsmainwindow.cpp +++ b/tools/q3dsviewer/q3dsmainwindow.cpp @@ -58,6 +58,13 @@ Q3DStudioMainWindow::Q3DStudioMainWindow(Q3DSWindow *view, Q3DSRemoteDeploymentM styleFile.open(QFile::ReadOnly); qApp->setStyleSheet(styleFile.readAll()); + // This timer makes sure that reloads are not called more often than once per second + m_refreshTimer.setInterval(1000); + m_refreshTimer.setSingleShot(true); + connect(&m_refreshTimer, &QTimer::timeout, [this] { + m_okToReload = true; + }); + static const bool enableDebugMenu = qEnvironmentVariableIntValue("Q3DS_DEBUG") >= 1; QWidget *wrapper = QWidget::createWindowContainer(view); @@ -98,7 +105,11 @@ Q3DStudioMainWindow::Q3DStudioMainWindow(Q3DSWindow *view, Q3DSRemoteDeploymentM remote->state() != Q3DSRemoteDeploymentManager::LocalProject && remote->state() != Q3DSRemoteDeploymentManager::RemoteProject) return; - view->engine()->setSource(view->engine()->source()); + if (m_okToReload) { + view->engine()->setSource(view->engine()->source()); + m_refreshTimer.start(); + m_okToReload = false; + } }); fileMenu->addAction(reloadAction); addAction(reloadAction); diff --git a/tools/q3dsviewer/q3dsmainwindow.h b/tools/q3dsviewer/q3dsmainwindow.h index 1d29f88..c38118c 100644 --- a/tools/q3dsviewer/q3dsmainwindow.h +++ b/tools/q3dsviewer/q3dsmainwindow.h @@ -31,6 +31,7 @@ #define Q3DSTUDIOMAINWINDOW_H #include +#include QT_BEGIN_NAMESPACE @@ -44,6 +45,9 @@ public: explicit Q3DStudioMainWindow(Q3DSWindow *view, Q3DSRemoteDeploymentManager *remote = nullptr, QWidget *parent = nullptr); static QString fileFilter(); +private: + QTimer m_refreshTimer; + bool m_okToReload = true; }; QT_END_NAMESPACE -- cgit v1.2.3