diff --git a/drape_frontend/read_manager.cpp b/drape_frontend/read_manager.cpp index 0215b7ccae..87e3969bc3 100644 --- a/drape_frontend/read_manager.cpp +++ b/drape_frontend/read_manager.cpp @@ -1,5 +1,4 @@ #include "read_manager.hpp" -#include "read_mwm_task.hpp" #include "visual_params.hpp" #include "../platform/platform.hpp" @@ -34,13 +33,16 @@ struct LessCoverageCell ReadManager::ReadManager(EngineContext & context, model::FeaturesFetcher & model) : m_context(context) , m_model(model) + , myPool(100, ReadMWMTaskFactory(m_memIndex, m_model, m_context)) { m_pool.Reset(new threads::ThreadPool(ReadCount(), bind(&ReadManager::OnTaskFinished, this, _1))); } void ReadManager::OnTaskFinished(threads::IRoutine * task) { - delete task; + ReadMWMTask * t = (ReadMWMTask *)task; + t->Reset(); + myPool.Return(t); } void ReadManager::UpdateCoverage(ScreenBase const & screen, set const & tiles) @@ -114,12 +116,16 @@ void ReadManager::PushTaskBackForTileKey(TileKey const & tileKey) { tileinfo_ptr tileInfo(new TileInfo(tileKey)); m_tileInfos.insert(tileInfo); - m_pool->PushBack(new ReadMWMTask(tileInfo, m_memIndex, m_model, m_context)); + ReadMWMTask * task = myPool.Get(); + task->Init(tileInfo); + m_pool->PushBack(task); } void ReadManager::PushTaskFront(tileinfo_ptr const & tileToReread) { - m_pool->PushFront(new ReadMWMTask(tileToReread, m_memIndex, m_model, m_context)); + ReadMWMTask * task = myPool.Get(); + task->Init(tileToReread); + m_pool->PushFront(task); } void ReadManager::CancelTileInfo(tileinfo_ptr const & tileToCancel) diff --git a/drape_frontend/read_manager.hpp b/drape_frontend/read_manager.hpp index 6b7b48597c..fe0bbf1e1d 100644 --- a/drape_frontend/read_manager.hpp +++ b/drape_frontend/read_manager.hpp @@ -3,12 +3,14 @@ #include "memory_feature_index.hpp" #include "engine_context.hpp" #include "tile_info.hpp" +#include "read_mwm_task.hpp" #include "../map/feature_vec_model.hpp" #include "../geometry/screenbase.hpp" #include "../drape/pointers.hpp" +#include "../drape/object_pool.hpp" #include "../base/thread_pool.hpp" @@ -61,6 +63,8 @@ private: typedef set tile_set_t; tile_set_t m_tileInfos; + ObjectPool myPool; + void CancelTileInfo(tileinfo_ptr const & tileToCancel); void ClearTileInfo(tileinfo_ptr const & tileToClear); };