| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc | 
| =================================================================== | 
| --- gpu/command_buffer/service/gles2_cmd_decoder.cc	(revision 106500) | 
| +++ gpu/command_buffer/service/gles2_cmd_decoder.cc	(working copy) | 
| @@ -507,6 +507,7 @@ | 
| virtual bool ResizeOffscreenFrameBuffer(const gfx::Size& size); | 
| void UpdateParentTextureInfo(); | 
| virtual bool MakeCurrent(); | 
| +  virtual void ReleaseCurrent(); | 
| virtual GLES2Util* GetGLES2Util() { return &util_; } | 
| virtual gfx::GLContext* GetGLContext() { return context_.get(); } | 
| virtual gfx::GLSurface* GetGLSurface() { return surface_.get(); } | 
| @@ -514,9 +515,7 @@ | 
|  | 
| virtual void SetResizeCallback(Callback1<gfx::Size>::Type* callback); | 
|  | 
| -#if defined(OS_MACOSX) | 
| virtual void SetSwapBuffersCallback(Callback0::Type* callback); | 
| -#endif | 
|  | 
| virtual void SetStreamTextureManager(StreamTextureManager* manager); | 
| virtual bool GetServiceTextureId(uint32 client_texture_id, | 
| @@ -1324,9 +1323,7 @@ | 
|  | 
| scoped_ptr<Callback1<gfx::Size>::Type> resize_callback_; | 
|  | 
| -#if defined(OS_MACOSX) | 
| scoped_ptr<Callback0::Type> swap_buffers_callback_; | 
| -#endif | 
|  | 
| StreamTextureManager* stream_texture_manager_; | 
|  | 
| @@ -2223,6 +2220,11 @@ | 
| return result; | 
| } | 
|  | 
| +void GLES2DecoderImpl::ReleaseCurrent() { | 
| +  if (context_.get()) | 
| +    context_->ReleaseCurrent(surface_.get()); | 
| +} | 
| + | 
| void GLES2DecoderImpl::RestoreCurrentRenderbufferBindings() { | 
| glBindRenderbufferEXT( | 
| GL_RENDERBUFFER, | 
| @@ -2371,11 +2373,9 @@ | 
| resize_callback_.reset(callback); | 
| } | 
|  | 
| -#if defined(OS_MACOSX) | 
| void GLES2DecoderImpl::SetSwapBuffersCallback(Callback0::Type* callback) { | 
| swap_buffers_callback_.reset(callback); | 
| } | 
| -#endif | 
|  | 
| void GLES2DecoderImpl::SetStreamTextureManager(StreamTextureManager* manager) { | 
| stream_texture_manager_ = manager; | 
| @@ -6851,11 +6851,10 @@ | 
| // For multisampled buffers, bind the resolved frame buffer so that | 
| // callbacks can call ReadPixels or CopyTexImage2D. | 
| ScopedResolvedFrameBufferBinder binder(this, true, false); | 
| -#if defined(OS_MACOSX) | 
| if (swap_buffers_callback_.get()) { | 
| swap_buffers_callback_->Run(); | 
| } | 
| -#endif | 
| + | 
| return error::kNoError; | 
| } else { | 
| ScopedFrameBufferBinder binder(this, | 
| @@ -6876,11 +6875,10 @@ | 
|  | 
| // Run the callback with |binder| in scope, so that the callback can call | 
| // ReadPixels or CopyTexImage2D. | 
| -#if defined(OS_MACOSX) | 
| if (swap_buffers_callback_.get()) { | 
| swap_buffers_callback_->Run(); | 
| } | 
| -#endif | 
| + | 
| return error::kNoError; | 
| } | 
| } else { | 
| @@ -6891,11 +6889,9 @@ | 
| } | 
| } | 
|  | 
| -#if defined(OS_MACOSX) | 
| if (swap_buffers_callback_.get()) { | 
| swap_buffers_callback_->Run(); | 
| } | 
| -#endif | 
|  | 
| return error::kNoError; | 
| } | 
|  |