qmljs: reduce used threads

Change-Id: I8f27037d0cfefd65f1ac060e1505328ea705a670
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Tim Jenssen
2022-08-23 16:27:14 +02:00
parent 275f2a3db8
commit 8310a2f0a9
3 changed files with 22 additions and 7 deletions

View File

@@ -111,6 +111,7 @@ ModelManagerInterface::ModelManagerInterface(QObject *parent)
m_defaultImportPaths(environmentImportPaths()), m_defaultImportPaths(environmentImportPaths()),
m_pluginDumper(new PluginDumper(this)) m_pluginDumper(new PluginDumper(this))
{ {
m_threadPool.setMaxThreadCount(4);
m_futureSynchronizer.setCancelOnWait(false); m_futureSynchronizer.setCancelOnWait(false);
m_indexerDisabled = qEnvironmentVariableIsSet("QTC_NO_CODE_INDEXER"); m_indexerDisabled = qEnvironmentVariableIsSet("QTC_NO_CODE_INDEXER");
@@ -326,6 +327,11 @@ Snapshot ModelManagerInterface::newestSnapshot() const
return m_newestSnapshot; return m_newestSnapshot;
} }
QThreadPool *ModelManagerInterface::threadPool()
{
return &m_threadPool;
}
void ModelManagerInterface::updateSourceFiles(const QStringList &files, void ModelManagerInterface::updateSourceFiles(const QStringList &files,
bool emitDocumentOnDiskChanged) bool emitDocumentOnDiskChanged)
{ {
@@ -340,7 +346,8 @@ QFuture<void> ModelManagerInterface::refreshSourceFiles(const QStringList &sourc
if (sourceFiles.isEmpty()) if (sourceFiles.isEmpty())
return QFuture<void>(); return QFuture<void>();
QFuture<void> result = Utils::runAsync(&ModelManagerInterface::parse, QFuture<void> result = Utils::runAsync(&m_threadPool,
&ModelManagerInterface::parse,
workingCopyInternal(), sourceFiles, workingCopyInternal(), sourceFiles,
this, Dialect(Dialect::Qml), this, Dialect(Dialect::Qml),
emitDocumentOnDiskChanged); emitDocumentOnDiskChanged);
@@ -368,9 +375,13 @@ QFuture<void> ModelManagerInterface::refreshSourceFiles(const QStringList &sourc
void ModelManagerInterface::fileChangedOnDisk(const QString &path) void ModelManagerInterface::fileChangedOnDisk(const QString &path)
{ {
addFuture(Utils::runAsync(&ModelManagerInterface::parse, addFuture(Utils::runAsync(&m_threadPool,
workingCopyInternal(), QStringList(path), &ModelManagerInterface::parse,
this, Dialect(Dialect::AnyLanguage), true)); workingCopyInternal(),
QStringList(path),
this,
Dialect(Dialect::AnyLanguage),
true));
} }
void ModelManagerInterface::removeFiles(const QStringList &files) void ModelManagerInterface::removeFiles(const QStringList &files)
@@ -1191,7 +1202,8 @@ void ModelManagerInterface::maybeScan(const PathsAndLanguages &importPaths)
} }
if (pathToScan.length() >= 1) { if (pathToScan.length() >= 1) {
QFuture<void> result = Utils::runAsync(&ModelManagerInterface::importScan, QFuture<void> result = Utils::runAsync(&m_threadPool,
&ModelManagerInterface::importScan,
workingCopyInternal(), pathToScan, workingCopyInternal(), pathToScan,
this, true, true, false); this, true, true, false);
addFuture(result); addFuture(result);

View File

@@ -133,6 +133,7 @@ public:
QmlJS::Snapshot snapshot() const; QmlJS::Snapshot snapshot() const;
QmlJS::Snapshot newestSnapshot() const; QmlJS::Snapshot newestSnapshot() const;
QThreadPool *threadPool();
void activateScan(); void activateScan();
void updateSourceFiles(const QStringList &files, void updateSourceFiles(const QStringList &files,
@@ -287,6 +288,7 @@ private:
Utils::FutureSynchronizer m_futureSynchronizer; Utils::FutureSynchronizer m_futureSynchronizer;
bool m_indexerDisabled = false; bool m_indexerDisabled = false;
QThreadPool m_threadPool;
}; };
} // namespace QmlJS } // namespace QmlJS

View File

@@ -290,7 +290,8 @@ void PluginDumper::qmlPluginTypeDumpDone(QtcProcess *process)
QStringList dependencies; QStringList dependencies;
}; };
auto future = Utils::runAsync([output, libraryPath](QFutureInterface<CppQmlTypesInfo>& future) auto future = Utils::runAsync(m_modelManager->threadPool(),
[output, libraryPath](QFutureInterface<CppQmlTypesInfo>& future)
{ {
CppQmlTypesInfo infos; CppQmlTypesInfo infos;
CppQmlTypesLoader::parseQmlTypeDescriptions(output, &infos.objectsList, &infos.moduleApis, &infos.dependencies, CppQmlTypesLoader::parseQmlTypeDescriptions(output, &infos.objectsList, &infos.moduleApis, &infos.dependencies,
@@ -343,7 +344,7 @@ void PluginDumper::pluginChanged(const QString &pluginLibrary)
QFuture<PluginDumper::QmlTypeDescription> PluginDumper::loadQmlTypeDescription(const FilePaths &paths) const QFuture<PluginDumper::QmlTypeDescription> PluginDumper::loadQmlTypeDescription(const FilePaths &paths) const
{ {
auto future = Utils::runAsync([=](QFutureInterface<PluginDumper::QmlTypeDescription> &future) auto future = Utils::runAsync(m_modelManager->threadPool(), [=](QFutureInterface<PluginDumper::QmlTypeDescription> &future)
{ {
PluginDumper::QmlTypeDescription result; PluginDumper::QmlTypeDescription result;