| Index: gpu/command_buffer/client/ring_buffer.cc
|
| diff --git a/gpu/command_buffer/client/ring_buffer.cc b/gpu/command_buffer/client/ring_buffer.cc
|
| index 813bb348863d8810c93690896a9441c67e194c79..bf848a22199bc27903aecc786486de91150114ff 100644
|
| --- a/gpu/command_buffer/client/ring_buffer.cc
|
| +++ b/gpu/command_buffer/client/ring_buffer.cc
|
| @@ -103,6 +103,27 @@ void RingBuffer::FreePendingToken(void* pointer,
|
| NOTREACHED() << "attempt to free non-existant block";
|
| }
|
|
|
| +void RingBuffer::DiscardBlock(void* pointer) {
|
| + Offset offset = GetOffset(pointer);
|
| + offset -= base_offset_;
|
| + DCHECK(!blocks_.empty()) << "no allocations to free";
|
| + for (Container::reverse_iterator it = blocks_.rbegin();
|
| + it != blocks_.rend();
|
| + ++it) {
|
| + Block& block = *it;
|
| + if (block.offset == offset) {
|
| + DCHECK(block.state == IN_USE)
|
| + << "block that corresponds to offset already freed";
|
| +
|
| + // Mark this as padding and let the FreeOldestBlock() logic handle
|
| + // updating all the various offsets.
|
| + block.state = PADDING;
|
| + return;
|
| + }
|
| + }
|
| + NOTREACHED() << "attempt to free non-existant block";
|
| +}
|
| +
|
| unsigned int RingBuffer::GetLargestFreeSizeNoWaiting() {
|
| unsigned int last_token_read = helper_->last_token_read();
|
| while (!blocks_.empty()) {
|
|
|