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>
This commit is contained in:
Thomas Hartmann
2022-10-18 16:49:09 +02:00
parent e55ea179c4
commit edd07ff986
2 changed files with 24 additions and 7 deletions

View File

@@ -138,7 +138,7 @@ public:
ImageCacheCollector collector{connectionManager, ImageCacheCollector collector{connectionManager,
QSize{300, 300}, QSize{300, 300},
QSize{1000, 1000}, QSize{1000, 1000},
ImageCacheCollectorNullImageHandling::DontCaptureNullImage}; ImageCacheCollectorNullImageHandling::CaptureNullImage};
PreviewTimeStampProvider timeStampProvider; PreviewTimeStampProvider timeStampProvider;
AsynchronousImageFactory factory; AsynchronousImageFactory factory;
QPointer<::ProjectExplorer::Target> activeTarget; QPointer<::ProjectExplorer::Target> activeTarget;
@@ -167,6 +167,11 @@ QmlDesignerProjectManager::QmlDesignerProjectManager()
QObject::connect(sessionManager, QObject::connect(sessionManager,
&::ProjectExplorer::SessionManager::projectRemoved, &::ProjectExplorer::SessionManager::projectRemoved,
[&](auto *project) { projectRemoved(project); }); [&](auto *project) { projectRemoved(project); });
QObject::connect(&m_previewTimer,
&QTimer::timeout,
this,
&QmlDesignerProjectManager::generatePreview);
} }
QmlDesignerProjectManager::~QmlDesignerProjectManager() = default; QmlDesignerProjectManager::~QmlDesignerProjectManager() = default;
@@ -196,13 +201,8 @@ void QmlDesignerProjectManager::currentEditorChanged(::Core::IEditor *)
if (!m_projectData || !m_projectData->activeTarget) if (!m_projectData || !m_projectData->activeTarget)
return; return;
::QmlProjectManager::QmlBuildSystem *qmlBuildSystem = getQmlBuildSystem( m_previewTimer.start(10000);
m_projectData->activeTarget);
if (qmlBuildSystem) {
m_projectData->collector.setTarget(m_projectData->activeTarget);
m_projectData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8());
}
} }
void QmlDesignerProjectManager::editorsClosed(const QList<::Core::IEditor *> &) {} void QmlDesignerProjectManager::editorsClosed(const QList<::Core::IEditor *> &) {}
@@ -221,6 +221,20 @@ void QmlDesignerProjectManager::aboutToRemoveProject(::ProjectExplorer::Project
void QmlDesignerProjectManager::projectRemoved(::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() QmlDesignerProjectManager::ImageCacheData *QmlDesignerProjectManager::imageCacheData()
{ {
std::call_once(imageCacheFlag, [this]() { std::call_once(imageCacheFlag, [this]() {

View File

@@ -27,6 +27,7 @@
#include <QList> #include <QList>
#include <QObject> #include <QObject>
#include <QTimer>
#include <memory> #include <memory>
#include <mutex> #include <mutex>
@@ -68,6 +69,7 @@ private:
void projectAdded(::ProjectExplorer::Project *project); void projectAdded(::ProjectExplorer::Project *project);
void aboutToRemoveProject(::ProjectExplorer::Project *project); void aboutToRemoveProject(::ProjectExplorer::Project *project);
void projectRemoved(::ProjectExplorer::Project *project); void projectRemoved(::ProjectExplorer::Project *project);
void generatePreview();
ImageCacheData *imageCacheData(); ImageCacheData *imageCacheData();
private: private:
@@ -75,5 +77,6 @@ private:
std::unique_ptr<ImageCacheData> m_imageCacheData; std::unique_ptr<ImageCacheData> m_imageCacheData;
std::unique_ptr<PreviewImageCacheData> m_previewImageCacheData; std::unique_ptr<PreviewImageCacheData> m_previewImageCacheData;
std::unique_ptr<QmlDesignerProjectManagerProjectData> m_projectData; std::unique_ptr<QmlDesignerProjectManagerProjectData> m_projectData;
QTimer m_previewTimer;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner