From 73a6d4566a9fa13ffaef2f1111be808a220ba867 Mon Sep 17 00:00:00 2001 From: Dmitry Kochkin Date: Sat, 25 Feb 2017 22:56:13 +0100 Subject: VS: Cache the list of xaml and resx headers Speed up VS project generation with many such headers. --- Source/cmGeneratorTarget.cxx | 26 +++++++++++++++++++------- Source/cmGeneratorTarget.h | 4 ++++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 5815210..47d685d 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -711,12 +711,18 @@ void cmGeneratorTarget::GetExternalObjects( IMPLEMENT_VISIT(ExternalObjects); } -void cmGeneratorTarget::GetExpectedResxHeaders(std::set& srcs, +void cmGeneratorTarget::GetExpectedResxHeaders(std::set& headers, const std::string& config) const { - ResxData data; - IMPLEMENT_VISIT_IMPL(Resx, COMMA cmGeneratorTarget::ResxData) - srcs = data.ExpectedResxHeaders; + HeadersCacheType::const_iterator it = this->ResxHeadersCache.find(config); + if (it == this->ResxHeadersCache.end()) { + ResxData data; + IMPLEMENT_VISIT_IMPL(Resx, COMMA cmGeneratorTarget::ResxData) + it = this->ResxHeadersCache + .insert(std::make_pair(config, data.ExpectedResxHeaders)) + .first; + } + headers = it->second; } void cmGeneratorTarget::GetResxSources(std::vector& srcs, @@ -748,9 +754,15 @@ void cmGeneratorTarget::GetCertificates(std::vector& data, void cmGeneratorTarget::GetExpectedXamlHeaders(std::set& headers, const std::string& config) const { - XamlData data; - IMPLEMENT_VISIT_IMPL(Xaml, COMMA cmGeneratorTarget::XamlData) - headers = data.ExpectedXamlHeaders; + HeadersCacheType::const_iterator it = this->XamlHeadersCache.find(config); + if (it == this->XamlHeadersCache.end()) { + XamlData data; + IMPLEMENT_VISIT_IMPL(Xaml, COMMA cmGeneratorTarget::XamlData) + it = this->XamlHeadersCache + .insert(std::make_pair(config, data.ExpectedXamlHeaders)) + .first; + } + headers = it->second; } void cmGeneratorTarget::GetExpectedXamlSources(std::set& srcs, diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h index 689fbda..e72e0a6 100644 --- a/Source/cmGeneratorTarget.h +++ b/Source/cmGeneratorTarget.h @@ -739,6 +739,10 @@ private: bool ComputePDBOutputDir(const std::string& kind, const std::string& config, std::string& out) const; + typedef std::map > HeadersCacheType; + mutable HeadersCacheType ResxHeadersCache; + mutable HeadersCacheType XamlHeadersCache; + public: const std::vector& GetLinkImplementationClosure( const std::string& config) const; -- cgit v0.12