diff options
author | piman@google.com <piman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-28 23:37:14 +0000 |
---|---|---|
committer | piman@google.com <piman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-28 23:37:14 +0000 |
commit | ef16c174a500a841cf6a120dc4ef9fca89fac9f9 (patch) | |
tree | 8491a815c314e161a462f42c41c374403ce6ec8c /gpu/command_buffer/service/command_buffer_service.cc | |
parent | d0a7409f5ad0c075d5208ea0eb93ff07868c6168 (diff) | |
download | chromium_src-ef16c174a500a841cf6a120dc4ef9fca89fac9f9.zip chromium_src-ef16c174a500a841cf6a120dc4ef9fca89fac9f9.tar.gz chromium_src-ef16c174a500a841cf6a120dc4ef9fca89fac9f9.tar.bz2 |
Rework FlushSync to return early if commands have been processed since the last update
BUG=80480
TEST=
Review URL: http://codereview.chromium.org/6883179
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83442 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/command_buffer_service.cc')
-rw-r--r-- | gpu/command_buffer/service/command_buffer_service.cc | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/gpu/command_buffer/service/command_buffer_service.cc b/gpu/command_buffer/service/command_buffer_service.cc index 86453eb..bc36fa3 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); } |