| 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 52e8d22b27bc8e261e6e17da1531858c84f19420..ccf3b80228f875796d37f5067d544253683f97be 100644
|
| --- a/gpu/command_buffer/client/gl_in_process_context.cc
|
| +++ b/gpu/command_buffer/client/gl_in_process_context.cc
|
| @@ -25,6 +25,7 @@
|
| #include "base/synchronization/lock.h"
|
| #include "gpu/command_buffer/client/gles2_implementation.h"
|
| #include "gpu/command_buffer/client/gpu_memory_buffer.h"
|
| +#include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
|
| #include "gpu/command_buffer/client/image_factory.h"
|
| #include "gpu/command_buffer/client/transfer_buffer.h"
|
| #include "gpu/command_buffer/common/constants.h"
|
| @@ -70,8 +71,7 @@ static base::LazyInstance<
|
|
|
| static bool g_use_virtualized_gl_context = false;
|
|
|
| -static GLInProcessContext::GpuMemoryBufferCreator* g_gpu_memory_buffer_creator =
|
| - NULL;
|
| +static GpuMemoryBufferFactory* g_gpu_memory_buffer_factory = NULL;
|
|
|
| // Also calls DetachFromThreadHack on all GLES2Decoders before the lock is
|
| // released to maintain the invariant that all decoders are unbound while the
|
| @@ -90,6 +90,12 @@ class AutoLockAndDecoderDetachThread {
|
| const std::set<GLInProcessContextImpl*>& contexts_;
|
| };
|
|
|
| +size_t SharedContextCount() {
|
| + AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(),
|
| + g_all_shared_contexts.Get());
|
| + return g_all_shared_contexts.Get().size();
|
| +}
|
| +
|
| class GLInProcessContextImpl
|
| : public GLInProcessContext,
|
| public gles2::ImageFactory,
|
| @@ -180,14 +186,12 @@ scoped_ptr<GpuMemoryBuffer> GLInProcessContextImpl::CreateGpuMemoryBuffer(
|
| // shared IdManager.
|
| AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(),
|
| g_all_shared_contexts.Get());
|
| - // For Android WebView we assume the |internalformat| will always be
|
| - // GL_RGBA8_OES.
|
| - DCHECK_EQ(static_cast<GLenum>(GL_RGBA8_OES), internalformat);
|
| - scoped_ptr<GpuMemoryBuffer> buffer =
|
| - g_gpu_memory_buffer_creator(width, height);
|
| -
|
| - if (buffer.get() == NULL)
|
| - return buffer.Pass();
|
| + scoped_ptr<GpuMemoryBuffer> buffer(
|
| + g_gpu_memory_buffer_factory->CreateGpuMemoryBuffer(width,
|
| + height,
|
| + internalformat));
|
| + if (!buffer)
|
| + return scoped_ptr<GpuMemoryBuffer>();
|
|
|
| scoped_refptr<gfx::GLImage> gl_image =
|
| gfx::GLImage::CreateGLImageForGpuMemoryBuffer(buffer->GetNativeBuffer(),
|
| @@ -594,20 +598,15 @@ GLInProcessContext* GLInProcessContext::CreateContext(
|
| }
|
|
|
| // static
|
| -void GLInProcessContext::SetGpuMemoryBufferCreator(
|
| - GpuMemoryBufferCreator* creator) {
|
| - g_gpu_memory_buffer_creator = creator;
|
| +void GLInProcessContext::SetGpuMemoryBufferFactory(
|
| + GpuMemoryBufferFactory* factory) {
|
| + DCHECK_EQ(0u, SharedContextCount());
|
| + g_gpu_memory_buffer_factory = factory;
|
| }
|
|
|
| // static
|
| void GLInProcessContext::EnableVirtualizedContext() {
|
| -#if !defined(NDEBUG)
|
| - {
|
| - AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(),
|
| - g_all_shared_contexts.Get());
|
| - DCHECK(g_all_shared_contexts.Get().empty());
|
| - }
|
| -#endif // !defined(NDEBUG)
|
| + DCHECK_EQ(0u, SharedContextCount());
|
| g_use_virtualized_gl_context = true;
|
| }
|
|
|
|
|