aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmlprojectmanager
diff options
context:
space:
mode:
authorVikas Pachdha <vikas.pachdha@qt.io>2020-03-03 12:30:28 +0100
committerTim Jenssen <tim.jenssen@qt.io>2020-03-03 12:50:17 +0000
commit07cbc49d33bdb2308639972013d358d0c112e5a5 (patch)
tree884981330aa42fc478c3249f403ff7e955183a4c /src/plugins/qmlprojectmanager
parent40899c7209c5054502361cc0c383be36fec82e54 (diff)
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>
Diffstat (limited to 'src/plugins/qmlprojectmanager')
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.cpp9
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.h21
2 files changed, 30 insertions, 0 deletions
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index fc622179ca..fe7542e8cb 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -57,11 +57,16 @@
#include <QDebug>
#include <QRegularExpression>
#include <QTextCodec>
+#include <QLoggingCategory>
using namespace Core;
using namespace ProjectExplorer;
using namespace QmlProjectManager::Internal;
+namespace {
+Q_LOGGING_CATEGORY(infoLogger, "QmlProjectManager.QmlBuildSystem", QtInfoMsg)
+}
+
namespace QmlProjectManager {
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)
{
+ if (m_blockFilesUpdate) {
+ qCDebug(infoLogger) << "Auto files refresh blocked.";
+ return;
+ }
refresh(Files);
if (!removed.isEmpty()) {
if (auto modelManager = QmlJS::ModelManagerInterface::instance())
diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h
index 0cff152898..acd8bc1094 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.h
+++ b/src/plugins/qmlprojectmanager/qmlproject.h
@@ -104,6 +104,27 @@ public:
QPointer<QmlProjectItem> m_projectItem;
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