| Index: components/native_viewport/onscreen_context_provider.cc
|
| diff --git a/components/native_viewport/onscreen_context_provider.cc b/components/native_viewport/onscreen_context_provider.cc
|
| index 7d6b5bfdd531c0bb5fd1995934d61e01043db94f..4b4896ace43a446dc31f386b6a2cec0ee97ce84a 100644
|
| --- a/components/native_viewport/onscreen_context_provider.cc
|
| +++ b/components/native_viewport/onscreen_context_provider.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "components/native_viewport/onscreen_context_provider.h"
|
|
|
| +#include "base/bind.h"
|
| #include "components/gles2/command_buffer_driver.h"
|
| #include "components/gles2/command_buffer_impl.h"
|
| #include "components/gles2/gpu_state.h"
|
| @@ -12,10 +13,14 @@ namespace native_viewport {
|
|
|
| OnscreenContextProvider::OnscreenContextProvider(
|
| const scoped_refptr<gles2::GpuState>& state)
|
| - : state_(state), widget_(gfx::kNullAcceleratedWidget), binding_(this) {
|
| + : state_(state),
|
| + widget_(gfx::kNullAcceleratedWidget),
|
| + binding_(this) {
|
| }
|
|
|
| OnscreenContextProvider::~OnscreenContextProvider() {
|
| + for (const auto& driver : command_buffers_)
|
| + driver->DestroyWindow();
|
| }
|
|
|
| void OnscreenContextProvider::Bind(
|
| @@ -45,14 +50,25 @@ void OnscreenContextProvider::Create(
|
|
|
| void OnscreenContextProvider::CreateAndReturnCommandBuffer() {
|
| mojo::CommandBufferPtr cb;
|
| + scoped_ptr<gles2::CommandBufferDriver> command_buffer_driver(
|
| + new gles2::CommandBufferDriver(
|
| + widget_, state_->share_group(), state_->mailbox_manager(),
|
| + state_->sync_point_manager(),
|
| + base::Bind(&OnscreenContextProvider::CommandBufferDestroyed,
|
| + base::Unretained(this))));
|
| + command_buffers_.insert(command_buffer_driver.get());
|
| +
|
| new gles2::CommandBufferImpl(
|
| GetProxy(&cb), pending_listener_.Pass(), state_->control_task_runner(),
|
| state_->sync_point_manager(),
|
| - make_scoped_ptr(new gles2::CommandBufferDriver(
|
| - widget_, state_->share_group(), state_->mailbox_manager(),
|
| - state_->sync_point_manager())));
|
| + command_buffer_driver.Pass());
|
| pending_create_callback_.Run(cb.Pass());
|
| pending_create_callback_.reset();
|
| }
|
|
|
| +void OnscreenContextProvider::CommandBufferDestroyed(
|
| + gles2::CommandBufferDriver* command_buffer) {
|
| + command_buffers_.erase(command_buffer);
|
| +}
|
| +
|
| } // namespace mojo
|
|
|