| Index: gpu/command_buffer/service/command_buffer_service.cc
|
| diff --git a/gpu/command_buffer/service/command_buffer_service.cc b/gpu/command_buffer/service/command_buffer_service.cc
|
| index 86453ebf3371790c79056100b3aab265011d24ae..bc36fa3e17e6afb178c7aa3e015cb2ff746882b2 100644
|
| --- a/gpu/command_buffer/service/command_buffer_service.cc
|
| +++ b/gpu/command_buffer/service/command_buffer_service.cc
|
| @@ -19,6 +19,7 @@ CommandBufferService::CommandBufferService()
|
| get_offset_(0),
|
| put_offset_(0),
|
| token_(0),
|
| + generation_(0),
|
| error_(error::kNoError) {
|
| // Element zero is always NULL.
|
| registered_objects_.push_back(Buffer());
|
| @@ -97,11 +98,13 @@ CommandBufferService::State CommandBufferService::GetState() {
|
| state.put_offset = put_offset_;
|
| state.token = token_;
|
| state.error = error_;
|
| + state.generation = ++generation_;
|
|
|
| return state;
|
| }
|
|
|
| -CommandBufferService::State CommandBufferService::FlushSync(int32 put_offset) {
|
| +CommandBufferService::State CommandBufferService::FlushSync(
|
| + int32 put_offset, int32 last_known_get) {
|
| if (put_offset < 0 || put_offset > num_entries_) {
|
| error_ = gpu::error::kOutOfBounds;
|
| return GetState();
|
| @@ -110,14 +113,23 @@ CommandBufferService::State CommandBufferService::FlushSync(int32 put_offset) {
|
| put_offset_ = put_offset;
|
|
|
| if (put_offset_change_callback_.get()) {
|
| - put_offset_change_callback_->Run();
|
| + put_offset_change_callback_->Run(last_known_get == get_offset_);
|
| }
|
|
|
| return GetState();
|
| }
|
|
|
| void CommandBufferService::Flush(int32 put_offset) {
|
| - FlushSync(put_offset);
|
| + if (put_offset < 0 || put_offset > num_entries_) {
|
| + error_ = gpu::error::kOutOfBounds;
|
| + return;
|
| + }
|
| +
|
| + put_offset_ = put_offset;
|
| +
|
| + if (put_offset_change_callback_.get()) {
|
| + put_offset_change_callback_->Run(false);
|
| + }
|
| }
|
|
|
| void CommandBufferService::SetGetOffset(int32 get_offset) {
|
| @@ -241,7 +253,7 @@ void CommandBufferService::SetParseError(error::Error error) {
|
| }
|
|
|
| void CommandBufferService::SetPutOffsetChangeCallback(
|
| - Callback0::Type* callback) {
|
| + Callback1<bool>::Type* callback) {
|
| put_offset_change_callback_.reset(callback);
|
| }
|
|
|
|
|