diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp index 53398299d6..811ba59b67 100644 --- a/generator/generator_tool/generator_tool.cpp +++ b/generator/generator_tool/generator_tool.cpp @@ -420,12 +420,8 @@ int GeneratorToolMain(int argc, char ** argv) auto const pathInRegionsTmpMwm = genInfo.GetTmpFileName(genInfo.m_fileName); auto const pathOutRepackedRegionsTmpMwm = genInfo.GetTmpFileName(genInfo.m_fileName + "_repacked"); auto const pathOutRegionsKv = genInfo.GetIntermediateFileName(genInfo.m_fileName, ".jsonl"); - if (!regions::GenerateRegions(pathInRegionsTmpMwm, pathInRegionsCollector, pathOutRegionsKv, - pathOutRepackedRegionsTmpMwm, FLAGS_verbose)) - { - LOG(LCRITICAL, ("Error generating regions kv.")); - return EXIT_FAILURE; - } + regions::GenerateRegions(pathInRegionsTmpMwm, pathInRegionsCollector, pathOutRegionsKv, + pathOutRepackedRegionsTmpMwm, FLAGS_verbose, threadsCount); } if (!FLAGS_popularity_csv.empty()) diff --git a/generator/regions/regions.cpp b/generator/regions/regions.cpp index 10caf89341..5937ba25a5 100644 --- a/generator/regions/regions.cpp +++ b/generator/regions/regions.cpp @@ -104,10 +104,12 @@ void RepackTmpMwm(std::string const & srcFilename, std::string const & repackedF } } // namespace -bool GenerateRegions(std::string const & pathInRegionsTmpMwm, +void GenerateRegions(std::string const & pathInRegionsTmpMwm, std::string const & pathInRegionsCollector, std::string const & pathOutRegionsKv, - std::string const & pathOutRepackedRegionsTmpMwm, bool verbose) + std::string const & pathOutRepackedRegionsTmpMwm, + bool verbose, + size_t threadsCount) { using namespace regions; @@ -118,7 +120,7 @@ bool GenerateRegions(std::string const & pathInRegionsTmpMwm, RegionInfo regionsInfoCollector(pathInRegionsCollector); RegionsBuilder::Regions regions = ReadAndFixData(pathInRegionsTmpMwm, regionsInfoCollector); auto jsonPolicy = std::make_unique(verbose); - auto kvBuilder = std::make_unique(std::move(regions), std::move(jsonPolicy)); + auto kvBuilder = std::make_unique(std::move(regions), std::move(jsonPolicy), threadsCount); std::ofstream ofs(pathOutRegionsKv, std::ofstream::out); std::set setIds; @@ -153,7 +155,6 @@ bool GenerateRegions(std::string const & pathInRegionsTmpMwm, LOG(LINFO, ("Repacked regions temprory mwm saved to", pathOutRepackedRegionsTmpMwm)); LOG(LINFO, (countIds, "total ids.", setIds.size(), "unique ids.")); LOG(LINFO, ("Finish generating regions.", timer.ElapsedSeconds(), "seconds.")); - return true; } } // namespace regions } // namespace generator diff --git a/generator/regions/regions.hpp b/generator/regions/regions.hpp index d40b4b189e..ed90c86ea3 100644 --- a/generator/regions/regions.hpp +++ b/generator/regions/regions.hpp @@ -6,9 +6,11 @@ namespace generator { namespace regions { -bool GenerateRegions(std::string const & pathInRegionsTmpMwm, +void GenerateRegions(std::string const & pathInRegionsTmpMwm, std::string const & pathInRegionsCollector, std::string const & pathOutRegionsKv, - std::string const & pathOutRepackedRegionsTmpMwm, bool verbose); + std::string const & pathOutRepackedRegionsTmpMwm, + bool verbose, + size_t threadsCount = 1); } // namespace regions } // namespace generator diff --git a/generator/regions/regions_builder.cpp b/generator/regions/regions_builder.cpp index 6eab84dd1b..cb7fc41d04 100644 --- a/generator/regions/regions_builder.cpp +++ b/generator/regions/regions_builder.cpp @@ -1,8 +1,8 @@ #include "generator/regions/regions_builder.hpp" #include "base/assert.hpp" -#include "base/thread_pool_computational.hpp" #include "base/stl_helpers.hpp" +#include "base/thread_pool_computational.hpp" #include #include @@ -13,6 +13,7 @@ #include #include + namespace generator { namespace regions @@ -31,10 +32,10 @@ Node::Ptr ShrinkToFit(Node::Ptr p) RegionsBuilder::RegionsBuilder(Regions && regions, std::unique_ptr toStringPolicy, - size_t cpuCount) + size_t threadsCount) : m_toStringPolicy(std::move(toStringPolicy)) , m_regions(std::move(regions)) - , m_cpuCount(cpuCount) + , m_threadsCount(threadsCount) { ASSERT(m_toStringPolicy, ()); ASSERT(m_cpuCount != 0, ()); @@ -47,8 +48,8 @@ RegionsBuilder::RegionsBuilder(Regions && regions, std::sort(std::begin(m_countries), std::end(m_countries), cmp); } -RegionsBuilder::RegionsBuilder(Regions && regions, size_t cpuCount) - : RegionsBuilder(std::move(regions), std::make_unique(), cpuCount) {} +RegionsBuilder::RegionsBuilder(Regions && regions, size_t threadsCount) + : RegionsBuilder(std::move(regions), std::make_unique(), threadsCount) {} RegionsBuilder::Regions const & RegionsBuilder::GetCountries() const { @@ -173,13 +174,10 @@ std::vector RegionsBuilder::BuildCountryRegionTrees(RegionsBuilder::R { std::vector> tmp; { - size_t const cpuCount = m_cpuCount > 0 ? static_cast(m_cpuCount) - : std::thread::hardware_concurrency(); - ASSERT_GREATER(cpuCount, 0, ()); - ThreadPool threadPool(cpuCount); + base::thread_pool::computational::ThreadPool threadPool(m_threadsCount); for (auto const & country : countries) { - auto result = threadPool.enqueue(&RegionsBuilder::BuildCountryRegionTree, country, m_regions); + auto result = threadPool.Submit(&RegionsBuilder::BuildCountryRegionTree, country, m_regions); tmp.emplace_back(std::move(result)); } } diff --git a/generator/regions/regions_builder.hpp b/generator/regions/regions_builder.hpp index f3930af88f..7f02ae1ad6 100644 --- a/generator/regions/regions_builder.hpp +++ b/generator/regions/regions_builder.hpp @@ -27,8 +27,8 @@ public: explicit RegionsBuilder(Regions && regions, std::unique_ptr toStringPolicy, - size_t cpuCount = 1); - explicit RegionsBuilder(Regions && regions, size_t cpuCount = 1); + size_t threadsCount = 1); + explicit RegionsBuilder(Regions && regions, size_t threadsCount = 1); Regions const & GetCountries() const; StringsList GetCountryNames() const; @@ -42,7 +42,8 @@ private: std::unique_ptr m_toStringPolicy; Regions m_countries; - size_t m_cpuCount; + Regions m_regions; + size_t m_threadsCount; }; } // namespace regions } // namespace generator