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 | |
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>
-rw-r--r-- | src/libs/clangsupport/clangsupport_global.h | 10 | ||||
-rw-r--r-- | src/libs/clangsupport/progressmessage.h | 12 | ||||
-rw-r--r-- | src/plugins/clangpchmanager/clangpchmanagerplugin.cpp | 17 | ||||
-rw-r--r-- | src/plugins/clangpchmanager/pchmanagerclient.cpp | 11 | ||||
-rw-r--r-- | src/plugins/clangpchmanager/pchmanagerclient.h | 9 | ||||
-rw-r--r-- | src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp | 19 | ||||
-rw-r--r-- | src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp | 7 | ||||
-rw-r--r-- | src/tools/clangpchmanagerbackend/source/pchmanagerserver.h | 3 | ||||
-rw-r--r-- | tests/unit/unittest/pchmanagerclient-test.cpp | 16 | ||||
-rw-r--r-- | tests/unit/unittest/pchmanagerserver-test.cpp | 22 | ||||
-rw-r--r-- | tests/unit/unittest/projectupdater-test.cpp | 6 | ||||
-rw-r--r-- | tests/unit/unittest/refactoringprojectupdater-test.cpp | 6 |
12 files changed, 97 insertions, 41 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; diff --git a/tests/unit/unittest/pchmanagerclient-test.cpp b/tests/unit/unittest/pchmanagerclient-test.cpp index d35e595b04..bd482d73c1 100644 --- a/tests/unit/unittest/pchmanagerclient-test.cpp +++ b/tests/unit/unittest/pchmanagerclient-test.cpp @@ -53,9 +53,11 @@ using testing::Not; class PchManagerClient : public ::testing::Test { protected: - NiceMock<MockProgressManager> mockProgressManager; + NiceMock<MockProgressManager> mockPchCreationProgressManager; + NiceMock<MockProgressManager> mockDependencyCreationProgressManager; + ClangPchManager::PchManagerClient client{mockPchCreationProgressManager, + mockDependencyCreationProgressManager}; NiceMock<MockPchManagerServer> mockPchManagerServer; - ClangPchManager::PchManagerClient client{mockProgressManager}; NiceMock<MockPchManagerNotifier> mockPchManagerNotifier{client}; Sqlite::Database database{":memory:", Sqlite::JournalMode::Memory}; ClangBackEnd::RefactoringDatabaseInitializer<Sqlite::Database> initializer{database}; @@ -158,11 +160,17 @@ TEST_F(PchManagerClient, ProjectPartPchForProjectPartIdIsUpdated) 42); } -TEST_F(PchManagerClient, SetProgress) +TEST_F(PchManagerClient, SetPchCreationProgress) { - EXPECT_CALL(mockProgressManager, setProgress(10, 20)); + EXPECT_CALL(mockPchCreationProgressManager, setProgress(10, 20)); client.progress({ClangBackEnd::ProgressType::PrecompiledHeader, 10, 20}); } +TEST_F(PchManagerClient, SetDependencyCreationProgress) +{ + EXPECT_CALL(mockDependencyCreationProgressManager, setProgress(30, 40)); + + client.progress({ClangBackEnd::ProgressType::DependencyCreation, 30, 40}); } +} // namespace diff --git a/tests/unit/unittest/pchmanagerserver-test.cpp b/tests/unit/unittest/pchmanagerserver-test.cpp index 0cb6e3d1ba..5a2ca172c0 100644 --- a/tests/unit/unittest/pchmanagerserver-test.cpp +++ b/tests/unit/unittest/pchmanagerserver-test.cpp @@ -176,12 +176,26 @@ TEST_F(PchManagerServer, UpdateProjectPartQueueByPathIds) server.pathsWithIdsChanged({projectPartId1}); } -TEST_F(PchManagerServer, SetProgress) +TEST_F(PchManagerServer, SetPchCreationProgress) { - EXPECT_CALL(mockPchManagerClient, progress(AllOf(Field(&ClangBackEnd::ProgressMessage::progress, 20), - Field(&ClangBackEnd::ProgressMessage::total, 30)))); + EXPECT_CALL(mockPchManagerClient, + progress(AllOf(Field(&ClangBackEnd::ProgressMessage::progressType, + ClangBackEnd::ProgressType::PrecompiledHeader), + Field(&ClangBackEnd::ProgressMessage::progress, 20), + Field(&ClangBackEnd::ProgressMessage::total, 30)))); - server.setProgress(20, 30); + server.setPchCreationProgress(20, 30); +} + +TEST_F(PchManagerServer, SetDependencyCreationProgress) +{ + EXPECT_CALL(mockPchManagerClient, + progress(AllOf(Field(&ClangBackEnd::ProgressMessage::progressType, + ClangBackEnd::ProgressType::DependencyCreation), + Field(&ClangBackEnd::ProgressMessage::progress, 20), + Field(&ClangBackEnd::ProgressMessage::total, 30)))); + + server.setDependencyCreationProgress(20, 30); } TEST_F(PchManagerServer, RemoveToolChainsArguments) diff --git a/tests/unit/unittest/projectupdater-test.cpp b/tests/unit/unittest/projectupdater-test.cpp index 0ae47387d6..f41ddf89d4 100644 --- a/tests/unit/unittest/projectupdater-test.cpp +++ b/tests/unit/unittest/projectupdater-test.cpp @@ -135,8 +135,10 @@ protected: Sqlite::Database database{":memory:", Sqlite::JournalMode::Memory}; ClangBackEnd::RefactoringDatabaseInitializer<Sqlite::Database> initializer{database}; ClangBackEnd::FilePathCaching filePathCache{database}; - NiceMock<MockProgressManager> mockProgressManager; - ClangPchManager::PchManagerClient pchManagerClient{mockProgressManager}; + NiceMock<MockProgressManager> mockPchCreationProgressManager; + NiceMock<MockProgressManager> mockDependencyCreationProgressManager; + ClangPchManager::PchManagerClient pchManagerClient{mockPchCreationProgressManager, + mockDependencyCreationProgressManager}; MockPchManagerNotifier mockPchManagerNotifier{pchManagerClient}; NiceMock<MockPchManagerServer> mockPchManagerServer; ClangPchManager::ProjectUpdater updater{mockPchManagerServer, filePathCache}; diff --git a/tests/unit/unittest/refactoringprojectupdater-test.cpp b/tests/unit/unittest/refactoringprojectupdater-test.cpp index ceb6d4b15b..bab2377993 100644 --- a/tests/unit/unittest/refactoringprojectupdater-test.cpp +++ b/tests/unit/unittest/refactoringprojectupdater-test.cpp @@ -87,8 +87,10 @@ protected: ClangBackEnd::RefactoringDatabaseInitializer<Sqlite::Database> initializer{database}; ClangBackEnd::FilePathCaching filePathCache{database}; NiceMock<MockRefactoringServer> mockRefactoringServer; - NiceMock<MockProgressManager> mockProgressManager; - ClangPchManager::PchManagerClient pchManagerClient{mockProgressManager}; + NiceMock<MockProgressManager> mockPchCreationProgressManager; + NiceMock<MockProgressManager> mockDependencyCreationProgressManager; + ClangPchManager::PchManagerClient pchManagerClient{mockPchCreationProgressManager, + mockDependencyCreationProgressManager}; MockCppModelManager mockCppModelManager; ClangRefactoring::RefactoringProjectUpdater updater{mockRefactoringServer, pchManagerClient, mockCppModelManager, filePathCache}; Utils::SmallString projectPartId; |