Index: gpu/command_buffer/client/gles2_implementation.cc |
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc |
index b0efc3769da617acfcc5423f07951c6f8d1dc208..83ae1c75dc8e10083f99dd9efc031d88fe2ff334 100644 |
--- a/gpu/command_buffer/client/gles2_implementation.cc |
+++ b/gpu/command_buffer/client/gles2_implementation.cc |
@@ -155,14 +155,29 @@ bool GLES2Implementation::Initialize( |
return false; |
} |
- mapped_memory_.reset(new MappedMemoryManager(helper_, mapped_memory_limit)); |
- |
+ MappedMemoryManagerSettings mapped_memory_settings; |
+ mapped_memory_settings.unused_memory_reclaim_limit = |
+ mapped_memory_limit; |
+ mapped_memory_settings.aggressive_reuse = false; |
+ mapped_memory_.reset(new MappedMemoryManager( |
+ helper_, mapped_memory_settings)); |
+ |
+ MappedMemoryManagerSettings transfer_buffer_memory_settings; |
+ transfer_buffer_memory_settings.unused_memory_reclaim_limit = |
+ mapped_memory_limit; |
+ transfer_buffer_memory_settings.aggressive_reuse = true; |
+ transfer_buffer_memory_.reset(new MappedMemoryManager( |
+ helper_, transfer_buffer_memory_settings)); |
+ |
+ // Set the chunk size of transfer buffer chunks. Let the generic memory |
+ // manager allocate chunks to be as small as possible, i.e. the default size |
+ // multiple 1. |
unsigned chunk_size = 2 * 1024 * 1024; |
if (mapped_memory_limit != kNoLimit) { |
// Use smaller chunks if the client is very memory conscientious. |
chunk_size = std::min(mapped_memory_limit / 4, chunk_size); |
} |
- mapped_memory_->set_chunk_size_multiple(chunk_size); |
+ transfer_buffer_memory_->set_chunk_size_multiple(chunk_size); |
if (!QueryAndCacheStaticState()) |
return false; |
@@ -177,7 +192,7 @@ bool GLES2Implementation::Initialize( |
static_state_.int_state.max_combined_texture_image_units]); |
query_tracker_.reset(new QueryTracker(mapped_memory_.get())); |
- buffer_tracker_.reset(new BufferTracker(mapped_memory_.get())); |
+ buffer_tracker_.reset(new BufferTracker(transfer_buffer_memory_.get())); |
gpu_memory_buffer_tracker_.reset(new GpuMemoryBufferTracker(gpu_control_)); |
#if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) |
@@ -304,6 +319,7 @@ uint32 GLES2Implementation::GetResultShmOffset() { |
void GLES2Implementation::FreeUnusedSharedMemory() { |
mapped_memory_->FreeUnused(); |
+ transfer_buffer_memory_->FreeUnused(); |
} |
void GLES2Implementation::FreeEverything() { |