QMakeProject: Use QtConcurrent invocation for async run

Change-Id: I9e5027acb71eb03efef0f5f38a57286c37e74983
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Jarek Kobus
2023-03-03 20:22:51 +01:00
parent 2f5aad0cdb
commit 814d2f732e
3 changed files with 13 additions and 10 deletions

View File

@@ -30,6 +30,7 @@
#include <utils/QtConcurrentTools> #include <utils/QtConcurrentTools>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/asynctask.h>
#include <utils/filesystemwatcher.h> #include <utils/filesystemwatcher.h>
#include <utils/mimeutils.h> #include <utils/mimeutils.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
@@ -1284,7 +1285,7 @@ void QmakeProFile::asyncUpdate()
if (!includedInExactParse()) if (!includedInExactParse())
m_readerExact->setExact(false); m_readerExact->setExact(false);
QmakeEvalInput input = evalInput(); QmakeEvalInput input = evalInput();
QFuture<QmakeEvalResultPtr> future = runAsync(ProjectExplorerPlugin::sharedThreadPool(), QFuture<QmakeEvalResultPtr> future = Utils::asyncRun(ProjectExplorerPlugin::sharedThreadPool(),
QThread::LowestPriority, QThread::LowestPriority,
&QmakeProFile::asyncEvaluate, this, input); &QmakeProFile::asyncEvaluate, this, input);
m_parseFutureWatcher->setFuture(future); m_parseFutureWatcher->setFuture(future);
@@ -1630,9 +1631,9 @@ QmakeEvalResultPtr QmakeProFile::evaluate(const QmakeEvalInput &input)
return result; return result;
} }
void QmakeProFile::asyncEvaluate(QFutureInterface<QmakeEvalResultPtr> &fi, QmakeEvalInput input) void QmakeProFile::asyncEvaluate(QPromise<QmakeEvalResultPtr> &promise, QmakeEvalInput input)
{ {
fi.reportResult(evaluate(input)); promise.addResult(evaluate(input));
} }
bool sortByParserNodes(Node *a, Node *b) bool sortByParserNodes(Node *a, Node *b)

View File

@@ -336,7 +336,7 @@ private:
static Internal::QmakeEvalResultPtr evaluate(const Internal::QmakeEvalInput &input); static Internal::QmakeEvalResultPtr evaluate(const Internal::QmakeEvalInput &input);
void applyEvaluate(const Internal::QmakeEvalResultPtr &parseResult); void applyEvaluate(const Internal::QmakeEvalResultPtr &parseResult);
void asyncEvaluate(QFutureInterface<Internal::QmakeEvalResultPtr> &fi, void asyncEvaluate(QPromise<Internal::QmakeEvalResultPtr> &promise,
Internal::QmakeEvalInput input); Internal::QmakeEvalInput input);
void cleanupProFileReaders(); void cleanupProFileReaders();

View File

@@ -40,15 +40,17 @@
#include <proparser/qmakevfs.h> #include <proparser/qmakevfs.h>
#include <proparser/qmakeglobals.h> #include <proparser/qmakeglobals.h>
#include <qmljs/qmljsmodelmanagerinterface.h>
#include <qtsupport/profilereader.h> #include <qtsupport/profilereader.h>
#include <qtsupport/qtcppkitinfo.h> #include <qtsupport/qtcppkitinfo.h>
#include <qtsupport/qtkitinformation.h> #include <qtsupport/qtkitinformation.h>
#include <qtsupport/qtversionmanager.h> #include <qtsupport/qtversionmanager.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/asynctask.h>
#include <utils/qtcprocess.h> #include <utils/qtcprocess.h>
#include <utils/runextensions.h> #include <utils/runextensions.h>
#include <qmljs/qmljsmodelmanagerinterface.h>
#include <QDebug> #include <QDebug>
#include <QDir> #include <QDir>
@@ -923,9 +925,9 @@ const FilePath &QmakeBuildSystem::qmakeSysroot() const
void QmakeBuildSystem::destroyProFileReader(QtSupport::ProFileReader *reader) void QmakeBuildSystem::destroyProFileReader(QtSupport::ProFileReader *reader)
{ {
// The ProFileReader destructor is super expensive (but thread-safe). // The ProFileReader destructor is super expensive (but thread-safe).
const auto deleteFuture = runAsync(ProjectExplorerPlugin::sharedThreadPool(), QThread::LowestPriority, const auto deleteFuture = Utils::asyncRun(ProjectExplorerPlugin::sharedThreadPool(),
[reader] { delete reader; }); [reader] { delete reader; });
onFinished(deleteFuture, this, [this](const QFuture<void> &) { Utils::onFinished(deleteFuture, this, [this](const QFuture<void> &) {
if (!--m_qmakeGlobalsRefCnt) { if (!--m_qmakeGlobalsRefCnt) {
deregisterFromCacheManager(); deregisterFromCacheManager();
m_qmakeGlobals.reset(); m_qmakeGlobals.reset();