summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Nichols <andy.nichols@qt.io>2018-06-04 17:30:04 +0200
committerAndy Nichols <andy.nichols@qt.io>2018-06-05 12:53:41 +0000
commit10cd55bcacc119fb32c3ff2bee452db7d147d20c (patch)
tree25c97c260091786414daeec6316470c3fb24b431
parent42de0adbab5f889e96a1a025836be9f199c01d8d (diff)
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 <christian.stromme@qt.io>
-rw-r--r--tools/q3dsviewer/q3dsmainwindow.cpp13
-rw-r--r--tools/q3dsviewer/q3dsmainwindow.h4
2 files changed, 16 insertions, 1 deletions
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 <QMainWindow>
+#include <QTimer>
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