Chromium Code Reviews| 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..68b05fc8580f3ca252757e3e6dd0281fe75e2143 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,16 +188,21 @@ GLInProcessContext* GLInProcessContext::Create( |
| const ::gpu::gles2::ContextCreationAttribHelper& attribs, |
| const SharedMemoryLimits& memory_limits, |
| GpuMemoryBufferManager* gpu_memory_buffer_manager, |
| - ImageFactory* image_factory) { |
| + ImageFactory* image_factory, |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner) { |
| if (surface.get()) { |
|
danakj
2016/09/19 20:03:25
no .get here either while u here?
ericrk
2016/09/19 20:08:03
Done.
|
| DCHECK_EQ(surface->IsOffscreen(), is_offscreen); |
| DCHECK_EQ(gfx::kNullAcceleratedWidget, window); |
| } |
| + // 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.get(), !task_runner); |
|
danakj
2016/09/19 20:03:25
no .get()
danakj
2016/09/19 20:03:25
also nit: normally i like DCHECKs at the top of th
ericrk
2016/09/19 20:08:02
Done.
|
| 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(); |