diff options
author | Marco Bubke <marco.bubke@qt.io> | 2019-02-19 20:46:08 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2019-02-22 12:09:09 +0000 |
commit | f009dad9ef2f286248d7da8678134f587bda22d0 (patch) | |
tree | 809c289f2421a605e29138d94627b576b07764ac /src | |
parent | 8c781f7e6aa763a4caa21c5f5c5504b79634ea46 (diff) |
ClangPchManager: Show extra progress for dependency building
Task-number: QTCREATORBUG-21956
Change-Id: Id244c9ef9fc7825489daa143b21fcca78164d8c7
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src')
8 files changed, 59 insertions, 29 deletions
diff --git a/src/libs/clangsupport/clangsupport_global.h b/src/libs/clangsupport/clangsupport_global.h index 59a4085dee..57ce18e195 100644 --- a/src/libs/clangsupport/clangsupport_global.h +++ b/src/libs/clangsupport/clangsupport_global.h @@ -235,11 +235,5 @@ enum class SymbolTag : uchar using SymbolTags = Utils::SizedArray<SymbolTag, 7>; -enum class ProgressType -{ - Invalid, - PrecompiledHeader, - Indexing -}; - -} +enum class ProgressType { Invalid, PrecompiledHeader, Indexing, DependencyCreation }; +} // namespace ClangBackEnd diff --git a/src/libs/clangsupport/progressmessage.h b/src/libs/clangsupport/progressmessage.h index e4d79c8416..75902a90c3 100644 --- a/src/libs/clangsupport/progressmessage.h +++ b/src/libs/clangsupport/progressmessage.h @@ -36,23 +36,27 @@ class ProgressMessage public: ProgressMessage() = default; ProgressMessage(ProgressType progressType, int progress, int total) - : progressType(progressType), - progress(progress), - total(total) + : progress(progress) + , total(total) + , progressType(progressType) {} friend QDataStream &operator<<(QDataStream &out, const ProgressMessage &message) { out << message.progress; out << message.total; + out << static_cast<int>(message.progressType); return out; } friend QDataStream &operator>>(QDataStream &in, ProgressMessage &message) { + int progressTupe; in >> message.progress; in >> message.total; + in >> progressTupe; + message.progressType = static_cast<ProgressType>(progressTupe); return in; } @@ -69,9 +73,9 @@ public: } public: - ProgressType progressType = ProgressType::Invalid; int progress = 0; int total = 0; + ProgressType progressType = ProgressType::Invalid; }; DECLARE_MESSAGE(ProgressMessage) diff --git a/src/plugins/clangpchmanager/clangpchmanagerplugin.cpp b/src/plugins/clangpchmanager/clangpchmanagerplugin.cpp index 90ba8f62bc..8f7ea72242 100644 --- a/src/plugins/clangpchmanager/clangpchmanagerplugin.cpp +++ b/src/plugins/clangpchmanager/clangpchmanagerplugin.cpp @@ -65,12 +65,19 @@ public: Sqlite::Database database{Utils::PathString{Core::ICore::userResourcePath() + "/symbol-experimental-v1.db"}, 1000ms}; ClangBackEnd::RefactoringDatabaseInitializer<Sqlite::Database> databaseInitializer{database}; ClangBackEnd::FilePathCaching filePathCache{database}; - ClangPchManager::ProgressManager progressManager{ - [] (QFutureInterface<void> &promise) { - auto title = QCoreApplication::translate("ClangPchProgressManager", "Creating PCHs", "PCH stands for precompiled header"); - Core::ProgressManager::addTask(promise.future(), title, "pch creation", nullptr); + ClangPchManager::ProgressManager pchCreationProgressManager{[](QFutureInterface<void> &promise) { + auto title = QCoreApplication::translate("ClangPchProgressManager", + "Creating PCHs", + "PCH stands for precompiled header"); + Core::ProgressManager::addTask(promise.future(), title, "pch creation", nullptr); }}; - PchManagerClient pchManagerClient{progressManager}; + ClangPchManager::ProgressManager dependencyCreationProgressManager{ + [](QFutureInterface<void> &promise) { + auto title = QCoreApplication::translate("ClangPchProgressManager", + "Creating Dependencies"); + Core::ProgressManager::addTask(promise.future(), title, "dependency creation", nullptr); + }}; + PchManagerClient pchManagerClient{pchCreationProgressManager, dependencyCreationProgressManager}; PchManagerConnectionClient connectionClient{&pchManagerClient}; QtCreatorProjectUpdater<PchManagerProjectUpdater> projectUpdate{connectionClient.serverProxy(), pchManagerClient, diff --git a/src/plugins/clangpchmanager/pchmanagerclient.cpp b/src/plugins/clangpchmanager/pchmanagerclient.cpp index 56e64b2b56..4b0b5430d7 100644 --- a/src/plugins/clangpchmanager/pchmanagerclient.cpp +++ b/src/plugins/clangpchmanager/pchmanagerclient.cpp @@ -53,7 +53,16 @@ void PchManagerClient::precompiledHeadersUpdated(ClangBackEnd::PrecompiledHeader void PchManagerClient::progress(ClangBackEnd::ProgressMessage &&message) { - m_progressManager.setProgress(message.progress, message.total); + switch (message.progressType) { + case ClangBackEnd::ProgressType::PrecompiledHeader: + m_pchCreationProgressManager.setProgress(message.progress, message.total); + break; + case ClangBackEnd::ProgressType::DependencyCreation: + m_dependencyCreationProgressManager.setProgress(message.progress, message.total); + break; + default: + break; + } } void PchManagerClient::precompiledHeaderRemoved(const QString &projectPartId) diff --git a/src/plugins/clangpchmanager/pchmanagerclient.h b/src/plugins/clangpchmanager/pchmanagerclient.h index d7c0b68f71..ccbd03299a 100644 --- a/src/plugins/clangpchmanager/pchmanagerclient.h +++ b/src/plugins/clangpchmanager/pchmanagerclient.h @@ -42,8 +42,10 @@ class CLANGPCHMANAGER_EXPORT PchManagerClient final : public ClangBackEnd::PchMa { friend class PchManagerNotifierInterface; public: - PchManagerClient(ProgressManagerInterface &progressManager) - : m_progressManager(progressManager) + PchManagerClient(ProgressManagerInterface &pchCreationProgressManager, + ProgressManagerInterface &dependencyCreationProgressManager) + : m_pchCreationProgressManager(pchCreationProgressManager) + , m_dependencyCreationProgressManager(dependencyCreationProgressManager) {} void alive() override; @@ -78,7 +80,8 @@ private: ClangBackEnd::ProjectPartPchs m_projectPartPchs; std::vector<PchManagerNotifierInterface*> m_notifiers; PchManagerConnectionClient *m_connectionClient=nullptr; - ProgressManagerInterface &m_progressManager; + ProgressManagerInterface &m_pchCreationProgressManager; + ProgressManagerInterface &m_dependencyCreationProgressManager; }; } // namespace ClangPchManager diff --git a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp index f4afaf9210..17af1a2bc3 100644 --- a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp +++ b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp @@ -224,12 +224,19 @@ struct Data // because we have a cycle dependency clangPchManagerServer, includeWatcher}; PrecompiledHeaderStorage<> preCompiledHeaderStorage{database}; - ClangBackEnd::ProgressCounter progressCounter{[&](int progress, int total) { - executeInLoop([&] { clangPchManagerServer.setProgress(progress, total); }); + ClangBackEnd::ProgressCounter pchCreationProgressCounter{[&](int progress, int total) { + executeInLoop([&] { + clangPchManagerServer.setPchCreationProgress(progress, total); + }); + }}; + ClangBackEnd::ProgressCounter dependencyCreationProgressCounter{[&](int progress, int total) { + executeInLoop([&] { + clangPchManagerServer.setDependencyCreationProgress(progress, total); + }); }}; ClangBackEnd::PchTaskQueue pchTaskQueue{systemTaskScheduler, projectTaskScheduler, - progressCounter, + pchCreationProgressCounter, preCompiledHeaderStorage, database}; ClangBackEnd::PchTasksMerger pchTaskMerger{pchTaskQueue}; @@ -248,19 +255,19 @@ struct Data // because we have a cycle dependency database}; ClangBackEnd::PchTaskGenerator pchTaskGenerator{buildDependencyProvider, pchTaskMerger, - progressCounter}; + dependencyCreationProgressCounter}; PchManagerServer clangPchManagerServer{includeWatcher, pchTaskGenerator, projectParts, generatedFiles}; TaskScheduler systemTaskScheduler{pchCreatorManager, pchTaskQueue, - progressCounter, + pchCreationProgressCounter, std::thread::hardware_concurrency(), ClangBackEnd::CallDoInMainThreadAfterFinished::No}; TaskScheduler projectTaskScheduler{pchCreatorManager, pchTaskQueue, - progressCounter, + pchCreationProgressCounter, std::thread::hardware_concurrency(), ClangBackEnd::CallDoInMainThreadAfterFinished::Yes}; }; diff --git a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp index 06adccff5b..999da26448 100644 --- a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp +++ b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp @@ -132,9 +132,14 @@ void PchManagerServer::pathsChanged(const FilePathIds &/*filePathIds*/) { } -void PchManagerServer::setProgress(int progress, int total) +void PchManagerServer::setPchCreationProgress(int progress, int total) { client()->progress({ProgressType::PrecompiledHeader, progress, total}); } +void PchManagerServer::setDependencyCreationProgress(int progress, int total) +{ + client()->progress({ProgressType::DependencyCreation, progress, total}); +} + } // namespace ClangBackEnd diff --git a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h index 0c4bd0cc66..bf6b5bd7e7 100644 --- a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h +++ b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h @@ -60,7 +60,8 @@ public: void pathsWithIdsChanged(const Utils::SmallStringVector &ids) override; void pathsChanged(const FilePathIds &filePathIds) override; - void setProgress(int progress, int total); + void setPchCreationProgress(int progress, int total); + void setDependencyCreationProgress(int progress, int total); private: ClangPathWatcherInterface &m_fileSystemWatcher; |