forked from qt-creator/qt-creator
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:
@@ -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]() {
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user