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 c87f23396c7d7d5096f012fd9d4962715d78ac8d..1286ed47bb57856e22bf64daff74533cf3a004f8 100644 |
--- a/gpu/command_buffer/client/gl_in_process_context.cc |
+++ b/gpu/command_buffer/client/gl_in_process_context.cc |
@@ -26,6 +26,7 @@ |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
#include "base/message_loop/message_loop.h" |
+#include "base/threading/thread_task_runner_handle.h" |
#include "gpu/command_buffer/client/gles2_cmd_helper.h" |
#include "gpu/command_buffer/client/gles2_implementation.h" |
#include "gpu/command_buffer/client/shared_memory_limits.h" |
@@ -58,7 +59,8 @@ class GLInProcessContextImpl |
const scoped_refptr<InProcessCommandBuffer::Service>& service, |
const SharedMemoryLimits& mem_limits, |
GpuMemoryBufferManager* gpu_memory_buffer_manager, |
- ImageFactory* image_factory); |
+ ImageFactory* image_factory, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
// GLInProcessContext implementation: |
gles2::GLES2Implementation* GetImplementation() override; |
@@ -99,7 +101,8 @@ bool GLInProcessContextImpl::Initialize( |
const scoped_refptr<InProcessCommandBuffer::Service>& service, |
const SharedMemoryLimits& mem_limits, |
GpuMemoryBufferManager* gpu_memory_buffer_manager, |
- ImageFactory* image_factory) { |
+ ImageFactory* image_factory, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner) { |
DCHECK_GE(attribs.offscreen_framebuffer_size.width(), 0); |
DCHECK_GE(attribs.offscreen_framebuffer_size.height(), 0); |
@@ -116,13 +119,9 @@ bool GLInProcessContextImpl::Initialize( |
DCHECK(share_command_buffer); |
} |
- if (!command_buffer_->Initialize(surface, |
- is_offscreen, |
- window, |
- attribs, |
- share_command_buffer, |
- gpu_memory_buffer_manager, |
- image_factory)) { |
+ if (!command_buffer_->Initialize( |
+ surface, is_offscreen, window, attribs, share_command_buffer, |
+ gpu_memory_buffer_manager, image_factory, std::move(task_runner))) { |
DLOG(ERROR) << "Failed to initialize InProcessCommmandBuffer"; |
return false; |
} |
@@ -144,14 +143,10 @@ bool GLInProcessContextImpl::Initialize( |
const bool support_client_side_arrays = false; |
// Create the object exposing the OpenGL API. |
- gles2_implementation_.reset( |
- new gles2::GLES2Implementation(gles2_helper_.get(), |
- share_group.get(), |
- transfer_buffer_.get(), |
- bind_generates_resource, |
- attribs.lose_context_when_out_of_memory, |
- support_client_side_arrays, |
- command_buffer_.get())); |
+ gles2_implementation_.reset(new gles2::GLES2Implementation( |
+ gles2_helper_.get(), share_group.get(), transfer_buffer_.get(), |
+ bind_generates_resource, attribs.lose_context_when_out_of_memory, |
+ support_client_side_arrays, command_buffer_.get())); |
if (!gles2_implementation_->Initialize( |
mem_limits.start_transfer_buffer_size, |
@@ -193,8 +188,13 @@ GLInProcessContext* GLInProcessContext::Create( |
const ::gpu::gles2::ContextCreationAttribHelper& attribs, |
const SharedMemoryLimits& memory_limits, |
GpuMemoryBufferManager* gpu_memory_buffer_manager, |
- ImageFactory* image_factory) { |
- if (surface.get()) { |
+ ImageFactory* image_factory, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner) { |
+ // If a surface is provided, we are running in a webview and should not have |
+ // a task runner. We must have a task runner in all other cases. |
+ DCHECK_EQ(!!surface, !task_runner); |
+ |
+ if (surface) { |
DCHECK_EQ(surface->IsOffscreen(), is_offscreen); |
DCHECK_EQ(gfx::kNullAcceleratedWidget, window); |
} |
@@ -202,7 +202,8 @@ GLInProcessContext* GLInProcessContext::Create( |
std::unique_ptr<GLInProcessContextImpl> context(new GLInProcessContextImpl); |
if (!context->Initialize(surface, is_offscreen, share_context, window, |
attribs, service, memory_limits, |
- gpu_memory_buffer_manager, image_factory)) |
+ gpu_memory_buffer_manager, image_factory, |
+ std::move(task_runner))) |
return NULL; |
return context.release(); |