From 91f136ef3ab75471cabcaed9dc16dad9f504add8 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 12 May 2021 15:12:48 +0200 Subject: [PATCH] Use Utils::FutureSynchronizer instead of QFutureSynchronizer Change-Id: Iecfa676f58e5ca82be7c9c94233dcc8d3654c2d7 Reviewed-by: Eike Ziller Reviewed-by: Qt CI Bot --- .../clangeditordocumentprocessor.h | 4 ++-- .../clangmodelmanagersupport.cpp | 2 +- .../clangcodemodel/clangmodelmanagersupport.h | 4 ++-- .../cmakeprojectmanager/cmakebuildsystem.h | 5 ++--- src/plugins/cppeditor/cpptypehierarchy.cpp | 22 +++---------------- src/plugins/cppeditor/cpptypehierarchy.h | 5 ++--- .../cpptools/builtinindexingsupport.cpp | 12 ---------- src/plugins/cpptools/builtinindexingsupport.h | 4 ++-- src/plugins/git/gitclient.h | 4 ++-- src/plugins/ios/createsimulatordialog.cpp | 6 ++--- src/plugins/ios/createsimulatordialog.h | 5 +++-- src/plugins/ios/simulatorinfomodel.cpp | 9 ++++---- src/plugins/ios/simulatorinfomodel.h | 6 +++-- .../qmljseditor/qmljssemantichighlighter.cpp | 2 +- .../qmljseditor/qmljssemantichighlighter.h | 4 ++-- src/tools/clangbackend/source/clangjobs.cpp | 6 ++--- 16 files changed, 36 insertions(+), 64 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index 0d3e23c02b2..90890c47102 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -31,9 +31,9 @@ #include #include +#include #include -#include #include #include @@ -146,7 +146,7 @@ private: QVector m_tokenInfos; CppTools::SemanticHighlighter m_semanticHighlighter; CppTools::BuiltinEditorDocumentProcessor m_builtinProcessor; - QFutureSynchronizer m_parserSynchronizer; + Utils::FutureSynchronizer m_parserSynchronizer; }; } // namespace Internal diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 2bd75b7e472..8215e0ba8a2 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -327,7 +327,7 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr auto future = Utils::runAsync(&Internal::generateCompilationDB, projectInfo, CompilationDbPurpose::CodeModel); generatorWatcher->setFuture(future); - m_generatorSynchronizer.addFuture(QFuture(future)); + m_generatorSynchronizer.addFuture(future); } ClangdClient *ClangModelManagerSupport::clientForProject( diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.h b/src/plugins/clangcodemodel/clangmodelmanagersupport.h index f3c1f69d7f2..16f84e71637 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.h +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.h @@ -30,9 +30,9 @@ #include +#include #include -#include #include #include @@ -135,7 +135,7 @@ private: std::unique_ptr m_refactoringEngine; QHash m_projectSettings; - QFutureSynchronizer m_generatorSynchronizer; + Utils::FutureSynchronizer m_generatorSynchronizer; }; class ClangModelManagerSupportProvider : public CppTools::ModelManagerSupportProvider diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h index c1f3c8f5d75..097d74542d7 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h @@ -33,10 +33,9 @@ #include #include +#include #include -#include - namespace ProjectExplorer { class ExtraCompiler; } namespace CppTools { @@ -184,7 +183,7 @@ private: // CTest integration QString m_ctestPath; QList m_testNames; - QFutureSynchronizer m_futureSynchronizer; + Utils::FutureSynchronizer m_futureSynchronizer; }; } // namespace Internal diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp index d2e1b8c7a5e..4b66ecf6c80 100644 --- a/src/plugins/cppeditor/cpptypehierarchy.cpp +++ b/src/plugins/cppeditor/cpptypehierarchy.cpp @@ -182,18 +182,6 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget() m_synchronizer.setCancelOnWait(true); } -void CppTypeHierarchyWidget::updateSynchronizer() -{ - const QList> futures = m_synchronizer.futures(); - - m_synchronizer.clearFutures(); - - for (const QFuture &future : futures) { - if (!future.isFinished()) - m_synchronizer.addFuture(future); - } -} - void CppTypeHierarchyWidget::perform() { if (m_future.isRunning()) @@ -201,8 +189,6 @@ void CppTypeHierarchyWidget::perform() m_showOldClass = false; - updateSynchronizer(); - auto editor = qobject_cast(Core::EditorManager::currentEditor()); if (!editor) { showNoTypeHierarchyLabel(); @@ -219,7 +205,7 @@ void CppTypeHierarchyWidget::perform() m_future = CppElementEvaluator::asyncExecute(widget); m_futureWatcher.setFuture(QFuture(m_future)); - m_synchronizer.addFuture(QFuture(m_future)); + m_synchronizer.addFuture(m_future); Core::ProgressManager::addTask(m_future, tr("Evaluating Type Hierarchy"), "TypeHierarchy"); } @@ -231,20 +217,18 @@ void CppTypeHierarchyWidget::performFromExpression(const QString &expression, co m_showOldClass = true; - updateSynchronizer(); - showProgress(); m_future = CppElementEvaluator::asyncExecute(expression, fileName); m_futureWatcher.setFuture(QFuture(m_future)); - m_synchronizer.addFuture(QFuture(m_future)); + m_synchronizer.addFuture(m_future); Core::ProgressManager::addTask(m_future, tr("Evaluating Type Hierarchy"), "TypeHierarchy"); } void CppTypeHierarchyWidget::displayHierarchy() { - updateSynchronizer(); + m_synchronizer.flushFinishedFutures(); hideProgress(); clearTypeHierarchy(); diff --git a/src/plugins/cppeditor/cpptypehierarchy.h b/src/plugins/cppeditor/cpptypehierarchy.h index a8c6a1745be..5f099968769 100644 --- a/src/plugins/cppeditor/cpptypehierarchy.h +++ b/src/plugins/cppeditor/cpptypehierarchy.h @@ -26,10 +26,10 @@ #pragma once #include +#include #include #include -#include #include #include #include @@ -94,7 +94,6 @@ private: void clearTypeHierarchy(); void onItemActivated(const QModelIndex &index); void onItemDoubleClicked(const QModelIndex &index); - void updateSynchronizer(); CppEditorWidget *m_cppEditor = nullptr; Utils::NavigationTreeView *m_treeView = nullptr; @@ -106,7 +105,7 @@ private: QLabel *m_infoLabel = nullptr; QFuture> m_future; QFutureWatcher m_futureWatcher; - QFutureSynchronizer m_synchronizer; + Utils::FutureSynchronizer m_synchronizer; Utils::ProgressIndicator *m_progressIndicator = nullptr; QString m_oldClass; bool m_showOldClass = false; diff --git a/src/plugins/cpptools/builtinindexingsupport.cpp b/src/plugins/cpptools/builtinindexingsupport.cpp index ebdd35509fb..d7aebe580d5 100644 --- a/src/plugins/cpptools/builtinindexingsupport.cpp +++ b/src/plugins/cpptools/builtinindexingsupport.cpp @@ -356,18 +356,6 @@ QFuture BuiltinIndexingSupport::refreshSourceFiles( params.sourceFiles = sourceFiles; QFuture result = Utils::runAsync(mgr->sharedThreadPool(), parse, params); - - if (m_synchronizer.futures().size() > 10) { - QList > futures = m_synchronizer.futures(); - - m_synchronizer.clearFutures(); - - foreach (const QFuture &future, futures) { - if (!(future.isFinished() || future.isCanceled())) - m_synchronizer.addFuture(future); - } - } - m_synchronizer.addFuture(result); if (mode == CppModelManager::ForcedProgressNotification || sourceFiles.count() > 1) { diff --git a/src/plugins/cpptools/builtinindexingsupport.h b/src/plugins/cpptools/builtinindexingsupport.h index 9a61d60ec96..ddc797e2a00 100644 --- a/src/plugins/cpptools/builtinindexingsupport.h +++ b/src/plugins/cpptools/builtinindexingsupport.h @@ -28,7 +28,7 @@ #include "cppindexingsupport.h" #include "cppmodelmanager.h" -#include +#include namespace CppTools { namespace Internal { @@ -47,7 +47,7 @@ public: static bool isFindErrorsIndexingActive(); private: - QFutureSynchronizer m_synchronizer; + Utils::FutureSynchronizer m_synchronizer; }; } // namespace Internal diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 54bd2b96d16..a8056fd6ead 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -33,8 +33,8 @@ #include #include +#include -#include #include #include #include @@ -425,7 +425,7 @@ private: QString m_diffCommit; QStringList m_updatedSubmodules; bool m_disableEditor = false; - QFutureSynchronizer m_synchronizer; // for commit updates + Utils::FutureSynchronizer m_synchronizer; // for commit updates }; class GitRemote : public Core::IVersionControl::RepoUrl diff --git a/src/plugins/ios/createsimulatordialog.cpp b/src/plugins/ios/createsimulatordialog.cpp index 8dfda8ccec2..1bfcc25f71e 100644 --- a/src/plugins/ios/createsimulatordialog.cpp +++ b/src/plugins/ios/createsimulatordialog.cpp @@ -62,14 +62,14 @@ CreateSimulatorDialog::CreateSimulatorDialog(QWidget *parent) : }); m_futureSync.setCancelOnWait(true); - m_futureSync.addFuture(QFuture(Utils::onResultReady(SimulatorControl::updateDeviceTypes(), this, - &CreateSimulatorDialog::populateDeviceTypes))); + m_futureSync.addFuture(Utils::onResultReady(SimulatorControl::updateDeviceTypes(), this, + &CreateSimulatorDialog::populateDeviceTypes)); QFuture> runtimesfuture = SimulatorControl::updateRuntimes(); Utils::onResultReady(runtimesfuture, this, [this](const QList &runtimes) { m_runtimes = runtimes; }); - m_futureSync.addFuture(QFuture(runtimesfuture)); + m_futureSync.addFuture(runtimesfuture); populateRuntimes(DeviceTypeInfo()); } diff --git a/src/plugins/ios/createsimulatordialog.h b/src/plugins/ios/createsimulatordialog.h index 5c1a0c1ba5f..e2381074a77 100644 --- a/src/plugins/ios/createsimulatordialog.h +++ b/src/plugins/ios/createsimulatordialog.h @@ -26,7 +26,8 @@ #pragma once #include -#include + +#include namespace Ios { namespace Internal { @@ -57,7 +58,7 @@ private: void populateRuntimes(const DeviceTypeInfo &deviceType); private: - QFutureSynchronizer m_futureSync; + Utils::FutureSynchronizer m_futureSync; Ui::CreateSimulatorDialog *m_ui = nullptr; SimulatorControl *m_simControl = nullptr; QList m_runtimes; diff --git a/src/plugins/ios/simulatorinfomodel.cpp b/src/plugins/ios/simulatorinfomodel.cpp index 2ca0427aace..923338ccffd 100644 --- a/src/plugins/ios/simulatorinfomodel.cpp +++ b/src/plugins/ios/simulatorinfomodel.cpp @@ -126,13 +126,12 @@ QModelIndex SimulatorInfoModel::parent(const QModelIndex &) const void SimulatorInfoModel::requestSimulatorInfo() { - if (!m_fetchFuture.futures().isEmpty() && !m_fetchFuture.futures().at(0).isFinished()) + m_fetchFuture.flushFinishedFutures(); + if (!m_fetchFuture.isEmpty()) return; // Ignore the request if the last request is still pending. - m_fetchFuture.clearFutures(); - m_fetchFuture.addFuture(QFuture(Utils::onResultReady( - SimulatorControl::updateAvailableSimulators(), - this, &SimulatorInfoModel::populateSimulators))); + m_fetchFuture.addFuture(Utils::onResultReady(SimulatorControl::updateAvailableSimulators(), + this, &SimulatorInfoModel::populateSimulators)); } void SimulatorInfoModel::populateSimulators(const SimulatorInfoList &simulatorList) diff --git a/src/plugins/ios/simulatorinfomodel.h b/src/plugins/ios/simulatorinfomodel.h index 174865e7b56..1810dda304e 100644 --- a/src/plugins/ios/simulatorinfomodel.h +++ b/src/plugins/ios/simulatorinfomodel.h @@ -27,8 +27,10 @@ #include "simulatorcontrol.h" +#include + #include -#include + namespace Ios { namespace Internal { @@ -55,7 +57,7 @@ private: void populateSimulators(const SimulatorInfoList &simulatorList); private: - QFutureSynchronizer m_fetchFuture; + Utils::FutureSynchronizer m_fetchFuture; SimulatorInfoList m_simList; }; diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp index 2e05c7aba0b..9db93925a34 100644 --- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp +++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp @@ -568,7 +568,7 @@ void SemanticHighlighter::rerun(const QmlJSTools::SemanticInfo &semanticInfo) auto future = Utils::runAsync(QThread::LowestPriority, &SemanticHighlighter::run, this, semanticInfo); m_watcher.setFuture(future); - m_futureSynchronizer.addFuture(QFuture(future)); + m_futureSynchronizer.addFuture(future); } void SemanticHighlighter::cancel() diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.h b/src/plugins/qmljseditor/qmljssemantichighlighter.h index ffa45bbaace..f36b9b5518a 100644 --- a/src/plugins/qmljseditor/qmljssemantichighlighter.h +++ b/src/plugins/qmljseditor/qmljssemantichighlighter.h @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include #include @@ -90,7 +90,7 @@ private: QHash m_formats; QHash m_extraFormats; QVector m_diagnosticRanges; - QFutureSynchronizer m_futureSynchronizer; + Utils::FutureSynchronizer m_futureSynchronizer; }; } // namespace QmlJSEditor diff --git a/src/tools/clangbackend/source/clangjobs.cpp b/src/tools/clangbackend/source/clangjobs.cpp index f1df7dcd492..51b875f65f6 100644 --- a/src/tools/clangbackend/source/clangjobs.cpp +++ b/src/tools/clangbackend/source/clangjobs.cpp @@ -29,10 +29,10 @@ #include "clangiasyncjob.h" #include -#include #include #include +#include #include namespace ClangBackEnd { @@ -63,7 +63,7 @@ Jobs::~Jobs() foreach (IAsyncJob *asyncJob, m_running.keys()) asyncJob->preventFinalization(); - QFutureSynchronizer waitForFinishedJobs; + Utils::FutureSynchronizer waitForFinishedJobs; foreach (const RunningJob &runningJob, m_running.values()) waitForFinishedJobs.addFuture(runningJob.future); @@ -114,7 +114,7 @@ JobRequests Jobs::stop() queue().clear(); // Wait until currently running jobs finish. - QFutureSynchronizer waitForFinishedJobs; + Utils::FutureSynchronizer waitForFinishedJobs; foreach (const RunningJob &runningJob, m_running.values()) waitForFinishedJobs.addFuture(runningJob.future);