From 716a96a55b1e4583d57d08cc9b511385139ac731 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 13 Feb 2019 13:36:27 +0100 Subject: [PATCH] ClangPchManager: Add dependency building to progress counter Task-number: QTCREATORBUG-21950 Change-Id: I409b03d53b374c5bf66ba6c7c9e50e98a7b239c4 Reviewed-by: Ivan Donchevskii --- .../clangpchmanagerbackendmain.cpp | 9 +++++++-- .../source/pchtaskgenerator.cpp | 6 +++++- .../source/pchtaskgenerator.h | 8 ++++++-- tests/unit/unittest/pchtaskgenerator-test.cpp | 19 ++++++++++++++++++- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp index 58d749ec3a7..f4afaf9210d 100644 --- a/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp +++ b/src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp @@ -246,8 +246,13 @@ struct Data // because we have a cycle dependency modifiedTimeChecker, buildDependencyCollector, database}; - ClangBackEnd::PchTaskGenerator pchTaskGenerator{buildDependencyProvider, pchTaskMerger}; - PchManagerServer clangPchManagerServer{includeWatcher, pchTaskGenerator, projectParts, generatedFiles}; + ClangBackEnd::PchTaskGenerator pchTaskGenerator{buildDependencyProvider, + pchTaskMerger, + progressCounter}; + PchManagerServer clangPchManagerServer{includeWatcher, + pchTaskGenerator, + projectParts, + generatedFiles}; TaskScheduler systemTaskScheduler{pchCreatorManager, pchTaskQueue, progressCounter, diff --git a/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.cpp b/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.cpp index 82584ad1dd8..aab3bfe7d48 100644 --- a/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.cpp +++ b/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.cpp @@ -27,9 +27,10 @@ #include "builddependenciesproviderinterface.h" #include "pchtasksmergerinterface.h" - #include "usedmacrofilter.h" +#include + #include namespace ClangBackEnd { @@ -40,6 +41,8 @@ void PchTaskGenerator::addProjectParts(ProjectPartContainers &&projectParts, PchTaskSets pchTaskSets; pchTaskSets.reserve(projectParts.size()); + m_progressCounter.addTotal(static_cast(projectParts.size())); + for (auto &projectPart : projectParts) { BuildDependency buildDependency = m_buildDependenciesProvider.create(projectPart); UsedMacroFilter filter{buildDependency.includes, @@ -68,6 +71,7 @@ void PchTaskGenerator::addProjectParts(ProjectPartContainers &&projectParts, projectPart.language, projectPart.languageVersion, projectPart.languageExtension}); + m_progressCounter.addProgress(1); } m_pchTasksMergerInterface.mergeTasks(std::move(pchTaskSets), std::move(toolChainArguments)); diff --git a/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.h b/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.h index b5669b7b3f3..38376ce2a21 100644 --- a/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.h +++ b/src/tools/clangpchmanagerbackend/source/pchtaskgenerator.h @@ -35,14 +35,18 @@ namespace ClangBackEnd { class PchTasksMergerInterface; class BuildDependenciesProviderInterface; +class ProgressCounter; class PchTaskGenerator : public PchTaskGeneratorInterface { public: PchTaskGenerator(BuildDependenciesProviderInterface &buildDependenciesProvider, - PchTasksMergerInterface &pchTasksMergerInterface) + PchTasksMergerInterface &pchTasksMergerInterface, + ProgressCounter &progressCounter) : m_buildDependenciesProvider(buildDependenciesProvider) , m_pchTasksMergerInterface(pchTasksMergerInterface) + , m_progressCounter(progressCounter) + {} void addProjectParts(ProjectPartContainers &&projectParts, @@ -52,7 +56,7 @@ public: private: BuildDependenciesProviderInterface &m_buildDependenciesProvider; PchTasksMergerInterface &m_pchTasksMergerInterface; + ProgressCounter &m_progressCounter; }; - } // namespace ClangBackEnd diff --git a/tests/unit/unittest/pchtaskgenerator-test.cpp b/tests/unit/unittest/pchtaskgenerator-test.cpp index 08a0079ad84..d85432baf25 100644 --- a/tests/unit/unittest/pchtaskgenerator-test.cpp +++ b/tests/unit/unittest/pchtaskgenerator-test.cpp @@ -29,6 +29,7 @@ #include "mockpchtasksmerger.h" #include +#include namespace { @@ -50,7 +51,11 @@ class PchTaskGenerator : public testing::Test protected: NiceMock mockBuildDependenciesProvider; NiceMock mockPchTaskMerger; - ClangBackEnd::PchTaskGenerator generator{mockBuildDependenciesProvider, mockPchTaskMerger}; + NiceMock> mockProgressCounterCallback; + ClangBackEnd::ProgressCounter progressCounter{mockProgressCounterCallback.AsStdFunction()}; + ClangBackEnd::PchTaskGenerator generator{mockBuildDependenciesProvider, + mockPchTaskMerger, + progressCounter}; ClangBackEnd::ProjectPartContainer projectPart1{ "ProjectPart1", {"--yi"}, @@ -132,6 +137,18 @@ TEST_F(PchTaskGenerator, AddProjectParts) generator.addProjectParts({projectPart1}, {"ToolChainArgument"}); } +TEST_F(PchTaskGenerator, ProgressCounter) +{ + ON_CALL(mockBuildDependenciesProvider, create(_)).WillByDefault(Return(buildDependency)); + + EXPECT_CALL(mockProgressCounterCallback, Call(0, 3)); + EXPECT_CALL(mockProgressCounterCallback, Call(1, 3)); + EXPECT_CALL(mockProgressCounterCallback, Call(2, 3)); + EXPECT_CALL(mockProgressCounterCallback, Call(3, 3)); + + generator.addProjectParts({projectPart1, projectPart1, projectPart1}, {"ToolChainArgument"}); +} + TEST_F(PchTaskGenerator, RemoveProjectParts) { ON_CALL(mockBuildDependenciesProvider, create(_)).WillByDefault(Return(buildDependency));