Chromium Code Reviews| 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 e91bbd6b3c99a5cad780f0532252847ed52bb752..11250c0e4503f304bb0c80d8952f4afd10bfea73 100644 |
| --- a/gpu/command_buffer/client/gles2_implementation.cc |
| +++ b/gpu/command_buffer/client/gles2_implementation.cc |
| @@ -17,6 +17,7 @@ |
| #include <string> |
| #include "base/compiler_specific.h" |
| #include "base/strings/stringprintf.h" |
| +#include "base/sys_info.h" |
| #include "base/thread_task_runner_handle.h" |
| #include "base/trace_event/memory_allocator_dump.h" |
| #include "base/trace_event/memory_dump_manager.h" |
| @@ -111,6 +112,17 @@ GLES2Implementation::GLES2Implementation( |
| lose_context_when_out_of_memory_(lose_context_when_out_of_memory), |
| support_client_side_arrays_(support_client_side_arrays), |
| use_count_(0), |
| + max_extra_transfer_buffer_size_( |
| +#if defined(OS_NACL) |
| + 0), |
| +#else |
| + // Do not use more than 5% of extra shared memory, and do not |
| + // use any extra for memory contrained devices (<1GB). |
|
no sievers
2015/10/19 15:55:04
nit: <=GB
David Yen
2015/10/19 16:02:18
Done.
|
| + base::SysInfo::AmountOfPhysicalMemory() > 1024 * 1024 * 1024 |
| + ? static_cast<uint32_t>(base::SysInfo::AmountOfPhysicalMemory() / |
|
no sievers
2015/10/19 15:55:04
maybe be paranoid and do saturated_cast<>?
David Yen
2015/10/19 16:02:18
Done.
|
| + 20) |
| + : 0), |
| +#endif |
| error_message_callback_(NULL), |
| current_trace_stack_(0), |
| gpu_control_(gpu_control), |
| @@ -2306,7 +2318,7 @@ void GLES2Implementation::TexImage2D( |
| shm_id = transfer_alloc.shm_id(); |
| shm_offset = transfer_alloc.offset(); |
| buffer_pointer = transfer_alloc.address(); |
| - } else { |
| + } else if (size < max_extra_transfer_buffer_size_) { |
| mapped_alloc.Reset(size); |
| if (mapped_alloc.valid()) { |
| transfer_alloc.Discard(); |
| @@ -2432,7 +2444,7 @@ void GLES2Implementation::TexImage3D( |
| shm_id = transfer_alloc.shm_id(); |
| shm_offset = transfer_alloc.offset(); |
| buffer_pointer = transfer_alloc.address(); |
| - } else { |
| + } else if (size < max_extra_transfer_buffer_size_) { |
| mapped_alloc.Reset(size); |
| if (mapped_alloc.valid()) { |
| transfer_alloc.Discard(); |