| Index: gpu/ipc/client/command_buffer_proxy_impl.h
 | 
| diff --git a/gpu/ipc/client/command_buffer_proxy_impl.h b/gpu/ipc/client/command_buffer_proxy_impl.h
 | 
| index 89300514ca5aec9da9fb5178c788aba04928ad1c..00f844a8d2c74a7cabcdc6c7058c328390a32415 100644
 | 
| --- a/gpu/ipc/client/command_buffer_proxy_impl.h
 | 
| +++ b/gpu/ipc/client/command_buffer_proxy_impl.h
 | 
| @@ -96,11 +96,10 @@ class GPU_EXPORT CommandBufferProxyImpl
 | 
|  
 | 
|    // CommandBuffer implementation:
 | 
|    State GetLastState() override;
 | 
| -  int32_t GetLastToken() override;
 | 
|    void Flush(int32_t put_offset) override;
 | 
|    void OrderingBarrier(int32_t put_offset) override;
 | 
| -  void WaitForTokenInRange(int32_t start, int32_t end) override;
 | 
| -  void WaitForGetOffsetInRange(int32_t start, int32_t end) override;
 | 
| +  State WaitForTokenInRange(int32_t start, int32_t end) override;
 | 
| +  State WaitForGetOffsetInRange(int32_t start, int32_t end) override;
 | 
|    void SetGetBuffer(int32_t shm_id) override;
 | 
|    scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
 | 
|                                                    int32_t* id) override;
 | 
| @@ -128,6 +127,7 @@ class GPU_EXPORT CommandBufferProxyImpl
 | 
|    bool IsFenceSyncRelease(uint64_t release) override;
 | 
|    bool IsFenceSyncFlushed(uint64_t release) override;
 | 
|    bool IsFenceSyncFlushReceived(uint64_t release) override;
 | 
| +  bool IsFenceSyncReleased(uint64_t release) override;
 | 
|    void SignalSyncToken(const gpu::SyncToken& sync_token,
 | 
|                         const base::Closure& callback) override;
 | 
|    bool CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) override;
 | 
| @@ -157,12 +157,6 @@ class GPU_EXPORT CommandBufferProxyImpl
 | 
|    void SetUpdateVSyncParametersCallback(
 | 
|        const UpdateVSyncParametersCallback& callback);
 | 
|  
 | 
| -  // TODO(apatrick): this is a temporary optimization while skia is calling
 | 
| -  // ContentGLContext::MakeCurrent prior to every GL call. It saves returning 6
 | 
| -  // ints redundantly when only the error is needed for the
 | 
| -  // CommandBufferProxyImpl implementation.
 | 
| -  gpu::error::Error GetLastError() override;
 | 
| -
 | 
|    int32_t route_id() const { return route_id_; }
 | 
|  
 | 
|    const scoped_refptr<GpuChannelHost>& channel() const { return channel_; }
 | 
| @@ -211,6 +205,9 @@ class GPU_EXPORT CommandBufferProxyImpl
 | 
|    // Try to read an updated copy of the state from shared memory, and calls
 | 
|    // OnGpuStateError() if the new state has an error.
 | 
|    void TryUpdateState();
 | 
| +  // Like above but calls the error handler and disconnects channel by posting
 | 
| +  // a task.
 | 
| +  void TryUpdateStateThreadSafe();
 | 
|    // Like the above but does not call the error event handler if the new state
 | 
|    // has an error.
 | 
|    void TryUpdateStateDontReportError();
 | 
| @@ -240,6 +237,16 @@ class GPU_EXPORT CommandBufferProxyImpl
 | 
|    // The shared memory area used to update state.
 | 
|    gpu::CommandBufferSharedState* shared_state() const;
 | 
|  
 | 
| +  // The shared memory area used to update state.
 | 
| +  std::unique_ptr<base::SharedMemory> shared_state_shm_;
 | 
| +
 | 
| +  // The last cached state received from the service.
 | 
| +  State last_state_;
 | 
| +
 | 
| +  // Lock to access shared state e.g. sync token release count across multiple
 | 
| +  // threads. This allows tracking command buffer progress from another thread.
 | 
| +  base::Lock last_state_lock_;
 | 
| +
 | 
|    // There should be a lock_ if this is going to be used across multiple
 | 
|    // threads, or we guarantee it is used by a single thread by using a thread
 | 
|    // checker if no lock_ is set.
 | 
| @@ -252,12 +259,6 @@ class GPU_EXPORT CommandBufferProxyImpl
 | 
|    // Unowned list of DeletionObservers.
 | 
|    base::ObserverList<DeletionObserver> deletion_observers_;
 | 
|  
 | 
| -  // The last cached state received from the service.
 | 
| -  State last_state_;
 | 
| -
 | 
| -  // The shared memory area used to update state.
 | 
| -  std::unique_ptr<base::SharedMemory> shared_state_shm_;
 | 
| -
 | 
|    scoped_refptr<GpuChannelHost> channel_;
 | 
|    const gpu::CommandBufferId command_buffer_id_;
 | 
|    const int32_t route_id_;
 | 
| 
 |