aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-05-22 15:08:55 +0200
committerMarco Bubke <marco.bubke@qt.io>2019-06-17 10:46:31 +0000
commitb36e9d0e95f53fdebcf63f79060c0ebff42d0bf2 (patch)
treef160af9d0cb7248eeaf19534f76c92ed127d1313
parentb213dee0134722fcdcae88efb514e0430fc72959 (diff)
ClangPchManager: Improve handling of no include in project PCH
We were doing simply nothing but we should call PchCreator::doInMainThreadAfterFinished(). Change-Id: Ia21d2cf4af53121d9e401f6e9a5b432a4daed00f Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchcreator.cpp5
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp10
-rw-r--r--tests/unit/unittest/pchcreator-test.cpp30
3 files changed, 36 insertions, 9 deletions
diff --git a/src/tools/clangpchmanagerbackend/source/pchcreator.cpp b/src/tools/clangpchmanagerbackend/source/pchcreator.cpp
index 9416e310aa..cd7b492868 100644
--- a/src/tools/clangpchmanagerbackend/source/pchcreator.cpp
+++ b/src/tools/clangpchmanagerbackend/source/pchcreator.cpp
@@ -113,8 +113,11 @@ Utils::SmallStringVector PchCreator::generateClangCompilerArguments(const PchTas
void PchCreator::generatePch(PchTask &&pchTask)
{
m_projectPartPch.projectPartId = pchTask.projectPartId();
-
m_projectPartPch.lastModified = QDateTime::currentSecsSinceEpoch();
+
+ if (pchTask.includes.empty())
+ return;
+
auto content = generatePchIncludeFileContent(pchTask.includes);
auto pchOutputPath = generatePchFilePath();
diff --git a/src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp b/src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp
index 1edbe15806..b9d6a48fe3 100644
--- a/src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp
+++ b/src/tools/clangpchmanagerbackend/source/pchtaskqueue.cpp
@@ -33,6 +33,8 @@
#include <utils/algorithm.h>
+#include <iostream>
+
namespace ClangBackEnd {
void PchTaskQueue::addPchTasks(PchTasks &&newPchTasks, PchTasks &destination)
@@ -145,7 +147,6 @@ std::vector<PchTaskQueue::Task> PchTaskQueue::createProjectTasks(PchTasks &&pchT
auto convert = [this](auto &&pchTask) {
return [pchTask = std::move(pchTask), this](PchCreatorInterface &pchCreator) mutable {
const auto projectPartId = pchTask.projectPartId();
- if (pchTask.includes.size()) {
pchTask.systemPchPath = m_precompiledHeaderStorage.fetchSystemPrecompiledHeaderPath(
projectPartId);
pchTask.preIncludeSearchPath = m_environment.preIncludeSearchPath();
@@ -157,9 +158,6 @@ std::vector<PchTaskQueue::Task> PchTaskQueue::createProjectTasks(PchTasks &&pchT
m_precompiledHeaderStorage.insertProjectPrecompiledHeader(
projectPartId, projectPartPch.pchPath, projectPartPch.lastModified);
}
- } else {
- m_precompiledHeaderStorage.deleteProjectPrecompiledHeader(projectPartId);
- }
};
};
@@ -179,7 +177,6 @@ std::vector<PchTaskQueue::Task> PchTaskQueue::createSystemTasks(PchTasks &&pchTa
auto convert = [this](auto &&pchTask) {
return [pchTask = std::move(pchTask), this](PchCreatorInterface &pchCreator) mutable {
const auto projectPartIds = pchTask.projectPartIds;
- if (pchTask.includes.size()) {
pchTask.preIncludeSearchPath = m_environment.preIncludeSearchPath();
pchCreator.generatePch(std::move(pchTask));
const auto &projectPartPch = pchCreator.projectPartPch();
@@ -189,9 +186,6 @@ std::vector<PchTaskQueue::Task> PchTaskQueue::createSystemTasks(PchTasks &&pchTa
m_precompiledHeaderStorage.insertSystemPrecompiledHeaders(
projectPartIds, projectPartPch.pchPath, projectPartPch.lastModified);
}
- } else {
- m_precompiledHeaderStorage.deleteSystemPrecompiledHeaders(projectPartIds);
- }
};
};
diff --git a/tests/unit/unittest/pchcreator-test.cpp b/tests/unit/unittest/pchcreator-test.cpp
index 66943fc147..0cf84a983d 100644
--- a/tests/unit/unittest/pchcreator-test.cpp
+++ b/tests/unit/unittest/pchcreator-test.cpp
@@ -315,6 +315,36 @@ TEST_F(PchCreatorVerySlowTest, FaultyProjectPartPchForCreatesFaultyPchForPchTask
Field(&ProjectPartPch::lastModified, Gt(0))));
}
+TEST_F(PchCreatorSlowTest, NoIncludes)
+{
+ pchTask1.includes = {};
+
+ creator.generatePch(std::move(pchTask1));
+
+ ASSERT_THAT(creator.projectPartPch(),
+ AllOf(Field(&ProjectPartPch::projectPartId, Eq(pchTask1.projectPartId())),
+ Field(&ProjectPartPch::pchPath, IsEmpty()),
+ Field(&ProjectPartPch::lastModified, Gt(0))));
+}
+
+TEST_F(PchCreatorSlowTest, NoIncludesInTheMainThreadCalls)
+{
+ pchTask1.includes = {};
+ creator.generatePch(std::move(pchTask1));
+
+ EXPECT_CALL(mockPchManagerClient,
+ precompiledHeadersUpdated(
+ Field(&ClangBackEnd::PrecompiledHeadersUpdatedMessage::projectPartIds,
+ ElementsAre(Eq(creator.projectPartPch().projectPartId)))));
+ EXPECT_CALL(mockClangPathWatcher,
+ updateIdPaths(
+ ElementsAre(AllOf(Field(&ClangBackEnd::IdPaths::id, 1),
+ Field(&ClangBackEnd::IdPaths::filePathIds, IsEmpty())))));
+ EXPECT_CALL(mockBuildDependenciesStorage, updatePchCreationTimeStamp(Gt(0), Eq(1)));
+
+ creator.doInMainThreadAfterFinished();
+}
+
TEST_F(PchCreatorVerySlowTest, GeneratedFile)
{
creator.clear();