Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/search
diff options
context:
space:
mode:
authortatiana-yan <tatiana.kondakova@gmail.com>2019-03-20 17:16:27 +0300
committermpimenov <mpimenov@users.noreply.github.com>2019-03-20 17:28:11 +0300
commit5f53558116870c0cf5c212ad3a4e5518af8bbf2d (patch)
tree9e131ce1359547cded49859466bdfa3f1cca4aee /search
parent32e70062ce8aff985eb594f6b7a7d3c49de21f8c (diff)
[search] Cache localities from World on startup.
Diffstat (limited to 'search')
-rw-r--r--search/engine.cpp7
-rw-r--r--search/engine.hpp3
-rw-r--r--search/geocoder.cpp13
-rw-r--r--search/geocoder.hpp1
-rw-r--r--search/processor.cpp2
-rw-r--r--search/processor.hpp1
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();