[search] Cache localities from World on startup.

This commit is contained in:
tatiana-yan 2019-03-20 17:16:27 +03:00 committed by mpimenov
parent 32e70062ce
commit 5f53558116
8 changed files with 30 additions and 0 deletions

View file

@ -510,6 +510,7 @@ Framework::Framework(FrameworkParams const & params)
// Need to reload cities boundaries because maps in indexer were updated.
GetSearchAPI().LoadCitiesBoundaries();
GetSearchAPI().CacheWorldLocalities();
// Init storage with needed callback.
m_storage.Init(

View file

@ -95,6 +95,8 @@ public:
void OnViewportChanged(m2::RectD const & viewport);
void CacheWorldLocalities() { m_engine.CacheWorldLocalities(); }
void LoadCitiesBoundaries() { m_engine.LoadCitiesBoundaries(); }
// Search everywhere.

View file

@ -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,

View file

@ -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();

View file

@ -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;

View file

@ -121,6 +121,7 @@ public:
// noticeable time.
void Finish(bool cancelled);
void CacheWorldLocalities();
void ClearCaches();
private:

View file

@ -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())

View file

@ -91,6 +91,7 @@ public:
void InitEmitter(SearchParams const & searchParams);
void ClearCaches();
void CacheWorldLocalities();
void LoadCitiesBoundaries();
void LoadCountriesTree();