Allow blocking auto files refresh

While importing assets, qml files are generated under the import
path and this triggers files update every time a file is added.
This results into high CPU usage.

Task-number: QDS-1675
Change-Id: Ia0775ef78bbffedfaf2c140365ee31718e7ee3a4
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Vikas Pachdha
2020-03-03 12:30:28 +01:00
committed by Tim Jenssen
parent 40899c7209
commit 07cbc49d33
2 changed files with 30 additions and 0 deletions

View File

@@ -57,11 +57,16 @@
#include <QDebug> #include <QDebug>
#include <QRegularExpression> #include <QRegularExpression>
#include <QTextCodec> #include <QTextCodec>
#include <QLoggingCategory>
using namespace Core; using namespace Core;
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace QmlProjectManager::Internal; using namespace QmlProjectManager::Internal;
namespace {
Q_LOGGING_CATEGORY(infoLogger, "QmlProjectManager.QmlBuildSystem", QtInfoMsg)
}
namespace QmlProjectManager { namespace QmlProjectManager {
QmlProject::QmlProject(const Utils::FilePath &fileName) QmlProject::QmlProject(const Utils::FilePath &fileName)
@@ -276,6 +281,10 @@ QStringList QmlBuildSystem::makeAbsolute(const Utils::FilePath &path, const QStr
void QmlBuildSystem::refreshFiles(const QSet<QString> &/*added*/, const QSet<QString> &removed) void QmlBuildSystem::refreshFiles(const QSet<QString> &/*added*/, const QSet<QString> &removed)
{ {
if (m_blockFilesUpdate) {
qCDebug(infoLogger) << "Auto files refresh blocked.";
return;
}
refresh(Files); refresh(Files);
if (!removed.isEmpty()) { if (!removed.isEmpty()) {
if (auto modelManager = QmlJS::ModelManagerInterface::instance()) if (auto modelManager = QmlJS::ModelManagerInterface::instance())

View File

@@ -104,6 +104,27 @@ public:
QPointer<QmlProjectItem> m_projectItem; QPointer<QmlProjectItem> m_projectItem;
Utils::FilePath m_canonicalProjectDir; Utils::FilePath m_canonicalProjectDir;
private:
bool m_blockFilesUpdate = false;
friend class FilesUpdateBlocker;
};
class FilesUpdateBlocker {
public:
FilesUpdateBlocker(QmlBuildSystem* bs): m_bs(bs) {
if (m_bs)
m_bs->m_blockFilesUpdate = true;
}
~FilesUpdateBlocker() {
if (m_bs) {
m_bs->m_blockFilesUpdate = false;
m_bs->refresh(QmlBuildSystem::Everything);
}
}
private:
QPointer<QmlBuildSystem> m_bs;
}; };
class QMLPROJECTMANAGER_EXPORT QmlProject : public ProjectExplorer::Project class QMLPROJECTMANAGER_EXPORT QmlProject : public ProjectExplorer::Project