using object pool for storing ReadMWMTask

This commit is contained in:
Roman Sorokin 2014-08-11 16:24:29 +03:00 committed by Alex Zolotarev
parent 8f9833a411
commit 19b5da7249
2 changed files with 14 additions and 4 deletions

View file

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

View file

@ -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<tileinfo_ptr, LessByTileKey> tile_set_t;
tile_set_t m_tileInfos;
ObjectPool<ReadMWMTask, ReadMWMTaskFactory> myPool;
void CancelTileInfo(tileinfo_ptr const & tileToCancel);
void ClearTileInfo(tileinfo_ptr const & tileToClear);
};