forked from qt-creator/qt-creator
QMakeProject: Use QtConcurrent invocation for async run
Change-Id: I9e5027acb71eb03efef0f5f38a57286c37e74983 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user