| Index: gpu/command_buffer/client/cmd_buffer_helper.cc
|
| diff --git a/gpu/command_buffer/client/cmd_buffer_helper.cc b/gpu/command_buffer/client/cmd_buffer_helper.cc
|
| index 0304b8f7e5d1ae6d4322bdd889729477746a822c..9a424ffa7576740a4d316edeb9c655f38180b865 100644
|
| --- a/gpu/command_buffer/client/cmd_buffer_helper.cc
|
| +++ b/gpu/command_buffer/client/cmd_buffer_helper.cc
|
| @@ -32,6 +32,7 @@ CommandBufferHelper::CommandBufferHelper(CommandBuffer* command_buffer)
|
| immediate_entry_count_(0),
|
| token_(0),
|
| put_(0),
|
| + last_get_(0),
|
| last_put_sent_(0),
|
| #if defined(CMD_HELPER_PERIODIC_FLUSH_CHECK)
|
| commands_issued_(0),
|
| @@ -71,7 +72,7 @@ void CommandBufferHelper::CalcImmediateEntries(int waiting_count) {
|
| }
|
|
|
| // Get maximum safe contiguous entries.
|
| - const int32_t curr_get = get_offset();
|
| + const int32_t curr_get = last_get_;
|
| if (curr_get > put_) {
|
| immediate_entry_count_ = curr_get - put_ - 1;
|
| } else {
|
| @@ -128,6 +129,7 @@ bool CommandBufferHelper::AllocateRingBuffer() {
|
| // Call to SetGetBuffer(id) above resets get and put offsets to 0.
|
| // No need to query it through IPC.
|
| put_ = 0;
|
| + last_get_ = 0;
|
| CalcImmediateEntries(0);
|
| return true;
|
| }
|
| @@ -143,8 +145,8 @@ void CommandBufferHelper::FreeResources() {
|
| }
|
|
|
| void CommandBufferHelper::FreeRingBuffer() {
|
| - CHECK((put_ == get_offset()) ||
|
| - error::IsError(command_buffer_->GetLastState().error));
|
| + CHECK((put_ == last_get_) ||
|
| + error::IsError(command_buffer_->GetLastState().error));
|
| FreeResources();
|
| }
|
|
|
| @@ -165,8 +167,10 @@ bool CommandBufferHelper::WaitForGetOffsetInRange(int32_t start, int32_t end) {
|
| if (!usable()) {
|
| return false;
|
| }
|
| - command_buffer_->WaitForGetOffsetInRange(start, end);
|
| - return command_buffer_->GetLastError() == gpu::error::kNoError;
|
| + CommandBuffer::State last_state =
|
| + command_buffer_->WaitForGetOffsetInRange(start, end);
|
| + last_get_ = last_state.get_offset;
|
| + return last_state.error == gpu::error::kNoError;
|
| }
|
|
|
| void CommandBufferHelper::Flush() {
|
| @@ -213,7 +217,7 @@ bool CommandBufferHelper::Finish() {
|
| return false;
|
| }
|
| // If there is no work just exit.
|
| - if (put_ == get_offset()) {
|
| + if (put_ == last_get_) {
|
| return true;
|
| }
|
| DCHECK(HaveRingBuffer() ||
|
| @@ -221,7 +225,7 @@ bool CommandBufferHelper::Finish() {
|
| Flush();
|
| if (!WaitForGetOffsetInRange(put_, put_))
|
| return false;
|
| - DCHECK_EQ(get_offset(), put_);
|
| + DCHECK_EQ(last_get_, put_);
|
|
|
| CalcImmediateEntries(0);
|
|
|
| @@ -263,7 +267,8 @@ void CommandBufferHelper::WaitForToken(int32_t token) {
|
| // Return immediately if corresponding InsertToken failed.
|
| if (token < 0)
|
| return;
|
| - if (token > token_) return; // we wrapped
|
| + if (token > token_)
|
| + return; // we wrapped
|
| if (last_token_read() >= token)
|
| return;
|
| Flush();
|
| @@ -288,13 +293,13 @@ void CommandBufferHelper::WaitForAvailableEntries(int32_t count) {
|
| // but we need to make sure get wraps first, actually that get is 1 or
|
| // more (since put will wrap to 0 after we add the noops).
|
| DCHECK_LE(1, put_);
|
| - int32_t curr_get = get_offset();
|
| + int32_t curr_get = last_get_;
|
| if (curr_get > put_ || curr_get == 0) {
|
| TRACE_EVENT0("gpu", "CommandBufferHelper::WaitForAvailableEntries");
|
| Flush();
|
| if (!WaitForGetOffsetInRange(1, put_))
|
| return;
|
| - curr_get = get_offset();
|
| + curr_get = last_get_;
|
| DCHECK_LE(curr_get, put_);
|
| DCHECK_NE(0, curr_get);
|
| }
|
| @@ -328,7 +333,7 @@ void CommandBufferHelper::WaitForAvailableEntries(int32_t count) {
|
| }
|
|
|
| int32_t CommandBufferHelper::GetTotalFreeEntriesNoWaiting() const {
|
| - int32_t current_get_offset = get_offset();
|
| + int32_t current_get_offset = last_get_;
|
| if (current_get_offset > put_) {
|
| return current_get_offset - put_ - 1;
|
| } else {
|
|
|