| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
 | 
| ===================================================================
 | 
| --- gpu/command_buffer/service/gles2_cmd_decoder.cc	(revision 92876)
 | 
| +++ gpu/command_buffer/service/gles2_cmd_decoder.cc	(working copy)
 | 
| @@ -478,7 +478,6 @@
 | 
|  
 | 
|    virtual void SetResizeCallback(Callback1<gfx::Size>::Type* callback);
 | 
|    virtual void SetSwapBuffersCallback(Callback0::Type* callback);
 | 
| -  virtual void SetLatchCallback(const base::Callback<void(bool)>& callback);;
 | 
|    virtual bool GetServiceTextureId(uint32 client_texture_id,
 | 
|                                     uint32* service_texture_id);
 | 
|  
 | 
| @@ -1271,7 +1270,6 @@
 | 
|  
 | 
|    scoped_ptr<Callback1<gfx::Size>::Type> resize_callback_;
 | 
|    scoped_ptr<Callback0::Type> swap_buffers_callback_;
 | 
| -  base::Callback<void(bool)> latch_callback_;
 | 
|  
 | 
|    // The format of the back buffer_
 | 
|    GLenum back_buffer_color_format_;
 | 
| @@ -2356,11 +2354,6 @@
 | 
|    swap_buffers_callback_.reset(callback);
 | 
|  }
 | 
|  
 | 
| -void GLES2DecoderImpl::SetLatchCallback(
 | 
| -    const base::Callback<void(bool)>& callback) {
 | 
| -  latch_callback_ = callback;
 | 
| -}
 | 
| -
 | 
|  bool GLES2DecoderImpl::GetServiceTextureId(uint32 client_texture_id,
 | 
|                                             uint32* service_texture_id) {
 | 
|    TextureManager::TextureInfo* texture =
 | 
| @@ -6527,62 +6520,6 @@
 | 
|    return error::kNoError;
 | 
|  }
 | 
|  
 | 
| -error::Error GLES2DecoderImpl::HandleSetLatchCHROMIUM(
 | 
| -    uint32 immediate_data_size, const gles2::SetLatchCHROMIUM& c) {
 | 
| -  TRACE_EVENT1("gpu", "SetLatch", "latch_id", c.latch_id);
 | 
| -  // Ensure the side effects of previous commands are visible to other contexts.
 | 
| -  // There is no need to do this for ANGLE because it uses a
 | 
| -  // single D3D device for all contexts.
 | 
| -  if (!IsAngle())
 | 
| -    glFlush();
 | 
| -
 | 
| -  int32 shm_id = gpu::kLatchSharedMemoryId;
 | 
| -  uint32 latch_id = c.latch_id;
 | 
| -  uint32 shm_offset = 0;
 | 
| -  base::subtle::Atomic32* latch;
 | 
| -  if (!SafeMultiplyUint32(latch_id, sizeof(*latch), &shm_offset)) {
 | 
| -    return error::kOutOfBounds;
 | 
| -  }
 | 
| -  latch = GetSharedMemoryAs<base::subtle::Atomic32*>(
 | 
| -      shm_id, shm_offset, sizeof(*latch));
 | 
| -  if (!latch) {
 | 
| -    return error::kOutOfBounds;
 | 
| -  }
 | 
| -  base::subtle::Atomic32 old =
 | 
| -      base::subtle::NoBarrier_CompareAndSwap(latch, 0, 1);
 | 
| -  DCHECK(old == 0);
 | 
| -  if (!latch_callback_.is_null())
 | 
| -    latch_callback_.Run(true);
 | 
| -  return error::kNoError;
 | 
| -}
 | 
| -
 | 
| -error::Error GLES2DecoderImpl::HandleWaitLatchCHROMIUM(
 | 
| -    uint32 immediate_data_size, const gles2::WaitLatchCHROMIUM& c) {
 | 
| -  TRACE_EVENT1("gpu", "WaitLatch", "latch_id", c.latch_id);
 | 
| -  int32 shm_id = gpu::kLatchSharedMemoryId;
 | 
| -  uint32 latch_id = c.latch_id;
 | 
| -  uint32 shm_offset = 0;
 | 
| -  base::subtle::Atomic32* latch;
 | 
| -  if (!SafeMultiplyUint32(latch_id, sizeof(*latch), &shm_offset)) {
 | 
| -    return error::kOutOfBounds;
 | 
| -  }
 | 
| -  latch = GetSharedMemoryAs<base::subtle::Atomic32*>(
 | 
| -      shm_id, shm_offset, sizeof(*latch));
 | 
| -  if (!latch) {
 | 
| -    return error::kOutOfBounds;
 | 
| -  }
 | 
| -
 | 
| -  base::subtle::Atomic32 old =
 | 
| -      base::subtle::NoBarrier_CompareAndSwap(latch, 1, 0);
 | 
| -  if (old == 0) {
 | 
| -    if (!latch_callback_.is_null())
 | 
| -      latch_callback_.Run(false);
 | 
| -    return error::kWaiting;
 | 
| -  } else {
 | 
| -    return error::kNoError;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
|  error::Error GLES2DecoderImpl::HandleCommandBufferEnableCHROMIUM(
 | 
|      uint32 immediate_data_size, const gles2::CommandBufferEnableCHROMIUM& c) {
 | 
|    Bucket* bucket = GetBucket(c.bucket_id);
 | 
| 
 |