ClangPchManager: Add dependency building to progress counter

Task-number: QTCREATORBUG-21950
Change-Id: I409b03d53b374c5bf66ba6c7c9e50e98a7b239c4
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Marco Bubke
2019-02-13 13:36:27 +01:00
parent 29758d8364
commit 716a96a55b
4 changed files with 36 additions and 6 deletions

View File

@@ -246,8 +246,13 @@ struct Data // because we have a cycle dependency
modifiedTimeChecker, modifiedTimeChecker,
buildDependencyCollector, buildDependencyCollector,
database}; database};
ClangBackEnd::PchTaskGenerator pchTaskGenerator{buildDependencyProvider, pchTaskMerger}; ClangBackEnd::PchTaskGenerator pchTaskGenerator{buildDependencyProvider,
PchManagerServer clangPchManagerServer{includeWatcher, pchTaskGenerator, projectParts, generatedFiles}; pchTaskMerger,
progressCounter};
PchManagerServer clangPchManagerServer{includeWatcher,
pchTaskGenerator,
projectParts,
generatedFiles};
TaskScheduler systemTaskScheduler{pchCreatorManager, TaskScheduler systemTaskScheduler{pchCreatorManager,
pchTaskQueue, pchTaskQueue,
progressCounter, progressCounter,

View File

@@ -27,9 +27,10 @@
#include "builddependenciesproviderinterface.h" #include "builddependenciesproviderinterface.h"
#include "pchtasksmergerinterface.h" #include "pchtasksmergerinterface.h"
#include "usedmacrofilter.h" #include "usedmacrofilter.h"
#include <progresscounter.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
namespace ClangBackEnd { namespace ClangBackEnd {
@@ -40,6 +41,8 @@ void PchTaskGenerator::addProjectParts(ProjectPartContainers &&projectParts,
PchTaskSets pchTaskSets; PchTaskSets pchTaskSets;
pchTaskSets.reserve(projectParts.size()); pchTaskSets.reserve(projectParts.size());
m_progressCounter.addTotal(static_cast<int>(projectParts.size()));
for (auto &projectPart : projectParts) { for (auto &projectPart : projectParts) {
BuildDependency buildDependency = m_buildDependenciesProvider.create(projectPart); BuildDependency buildDependency = m_buildDependenciesProvider.create(projectPart);
UsedMacroFilter filter{buildDependency.includes, UsedMacroFilter filter{buildDependency.includes,
@@ -68,6 +71,7 @@ void PchTaskGenerator::addProjectParts(ProjectPartContainers &&projectParts,
projectPart.language, projectPart.language,
projectPart.languageVersion, projectPart.languageVersion,
projectPart.languageExtension}); projectPart.languageExtension});
m_progressCounter.addProgress(1);
} }
m_pchTasksMergerInterface.mergeTasks(std::move(pchTaskSets), std::move(toolChainArguments)); m_pchTasksMergerInterface.mergeTasks(std::move(pchTaskSets), std::move(toolChainArguments));

View File

@@ -35,14 +35,18 @@ namespace ClangBackEnd {
class PchTasksMergerInterface; class PchTasksMergerInterface;
class BuildDependenciesProviderInterface; class BuildDependenciesProviderInterface;
class ProgressCounter;
class PchTaskGenerator : public PchTaskGeneratorInterface class PchTaskGenerator : public PchTaskGeneratorInterface
{ {
public: public:
PchTaskGenerator(BuildDependenciesProviderInterface &buildDependenciesProvider, PchTaskGenerator(BuildDependenciesProviderInterface &buildDependenciesProvider,
PchTasksMergerInterface &pchTasksMergerInterface) PchTasksMergerInterface &pchTasksMergerInterface,
ProgressCounter &progressCounter)
: m_buildDependenciesProvider(buildDependenciesProvider) : m_buildDependenciesProvider(buildDependenciesProvider)
, m_pchTasksMergerInterface(pchTasksMergerInterface) , m_pchTasksMergerInterface(pchTasksMergerInterface)
, m_progressCounter(progressCounter)
{} {}
void addProjectParts(ProjectPartContainers &&projectParts, void addProjectParts(ProjectPartContainers &&projectParts,
@@ -52,7 +56,7 @@ public:
private: private:
BuildDependenciesProviderInterface &m_buildDependenciesProvider; BuildDependenciesProviderInterface &m_buildDependenciesProvider;
PchTasksMergerInterface &m_pchTasksMergerInterface; PchTasksMergerInterface &m_pchTasksMergerInterface;
ProgressCounter &m_progressCounter;
}; };
} // namespace ClangBackEnd } // namespace ClangBackEnd

View File

@@ -29,6 +29,7 @@
#include "mockpchtasksmerger.h" #include "mockpchtasksmerger.h"
#include <pchtaskgenerator.h> #include <pchtaskgenerator.h>
#include <progresscounter.h>
namespace { namespace {
@@ -50,7 +51,11 @@ class PchTaskGenerator : public testing::Test
protected: protected:
NiceMock<MockBuildDependenciesProvider> mockBuildDependenciesProvider; NiceMock<MockBuildDependenciesProvider> mockBuildDependenciesProvider;
NiceMock<MockPchTasksMerger> mockPchTaskMerger; NiceMock<MockPchTasksMerger> mockPchTaskMerger;
ClangBackEnd::PchTaskGenerator generator{mockBuildDependenciesProvider, mockPchTaskMerger}; NiceMock<MockFunction<void(int, int)>> mockProgressCounterCallback;
ClangBackEnd::ProgressCounter progressCounter{mockProgressCounterCallback.AsStdFunction()};
ClangBackEnd::PchTaskGenerator generator{mockBuildDependenciesProvider,
mockPchTaskMerger,
progressCounter};
ClangBackEnd::ProjectPartContainer projectPart1{ ClangBackEnd::ProjectPartContainer projectPart1{
"ProjectPart1", "ProjectPart1",
{"--yi"}, {"--yi"},
@@ -132,6 +137,18 @@ TEST_F(PchTaskGenerator, AddProjectParts)
generator.addProjectParts({projectPart1}, {"ToolChainArgument"}); 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) TEST_F(PchTaskGenerator, RemoveProjectParts)
{ {
ON_CALL(mockBuildDependenciesProvider, create(_)).WillByDefault(Return(buildDependency)); ON_CALL(mockBuildDependenciesProvider, create(_)).WillByDefault(Return(buildDependency));