Chromium Code Reviews| 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"; |
|
piman
2015/06/09 22:55:05
nit: I would keep this.
David Yen
2015/06/10 18:17:09
I've changed it to check if state != PADDING. I th
|
| + |
| + // Mark this as padding and let the FreeOldestBlock() logic handle |
| + // updating all the various offsets. |
|
piman
2015/06/09 17:38:27
I think this is close to not doing anything... If
David Yen
2015/06/09 20:11:20
That is a fair point. I have added the logic to ac
|
| + 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()) { |