Index: gpu/command_buffer/client/gl_in_process_context.cc |
diff --git a/gpu/command_buffer/client/gl_in_process_context.cc b/gpu/command_buffer/client/gl_in_process_context.cc |
index 0a8294ada4143c260e12d66070af6f9056ba91f4..cc2ab5f9b6860a6daabe389e875db389d733441f 100644 |
--- a/gpu/command_buffer/client/gl_in_process_context.cc |
+++ b/gpu/command_buffer/client/gl_in_process_context.cc |
@@ -37,18 +37,17 @@ namespace gpu { |
namespace { |
-const int32 kCommandBufferSize = 1024 * 1024; |
-// TODO(kbr): make the transfer buffer size configurable via context |
-// creation attributes. |
-const size_t kStartTransferBufferSize = 4 * 1024 * 1024; |
-const size_t kMinTransferBufferSize = 1 * 256 * 1024; |
-const size_t kMaxTransferBufferSize = 16 * 1024 * 1024; |
+const int32 kDefaultCommandBufferSize = 1024 * 1024; |
+const size_t kDefaultStartTransferBufferSize = 4 * 1024 * 1024; |
+const size_t kDefaultMinTransferBufferSize = 1 * 256 * 1024; |
+const size_t kDefaultMaxTransferBufferSize = 16 * 1024 * 1024; |
class GLInProcessContextImpl |
: public GLInProcessContext, |
public base::SupportsWeakPtr<GLInProcessContextImpl> { |
public: |
- explicit GLInProcessContextImpl(); |
+ explicit GLInProcessContextImpl( |
+ const GLInProcessContextSharedMemoryLimits& mem_limits); |
virtual ~GLInProcessContextImpl(); |
bool Initialize( |
@@ -65,6 +64,7 @@ class GLInProcessContextImpl |
// GLInProcessContext implementation: |
virtual void SetContextLostCallback(const base::Closure& callback) OVERRIDE; |
virtual gles2::GLES2Implementation* GetImplementation() OVERRIDE; |
+ virtual size_t GetMappedMemoryLimit() OVERRIDE; |
#if defined(OS_ANDROID) |
virtual scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture( |
@@ -81,6 +81,7 @@ class GLInProcessContextImpl |
scoped_ptr<gles2::GLES2Implementation> gles2_implementation_; |
scoped_ptr<InProcessCommandBuffer> command_buffer_; |
+ const GLInProcessContextSharedMemoryLimits mem_limits_; |
bool context_lost_; |
base::Closure context_lost_callback_; |
@@ -92,8 +93,10 @@ base::LazyInstance<base::Lock> g_all_shared_contexts_lock = |
base::LazyInstance<std::set<GLInProcessContextImpl*> > g_all_shared_contexts = |
LAZY_INSTANCE_INITIALIZER; |
-GLInProcessContextImpl::GLInProcessContextImpl() |
- : context_lost_(false) {} |
+GLInProcessContextImpl::GLInProcessContextImpl( |
+ const GLInProcessContextSharedMemoryLimits& mem_limits) |
+ : mem_limits_(mem_limits), context_lost_(false) { |
+} |
GLInProcessContextImpl::~GLInProcessContextImpl() { |
{ |
@@ -107,6 +110,10 @@ gles2::GLES2Implementation* GLInProcessContextImpl::GetImplementation() { |
return gles2_implementation_.get(); |
} |
+size_t GLInProcessContextImpl::GetMappedMemoryLimit() { |
+ return mem_limits_.mapped_memory_reclaim_limit; |
+} |
+ |
void GLInProcessContextImpl::SetContextLostCallback( |
const base::Closure& callback) { |
context_lost_callback_ = callback; |
@@ -181,7 +188,7 @@ bool GLInProcessContextImpl::Initialize( |
// Create the GLES2 helper, which writes the command buffer protocol. |
gles2_helper_.reset(new gles2::GLES2CmdHelper(command_buffer_.get())); |
- if (!gles2_helper_->Initialize(kCommandBufferSize)) { |
+ if (!gles2_helper_->Initialize(mem_limits_.command_buffer_size)) { |
LOG(ERROR) << "Failed to initialize GLES2CmdHelper"; |
Destroy(); |
return false; |
@@ -209,10 +216,10 @@ bool GLInProcessContextImpl::Initialize( |
} |
if (!gles2_implementation_->Initialize( |
- kStartTransferBufferSize, |
- kMinTransferBufferSize, |
- kMaxTransferBufferSize, |
- gles2::GLES2Implementation::kNoLimit)) { |
+ mem_limits_.start_transfer_buffer_size, |
+ mem_limits_.min_transfer_buffer_size, |
+ mem_limits_.max_transfer_buffer_size, |
+ mem_limits_.mapped_memory_reclaim_limit)) { |
return false; |
} |
@@ -245,6 +252,15 @@ GLInProcessContextImpl::GetSurfaceTexture(uint32 stream_id) { |
} // anonymous namespace |
+GLInProcessContextSharedMemoryLimits::GLInProcessContextSharedMemoryLimits() |
+ : command_buffer_size(kDefaultCommandBufferSize), |
+ start_transfer_buffer_size(kDefaultStartTransferBufferSize), |
+ min_transfer_buffer_size(kDefaultMinTransferBufferSize), |
+ max_transfer_buffer_size(kDefaultMaxTransferBufferSize), |
+ mapped_memory_reclaim_limit(gles2::GLES2Implementation::kNoLimit) { |
+} |
+ |
+// static |
GLInProcessContext* GLInProcessContext::Create( |
scoped_refptr<gpu::InProcessCommandBuffer::Service> service, |
scoped_refptr<gfx::GLSurface> surface, |
@@ -254,7 +270,8 @@ GLInProcessContext* GLInProcessContext::Create( |
GLInProcessContext* share_context, |
bool use_global_share_group, |
const ::gpu::gles2::ContextCreationAttribHelper& attribs, |
- gfx::GpuPreference gpu_preference) { |
+ gfx::GpuPreference gpu_preference, |
+ const GLInProcessContextSharedMemoryLimits& memory_limits) { |
DCHECK(!use_global_share_group || !share_context); |
if (surface.get()) { |
DCHECK_EQ(surface->IsOffscreen(), is_offscreen); |
@@ -262,7 +279,8 @@ GLInProcessContext* GLInProcessContext::Create( |
DCHECK_EQ(gfx::kNullAcceleratedWidget, window); |
} |
- scoped_ptr<GLInProcessContextImpl> context(new GLInProcessContextImpl()); |
+ scoped_ptr<GLInProcessContextImpl> context( |
+ new GLInProcessContextImpl(memory_limits)); |
if (!context->Initialize(surface, |
is_offscreen, |
use_global_share_group, |