PchManager: Split pch tasks in project and system pch tasks

Like you can see in the task numbers this patch is touching many different
areas. So I will only touch the main parts. It is using a clang action
instead of an extra process which will be enabling the handling of
generated files in PCHs. The flags from the project part are now not
anymore transformed in a command line but they are saved in the container
semantically aware so that they can later be merged. Most of this patch is
simply polishing of other patches.

Task-number: QTCREATORBUG-21346
Task-number: QTCREATORBUG-21380
Task-number: QTCREATORBUG-21382
Task-number: QTCREATORBUG-21383
Task-number: QTCREATORBUG-21693
Task-number: QTCREATORBUG-21778
Change-Id: I9b0c02d8149b554254e819448fbc61eeaa5b7494
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Marco Bubke
2018-12-17 12:06:57 +01:00
parent a78e3e5dd5
commit dd366b68de
114 changed files with 3742 additions and 1787 deletions

View File

@@ -68,14 +68,16 @@ protected:
NiceMock<MockFunction<void(int, int)>> mockSetProgressCallback;
ClangBackEnd::ProgressCounter progressCounter{mockSetProgressCallback.AsStdFunction()};
Scheduler scheduler{mockProcessorManager,
mockSymbolIndexerTaskQueue,
progressCounter,
4};
mockSymbolIndexerTaskQueue,
progressCounter,
4,
ClangBackEnd::CallDoInMainThreadAfterFinished::Yes};
Scheduler deferredScheduler{mockProcessorManager,
mockSymbolIndexerTaskQueue,
progressCounter,
4,
std::launch::deferred};
mockSymbolIndexerTaskQueue,
progressCounter,
4,
ClangBackEnd::CallDoInMainThreadAfterFinished::Yes,
std::launch::deferred};
};
TEST_F(TaskScheduler, AddTasks)
@@ -146,6 +148,24 @@ TEST_F(TaskScheduler, FreeSlotsCallsCleanupMethodsAfterTheWorkIsDone)
scheduler.slotUsage();
}
TEST_F(TaskScheduler, FreeSlotsDoNotCallsDoInMainThreadAfterFinishedAfterTheWorkIsDoneIfForbidden)
{
Scheduler scheduler{mockProcessorManager,
mockSymbolIndexerTaskQueue,
progressCounter,
4,
ClangBackEnd::CallDoInMainThreadAfterFinished::No};
scheduler.addTasks({nocall, nocall});
scheduler.syncTasks();
InSequence s;
EXPECT_CALL(mockSymbolsCollector, doInMainThreadAfterFinished()).Times(0);
scheduler.slotUsage();
scheduler.syncTasks();
QCoreApplication::processEvents();
}
TEST_F(TaskScheduler, FreeSlotsCallsProgressMethodsAfterTheWorkIsDone)
{
scheduler.addTasks({nocall, nocall});