forked from organicmaps/organicmaps
[search] Cache localities from World on startup.
This commit is contained in:
parent
32e70062ce
commit
5f53558116
8 changed files with 30 additions and 0 deletions
|
@ -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(
|
||||
|
|
|
@ -95,6 +95,8 @@ public:
|
|||
|
||||
void OnViewportChanged(m2::RectD const & viewport);
|
||||
|
||||
void CacheWorldLocalities() { m_engine.CacheWorldLocalities(); }
|
||||
|
||||
void LoadCitiesBoundaries() { m_engine.LoadCitiesBoundaries(); }
|
||||
|
||||
// Search everywhere.
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -121,6 +121,7 @@ public:
|
|||
// noticeable time.
|
||||
void Finish(bool cancelled);
|
||||
|
||||
void CacheWorldLocalities();
|
||||
void ClearCaches();
|
||||
|
||||
private:
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -91,6 +91,7 @@ public:
|
|||
void InitEmitter(SearchParams const & searchParams);
|
||||
|
||||
void ClearCaches();
|
||||
void CacheWorldLocalities();
|
||||
void LoadCitiesBoundaries();
|
||||
void LoadCountriesTree();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue