aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-02-19 20:46:08 +0100
committerMarco Bubke <marco.bubke@qt.io>2019-02-22 12:09:09 +0000
commitf009dad9ef2f286248d7da8678134f587bda22d0 (patch)
tree809c289f2421a605e29138d94627b576b07764ac /src
parent8c781f7e6aa763a4caa21c5f5c5504b79634ea46 (diff)
ClangPchManager: Show extra progress for dependency building
Task-number: QTCREATORBUG-21956 Change-Id: Id244c9ef9fc7825489daa143b21fcca78164d8c7 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/libs/clangsupport/clangsupport_global.h10
-rw-r--r--src/libs/clangsupport/progressmessage.h12
-rw-r--r--src/plugins/clangpchmanager/clangpchmanagerplugin.cpp17
-rw-r--r--src/plugins/clangpchmanager/pchmanagerclient.cpp11
-rw-r--r--src/plugins/clangpchmanager/pchmanagerclient.h9
-rw-r--r--src/tools/clangpchmanagerbackend/clangpchmanagerbackendmain.cpp19
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp7
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchmanagerserver.h3
8 files changed, 59 insertions, 29 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;