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..22935db7426d8d3cf04251352ee481c5f788de23 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_) |
Elliot Glaysher
2015/05/14 22:53:40
for (
jam
2015/05/15 02:15:31
Done.
|
+ 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 |