| Index: gpu/command_buffer/client/cmd_buffer_helper.cc
 | 
| ===================================================================
 | 
| --- gpu/command_buffer/client/cmd_buffer_helper.cc	(revision 93137)
 | 
| +++ gpu/command_buffer/client/cmd_buffer_helper.cc	(working copy)
 | 
| @@ -21,6 +21,8 @@
 | 
|        total_entry_count_(0),
 | 
|        usable_entry_count_(0),
 | 
|        token_(0),
 | 
| +      last_token_read_(-1),
 | 
| +      get_(0),
 | 
|        put_(0),
 | 
|        last_put_sent_(0),
 | 
|        commands_issued_(0),
 | 
| @@ -45,6 +47,7 @@
 | 
|    total_entry_count_ = num_ring_buffer_entries;
 | 
|    usable_entry_count_ = total_entry_count_ - kJumpEntries;
 | 
|    put_ = state.put_offset;
 | 
| +  SynchronizeState(state);
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| @@ -54,7 +57,8 @@
 | 
|  bool CommandBufferHelper::FlushSync() {
 | 
|    time(&last_flush_time_);
 | 
|    last_put_sent_ = put_;
 | 
| -  CommandBuffer::State state = command_buffer_->FlushSync(put_, get_offset());
 | 
| +  CommandBuffer::State state = command_buffer_->FlushSync(put_, get_);
 | 
| +  SynchronizeState(state);
 | 
|    return state.error == error::kNoError;
 | 
|  }
 | 
|  
 | 
| @@ -73,7 +77,7 @@
 | 
|      // has shutdown.
 | 
|      if (!FlushSync())
 | 
|        return false;
 | 
| -  } while (put_ != get_offset());
 | 
| +  } while (put_ != get_);
 | 
|  
 | 
|    return true;
 | 
|  }
 | 
| @@ -92,7 +96,7 @@
 | 
|      TRACE_EVENT0("gpu", "CommandBufferHelper::InsertToken(wrapped)");
 | 
|      // we wrapped
 | 
|      Finish();
 | 
| -    GPU_DCHECK_EQ(token_, last_token_read());
 | 
| +    GPU_DCHECK_EQ(token_, last_token_read_);
 | 
|    }
 | 
|    return token_;
 | 
|  }
 | 
| @@ -105,8 +109,8 @@
 | 
|    if (token < 0)
 | 
|      return;
 | 
|    if (token > token_) return;  // we wrapped
 | 
| -  while (last_token_read() < token) {
 | 
| -    if (get_offset() == put_) {
 | 
| +  while (last_token_read_ < token) {
 | 
| +    if (get_ == put_) {
 | 
|        GPU_LOG(FATAL) << "Empty command buffer while waiting on a token.";
 | 
|        return;
 | 
|      }
 | 
| @@ -117,6 +121,11 @@
 | 
|    }
 | 
|  }
 | 
|  
 | 
| +void CommandBufferHelper::YieldScheduler() {
 | 
| +  cmd::YieldScheduler& cmd = GetCmdSpace<cmd::YieldScheduler>();
 | 
| +  cmd.Init();
 | 
| +}
 | 
| +
 | 
|  // Waits for available entries, basically waiting until get >= put + count + 1.
 | 
|  // It actually waits for contiguous entries, so it may need to wrap the buffer
 | 
|  // around, adding a jump. Thus this function may change the value of put_. The
 | 
| @@ -130,9 +139,9 @@
 | 
|      // need to make sure get wraps first, actually that get is 1 or more (since
 | 
|      // put will wrap to 0 after we add the jump).
 | 
|      GPU_DCHECK_LE(1, put_);
 | 
| -    if (get_offset() > put_ || get_offset() == 0) {
 | 
| +    if (get_ > put_ || get_ == 0) {
 | 
|        TRACE_EVENT0("gpu", "CommandBufferHelper::WaitForAvailableEntries");
 | 
| -      while (get_offset() > put_ || get_offset() == 0) {
 | 
| +      while (get_ > put_ || get_ == 0) {
 | 
|          // Do not loop forever if the flush fails, meaning the command buffer
 | 
|          // reader has shutdown.
 | 
|          if (!FlushSync())
 | 
| @@ -176,7 +185,13 @@
 | 
|  
 | 
|  error::Error CommandBufferHelper::GetError() {
 | 
|    CommandBuffer::State state = command_buffer_->GetState();
 | 
| +  SynchronizeState(state);
 | 
|    return static_cast<error::Error>(state.error);
 | 
|  }
 | 
|  
 | 
| +void CommandBufferHelper::SynchronizeState(const CommandBuffer::State& state) {
 | 
| +  get_ = state.get_offset;
 | 
| +  last_token_read_ = state.token;
 | 
| +}
 | 
| +
 | 
|  }  // namespace gpu
 | 
| 
 |