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,
|
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]() {
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user