Index: gpu/command_buffer/client/mapped_memory.cc |
diff --git a/gpu/command_buffer/client/mapped_memory.cc b/gpu/command_buffer/client/mapped_memory.cc |
index 15584aaaf07daebf1bf20ba5225e086bfc1da4db..890732c916f1b969475802f0df977a2fcce55312 100644 |
--- a/gpu/command_buffer/client/mapped_memory.cc |
+++ b/gpu/command_buffer/client/mapped_memory.cc |
@@ -13,19 +13,22 @@ |
namespace gpu { |
-MemoryChunk::MemoryChunk( |
- int32 shm_id, gpu::Buffer shm, CommandBufferHelper* helper) |
+MemoryChunk::MemoryChunk(int32 shm_id, |
+ gpu::Buffer shm, |
+ bool aggressive_reuse, |
+ CommandBufferHelper* helper) |
: shm_id_(shm_id), |
shm_(shm), |
- allocator_(shm.size, helper, shm.ptr) { |
+ allocator_(shm.size, aggressive_reuse, helper, shm.ptr) { |
} |
MappedMemoryManager::MappedMemoryManager(CommandBufferHelper* helper, |
- size_t unused_memory_reclaim_limit) |
+ MappedMemoryManagerSettings settings) |
: chunk_size_multiple_(1), |
helper_(helper), |
allocated_memory_(0), |
- max_free_bytes_(unused_memory_reclaim_limit) { |
+ max_free_bytes_(settings.unused_memory_reclaim_limit), |
+ aggressive_reuse_(settings.aggressive_reuse) { |
} |
MappedMemoryManager::~MappedMemoryManager() { |
@@ -48,7 +51,10 @@ void* MappedMemoryManager::Alloc( |
MemoryChunk* chunk = chunks_[ii]; |
chunk->FreeUnused(); |
total_bytes_in_use += chunk->bytes_in_use(); |
- if (chunk->GetLargestFreeSizeWithoutWaiting() >= size) { |
+ unsigned int largest_size = |
+ aggressive_reuse_ ? chunk->GetLargestFreeSizeWithWaiting() |
+ : chunk->GetLargestFreeSizeWithoutWaiting(); |
+ if (largest_size >= size) { |
void* mem = chunk->Alloc(size); |
DCHECK(mem); |
*shm_id = chunk->shm_id(); |
@@ -60,7 +66,7 @@ void* MappedMemoryManager::Alloc( |
// If there is a memory limit being enforced and total free |
// memory (allocated_memory_ - total_bytes_in_use) is larger than |
// the limit try waiting. |
- if (max_free_bytes_ != kNoLimit && |
+ if (!aggressive_reuse_ && max_free_bytes_ != kNoLimit && |
(allocated_memory_ - total_bytes_in_use) >= max_free_bytes_) { |
TRACE_EVENT0("gpu", "MappedMemoryManager::Alloc::wait"); |
for (size_t ii = 0; ii < chunks_.size(); ++ii) { |
@@ -85,7 +91,7 @@ void* MappedMemoryManager::Alloc( |
gpu::Buffer shm = cmd_buf->CreateTransferBuffer(chunk_size, &id); |
if (id < 0) |
return NULL; |
- MemoryChunk* mc = new MemoryChunk(id, shm, helper_); |
+ MemoryChunk* mc = new MemoryChunk(id, shm, aggressive_reuse_, helper_); |
allocated_memory_ += mc->GetSize(); |
chunks_.push_back(mc); |
void* mem = mc->Alloc(size); |