diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-10-18 16:49:09 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-10-18 15:31:32 +0000 |
commit | edd07ff986b6edb4ad001a88d673c152501b555f (patch) | |
tree | cd5816faa623e0c648aa7e083aee937974438caa | |
parent | e55ea179c4c3f3c55365053293ab1f94d1bb9ef6 (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.cpp | 28 | ||||
-rw-r--r-- | src/plugins/qmldesigner/qmldesignerprojectmanager.h | 3 |
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 |