diff options
author | tatiana-yan <tatiana.kondakova@gmail.com> | 2019-03-20 17:16:27 +0300 |
---|---|---|
committer | mpimenov <mpimenov@users.noreply.github.com> | 2019-03-20 17:28:11 +0300 |
commit | 5f53558116870c0cf5c212ad3a4e5518af8bbf2d (patch) | |
tree | 9e131ce1359547cded49859466bdfa3f1cca4aee /search | |
parent | 32e70062ce8aff985eb594f6b7a7d3c49de21f8c (diff) |
[search] Cache localities from World on startup.
Diffstat (limited to 'search')
-rw-r--r-- | search/engine.cpp | 7 | ||||
-rw-r--r-- | search/engine.hpp | 3 | ||||
-rw-r--r-- | search/geocoder.cpp | 13 | ||||
-rw-r--r-- | search/geocoder.hpp | 1 | ||||
-rw-r--r-- | search/processor.cpp | 2 | ||||
-rw-r--r-- | search/processor.hpp | 1 |
6 files changed, 27 insertions, 0 deletions
diff --git a/search/engine.cpp b/search/engine.cpp index a8e0a2a9ae..5e0b90655e 100644 --- a/search/engine.cpp +++ b/search/engine.cpp @@ -112,6 +112,7 @@ Engine::Engine(DataSource & dataSource, CategoriesHolder const & categories, for (size_t i = 0; i < params.m_numThreads; ++i) m_threads.emplace_back(&Engine::MainLoop, this, ref(m_contexts[i])); + CacheWorldLocalities(); LoadCitiesBoundaries(); LoadCountriesTree(); } @@ -149,6 +150,12 @@ void Engine::ClearCaches() PostMessage(Message::TYPE_BROADCAST, [](Processor & processor) { processor.ClearCaches(); }); } +void Engine::CacheWorldLocalities() +{ + PostMessage(Message::TYPE_BROADCAST, + [](Processor & processor) { processor.CacheWorldLocalities(); }); +} + void Engine::LoadCitiesBoundaries() { PostMessage(Message::TYPE_BROADCAST, diff --git a/search/engine.hpp b/search/engine.hpp index 02b29ef998..a18e096633 100644 --- a/search/engine.hpp +++ b/search/engine.hpp @@ -102,6 +102,9 @@ public: // Posts request to clear caches to the queue. void ClearCaches(); + // Posts requests to load and cache localities from World.mwm. + void CacheWorldLocalities(); + // Posts request to reload cities boundaries tables. void LoadCitiesBoundaries(); diff --git a/search/geocoder.cpp b/search/geocoder.cpp index e3d650c6b0..720c3509fa 100644 --- a/search/geocoder.cpp +++ b/search/geocoder.cpp @@ -622,6 +622,19 @@ void Geocoder::FillLocalityCandidates(BaseContext const & ctx, CBV const & filte scorer.GetTopLocalities(m_context->GetId(), ctx, filter, maxNumLocalities, preLocalities); } +void Geocoder::CacheWorldLocalities() +{ + vector<shared_ptr<MwmInfo>> infos; + m_dataSource.GetMwmsInfo(infos); + + MwmSet::MwmHandle handle = FindWorld(m_dataSource, infos); + if (handle.IsAlive()) + { + auto context = make_unique<MwmContext>(move(handle)); + UNUSED_VALUE(m_localitiesCache.Get(*context)); + } +} + void Geocoder::FillLocalitiesTable(BaseContext const & ctx) { vector<Locality> preLocalities; diff --git a/search/geocoder.hpp b/search/geocoder.hpp index 494c1714ff..6cb0db9a68 100644 --- a/search/geocoder.hpp +++ b/search/geocoder.hpp @@ -121,6 +121,7 @@ public: // noticeable time. void Finish(bool cancelled); + void CacheWorldLocalities(); void ClearCaches(); private: diff --git a/search/processor.cpp b/search/processor.cpp index 8e40472d5f..913d8e1f45 100644 --- a/search/processor.cpp +++ b/search/processor.cpp @@ -312,6 +312,8 @@ m2::RectD const & Processor::GetViewport() const return m_viewport; } +void Processor::CacheWorldLocalities() { m_geocoder.CacheWorldLocalities(); } + void Processor::LoadCitiesBoundaries() { if (m_citiesBoundaries.Load()) diff --git a/search/processor.hpp b/search/processor.hpp index 5447020b9c..677fa5ab73 100644 --- a/search/processor.hpp +++ b/search/processor.hpp @@ -91,6 +91,7 @@ public: void InitEmitter(SearchParams const & searchParams); void ClearCaches(); + void CacheWorldLocalities(); void LoadCitiesBoundaries(); void LoadCountriesTree(); |