summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/client/ring_buffer.cc
diff options
context:
space:
mode:
authorqsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-11 20:30:04 +0000
committerqsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-11 20:30:04 +0000
commitb21fee067ae10161a19bbf8dccd10e971e715193 (patch)
tree3362edbd4e2a1bbb841daab45a9b955b03373450 /gpu/command_buffer/client/ring_buffer.cc
parent21ee244d235314cffe9faf804f317fb18d056579 (diff)
downloadchromium_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.cc8
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.