| Index: trunk/src/content/common/gpu/image_transport_surface_mac.cc
|
| ===================================================================
|
| --- trunk/src/content/common/gpu/image_transport_surface_mac.cc (revision 206118)
|
| +++ trunk/src/content/common/gpu/image_transport_surface_mac.cc (working copy)
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/mac/scoped_cftyperef.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "content/common/gpu/gpu_command_buffer_stub.h"
|
| #include "content/common/gpu/gpu_messages.h"
|
| #include "ui/gfx/native_widget_types.h"
|
| #include "ui/gl/gl_bindings.h"
|
| @@ -33,8 +34,10 @@
|
|
|
| // We are backed by an offscreen surface for the purposes of creating
|
| // a context, but use FBOs to render to texture backed IOSurface
|
| -class IOSurfaceImageTransportSurface : public gfx::NoOpGLSurfaceCGL,
|
| - public ImageTransportSurface {
|
| +class IOSurfaceImageTransportSurface
|
| + : public gfx::NoOpGLSurfaceCGL,
|
| + public ImageTransportSurface,
|
| + public GpuCommandBufferStub::DestructionObserver {
|
| public:
|
| IOSurfaceImageTransportSurface(GpuChannelManager* manager,
|
| GpuCommandBufferStub* stub,
|
| @@ -62,6 +65,9 @@
|
| virtual void OnResize(gfx::Size size, float scale_factor) OVERRIDE;
|
| virtual void SetLatencyInfo(const ui::LatencyInfo&) OVERRIDE;
|
|
|
| + // GpuCommandBufferStub::DestructionObserver implementation.
|
| + virtual void OnWillDestroyStub() OVERRIDE;
|
| +
|
| private:
|
| virtual ~IOSurfaceImageTransportSurface() OVERRIDE;
|
|
|
| @@ -138,7 +144,6 @@
|
| }
|
|
|
| IOSurfaceImageTransportSurface::~IOSurfaceImageTransportSurface() {
|
| - Destroy();
|
| }
|
|
|
| bool IOSurfaceImageTransportSurface::Initialize() {
|
| @@ -151,7 +156,14 @@
|
|
|
| if (!helper_->Initialize())
|
| return false;
|
| - return NoOpGLSurfaceCGL::Initialize();
|
| +
|
| + if (!NoOpGLSurfaceCGL::Initialize()) {
|
| + helper_->Destroy();
|
| + return false;
|
| + }
|
| +
|
| + helper_->stub()->AddDestructionObserver(this);
|
| + return true;
|
| }
|
|
|
| void IOSurfaceImageTransportSurface::Destroy() {
|
| @@ -313,6 +325,11 @@
|
| latency_info_ = latency_info;
|
| }
|
|
|
| +void IOSurfaceImageTransportSurface::OnWillDestroyStub() {
|
| + helper_->stub()->RemoveDestructionObserver(this);
|
| + Destroy();
|
| +}
|
| +
|
| void IOSurfaceImageTransportSurface::UnrefIOSurface() {
|
| // If we have resources to destroy, then make sure that we have a current
|
| // context which we can use to delete the resources.
|
|
|