aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2022-10-18 16:49:09 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2022-10-18 15:31:32 +0000
commitedd07ff986b6edb4ad001a88d673c152501b555f (patch)
treecd5816faa623e0c648aa7e083aee937974438caa
parente55ea179c4c3f3c55365053293ab1f94d1bb9ef6 (diff)
QmlDesigner: Delay project preview generation by 10 seconds
This way the preview generation does not block opening the project and the project is fully loaded. If the preview is null we store this in the data base and wait one hour until we try to regenerate it. Otherwise we might try to render a preview whenever we switch files. Task-number: QDS-7992 Change-Id: I80a078ec7b8d418fa1fccd14bc4603b82c36c5e0 Reviewed-by: Marco Bubke <marco.bubke@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/plugins/qmldesigner/qmldesignerprojectmanager.cpp28
-rw-r--r--src/plugins/qmldesigner/qmldesignerprojectmanager.h3
2 files changed, 24 insertions, 7 deletions
diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp
index 366f1ef04e..95ad8eff6a 100644
--- a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp
+++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp
@@ -138,7 +138,7 @@ public:
ImageCacheCollector collector{connectionManager,
QSize{300, 300},
QSize{1000, 1000},
- ImageCacheCollectorNullImageHandling::DontCaptureNullImage};
+ ImageCacheCollectorNullImageHandling::CaptureNullImage};
PreviewTimeStampProvider timeStampProvider;
AsynchronousImageFactory factory;
QPointer<::ProjectExplorer::Target> activeTarget;
@@ -167,6 +167,11 @@ QmlDesignerProjectManager::QmlDesignerProjectManager()
QObject::connect(sessionManager,
&::ProjectExplorer::SessionManager::projectRemoved,
[&](auto *project) { projectRemoved(project); });
+
+ QObject::connect(&m_previewTimer,
+ &QTimer::timeout,
+ this,
+ &QmlDesignerProjectManager::generatePreview);
}
QmlDesignerProjectManager::~QmlDesignerProjectManager() = default;
@@ -196,13 +201,8 @@ void QmlDesignerProjectManager::currentEditorChanged(::Core::IEditor *)
if (!m_projectData || !m_projectData->activeTarget)
return;
- ::QmlProjectManager::QmlBuildSystem *qmlBuildSystem = getQmlBuildSystem(
- m_projectData->activeTarget);
+ m_previewTimer.start(10000);
- if (qmlBuildSystem) {
- m_projectData->collector.setTarget(m_projectData->activeTarget);
- m_projectData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8());
- }
}
void QmlDesignerProjectManager::editorsClosed(const QList<::Core::IEditor *> &) {}
@@ -221,6 +221,20 @@ void QmlDesignerProjectManager::aboutToRemoveProject(::ProjectExplorer::Project
void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {}
+void QmlDesignerProjectManager::generatePreview()
+{
+ if (!m_projectData || !m_projectData->activeTarget)
+ return;
+
+ ::QmlProjectManager::QmlBuildSystem *qmlBuildSystem = getQmlBuildSystem(
+ m_projectData->activeTarget);
+
+ if (qmlBuildSystem) {
+ m_projectData->collector.setTarget(m_projectData->activeTarget);
+ m_projectData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8());
+ }
+}
+
QmlDesignerProjectManager::ImageCacheData *QmlDesignerProjectManager::imageCacheData()
{
std::call_once(imageCacheFlag, [this]() {
diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.h b/src/plugins/qmldesigner/qmldesignerprojectmanager.h
index 68cd809be3..7800198812 100644
--- a/src/plugins/qmldesigner/qmldesignerprojectmanager.h
+++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.h
@@ -27,6 +27,7 @@
#include <QList>
#include <QObject>
+#include <QTimer>
#include <memory>
#include <mutex>
@@ -68,6 +69,7 @@ private:
void projectAdded(::ProjectExplorer::Project *project);
void aboutToRemoveProject(::ProjectExplorer::Project *project);
void projectRemoved(::ProjectExplorer::Project *project);
+ void generatePreview();
ImageCacheData *imageCacheData();
private:
@@ -75,5 +77,6 @@ private:
std::unique_ptr<ImageCacheData> m_imageCacheData;
std::unique_ptr<PreviewImageCacheData> m_previewImageCacheData;
std::unique_ptr<QmlDesignerProjectManagerProjectData> m_projectData;
+ QTimer m_previewTimer;
};
} // namespace QmlDesigner