diff options
author | qsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-11 20:30:04 +0000 |
---|---|---|
committer | qsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-11 20:30:04 +0000 |
commit | b21fee067ae10161a19bbf8dccd10e971e715193 (patch) | |
tree | 3362edbd4e2a1bbb841daab45a9b955b03373450 /gpu/command_buffer/client/ring_buffer.cc | |
parent | 21ee244d235314cffe9faf804f317fb18d056579 (diff) | |
download | chromium_src-b21fee067ae10161a19bbf8dccd10e971e715193.zip chromium_src-b21fee067ae10161a19bbf8dccd10e971e715193.tar.gz chromium_src-b21fee067ae10161a19bbf8dccd10e971e715193.tar.bz2 |
In RingBuffer::GetLargestFreeSizeNoWaiting, release until current token.
RingBuffer::GetLargestFreeSizeNoWaiting can release any block for which tokens
have already been seen.
This is a respin of https://codereview.chromium.org/16226019, fixing the compilation issue on linux x64.
R=gman@chromium.org
Review URL: https://chromiumcodereview.appspot.com/16024020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205624 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/client/ring_buffer.cc')
-rw-r--r-- | gpu/command_buffer/client/ring_buffer.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gpu/command_buffer/client/ring_buffer.cc b/gpu/command_buffer/client/ring_buffer.cc index 46a86a2..42e09bd 100644 --- a/gpu/command_buffer/client/ring_buffer.cc +++ b/gpu/command_buffer/client/ring_buffer.cc @@ -94,8 +94,12 @@ void RingBuffer::FreePendingToken(RingBuffer::Offset offset, } unsigned int RingBuffer::GetLargestFreeSizeNoWaiting() { - // TODO(gman): Should check what the current token is and free up to that - // point. + unsigned int last_token_read = helper_->last_token_read(); + while (!blocks_.empty()) { + Block& block = blocks_.front(); + if (block.token > last_token_read || block.state == IN_USE) break; + FreeOldestBlock(); + } if (free_offset_ == in_use_offset_) { if (blocks_.empty()) { // The entire buffer is free. |