| 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..43cb8212404e6a632ae1ff5ae6e284697d9e749d 100644
|
| --- a/gpu/command_buffer/client/gl_in_process_context.cc
|
| +++ b/gpu/command_buffer/client/gl_in_process_context.cc
|
| @@ -24,11 +24,8 @@
|
| #include "base/message_loop/message_loop.h"
|
| #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/image_factory.h"
|
| #include "gpu/command_buffer/client/transfer_buffer.h"
|
| #include "gpu/command_buffer/common/constants.h"
|
| -#include "gpu/command_buffer/common/id_allocator.h"
|
| #include "gpu/command_buffer/service/command_buffer_service.h"
|
| #include "gpu/command_buffer/service/context_group.h"
|
| #include "gpu/command_buffer/service/gl_context_virtual.h"
|
| @@ -43,8 +40,6 @@
|
|
|
| namespace gpu {
|
|
|
| -using gles2::ImageManager;
|
| -
|
| namespace {
|
|
|
| const int32 kCommandBufferSize = 1024 * 1024;
|
| @@ -70,8 +65,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
|
| @@ -92,7 +86,6 @@ class AutoLockAndDecoderDetachThread {
|
|
|
| class GLInProcessContextImpl
|
| : public GLInProcessContext,
|
| - public gles2::ImageFactory,
|
| public base::SupportsWeakPtr<GLInProcessContextImpl> {
|
| public:
|
| explicit GLInProcessContextImpl(bool share_resources);
|
| @@ -113,12 +106,6 @@ class GLInProcessContextImpl
|
| OVERRIDE;
|
| virtual gles2::GLES2Implementation* GetImplementation() OVERRIDE;
|
|
|
| - // ImageFactory implementation:
|
| - virtual scoped_ptr<GpuMemoryBuffer> CreateGpuMemoryBuffer(
|
| - int width, int height, GLenum internalformat,
|
| - unsigned* image_id) OVERRIDE;
|
| - virtual void DeleteGpuMemoryBuffer(unsigned image_id) OVERRIDE;
|
| -
|
| // Other methods:
|
| gles2::GLES2Decoder* GetDecoder();
|
| bool GetBufferChanged(int32 transfer_buffer_id);
|
| @@ -133,10 +120,9 @@ class GLInProcessContextImpl
|
| void CallQueryCallback(size_t index);
|
| bool MakeCurrent();
|
|
|
| - gles2::ImageManager* GetImageManager();
|
| -
|
| base::Closure context_lost_callback_;
|
| scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
|
| + scoped_refptr<gles2::ImageManager> image_manager_;
|
| scoped_ptr<CommandBuffer> command_buffer_;
|
| scoped_ptr<GpuScheduler> gpu_scheduler_;
|
| scoped_ptr<gles2::GLES2Decoder> decoder_;
|
| @@ -174,40 +160,6 @@ AutoLockAndDecoderDetachThread::~AutoLockAndDecoderDetachThread() {
|
| &DetachThread);
|
| }
|
|
|
| -scoped_ptr<GpuMemoryBuffer> GLInProcessContextImpl::CreateGpuMemoryBuffer(
|
| - int width, int height, GLenum internalformat, unsigned int* image_id) {
|
| - // We're taking the lock here because we're accessing the ContextGroup's
|
| - // 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_refptr<gfx::GLImage> gl_image =
|
| - gfx::GLImage::CreateGLImageForGpuMemoryBuffer(buffer->GetNativeBuffer(),
|
| - gfx::Size(width, height));
|
| - *image_id = decoder_->GetContextGroup()
|
| - ->GetIdAllocator(gles2::id_namespaces::kImages)->AllocateID();
|
| - GetImageManager()->AddImage(gl_image.get(), *image_id);
|
| - return buffer.Pass();
|
| -}
|
| -
|
| -void GLInProcessContextImpl::DeleteGpuMemoryBuffer(unsigned int image_id) {
|
| - // We're taking the lock here because we're accessing the ContextGroup's
|
| - // shared ImageManager.
|
| - AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(),
|
| - g_all_shared_contexts.Get());
|
| - GetImageManager()->RemoveImage(image_id);
|
| - decoder_->GetContextGroup()->GetIdAllocator(gles2::id_namespaces::kImages)
|
| - ->FreeID(image_id);
|
| -}
|
| -
|
| GLInProcessContextImpl::GLInProcessContextImpl(bool share_resources)
|
| : share_resources_(share_resources),
|
| context_lost_(false) {
|
| @@ -278,10 +230,6 @@ gles2::GLES2Implementation* GLInProcessContextImpl::GetImplementation() {
|
| return gles2_implementation_.get();
|
| }
|
|
|
| -gles2::ImageManager* GLInProcessContextImpl::GetImageManager() {
|
| - return decoder_->GetContextGroup()->image_manager();
|
| -}
|
| -
|
| bool GLInProcessContextImpl::Initialize(
|
| bool is_offscreen,
|
| gfx::AcceleratedWidget window,
|
| @@ -329,8 +277,12 @@ bool GLInProcessContextImpl::Initialize(
|
| manager->Initialize();
|
| }
|
|
|
| + image_manager_ = new gles2::ImageManager();
|
| +
|
| scoped_ptr<CommandBufferService> command_buffer(
|
| - new CommandBufferService(transfer_buffer_manager_.get()));
|
| + new CommandBufferService(transfer_buffer_manager_.get(),
|
| + image_manager_.get(),
|
| + g_gpu_memory_buffer_factory));
|
| command_buffer->SetPutOffsetChangeCallback(base::Bind(
|
| &GLInProcessContextImpl::PumpCommands, base::Unretained(this)));
|
| command_buffer->SetGetBufferChangeCallback(base::Bind(
|
| @@ -458,8 +410,7 @@ bool GLInProcessContextImpl::Initialize(
|
| context_group ? context_group->GetImplementation()->share_group() : NULL,
|
| transfer_buffer_.get(),
|
| true,
|
| - false,
|
| - this));
|
| + false));
|
|
|
| if (!gles2_implementation_->Initialize(
|
| kStartTransferBufferSize,
|
| @@ -594,9 +545,16 @@ GLInProcessContext* GLInProcessContext::CreateContext(
|
| }
|
|
|
| // static
|
| -void GLInProcessContext::SetGpuMemoryBufferCreator(
|
| - GpuMemoryBufferCreator* creator) {
|
| - g_gpu_memory_buffer_creator = creator;
|
| +void GLInProcessContext::SetGpuMemoryBufferFactory(
|
| + GpuMemoryBufferFactory* factory) {
|
| +#if !defined(NDEBUG)
|
| + {
|
| + AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(),
|
| + g_all_shared_contexts.Get());
|
| + DCHECK(g_all_shared_contexts.Get().empty());
|
| + }
|
| +#endif // !defined(NDEBUG)
|
| + g_gpu_memory_buffer_factory = factory;
|
| }
|
|
|
| // static
|
|
|