| Index: gpu/command_buffer/client/transfer_buffer.cc
|
| diff --git a/gpu/command_buffer/client/transfer_buffer.cc b/gpu/command_buffer/client/transfer_buffer.cc
|
| index 28bb0e6461b5187fdef2a0806c1cc6e63e2ce89c..df2811f80f7cb5da1332bda8b6901715194d9023 100644
|
| --- a/gpu/command_buffer/client/transfer_buffer.cc
|
| +++ b/gpu/command_buffer/client/transfer_buffer.cc
|
| @@ -18,7 +18,9 @@ TransferBuffer::TransferBuffer(
|
| result_size_(0),
|
| min_buffer_size_(0),
|
| max_buffer_size_(0),
|
| - alignment_(),
|
| + alignment_(0),
|
| + size_to_flush_(0),
|
| + bytes_since_last_flush_(0),
|
| buffer_id_(-1),
|
| result_buffer_(NULL),
|
| result_shm_offset_(0),
|
| @@ -34,11 +36,13 @@ bool TransferBuffer::Initialize(
|
| unsigned int result_size,
|
| unsigned int min_buffer_size,
|
| unsigned int max_buffer_size,
|
| - unsigned int alignment) {
|
| + unsigned int alignment,
|
| + unsigned int size_to_flush) {
|
| result_size_ = result_size;
|
| min_buffer_size_ = min_buffer_size;
|
| max_buffer_size_ = max_buffer_size;
|
| alignment_ = alignment;
|
| + size_to_flush_ = size_to_flush;
|
| ReallocateRingBuffer(starting_buffer_size - result_size);
|
| return HaveBuffer();
|
| }
|
| @@ -53,6 +57,7 @@ void TransferBuffer::Free() {
|
| result_buffer_ = NULL;
|
| result_shm_offset_ = 0;
|
| ring_buffer_.reset();
|
| + bytes_since_last_flush_ = 0;
|
| }
|
| }
|
|
|
| @@ -66,6 +71,10 @@ RingBuffer::Offset TransferBuffer::GetOffset(void* pointer) const {
|
|
|
| void TransferBuffer::FreePendingToken(void* p, unsigned int token) {
|
| ring_buffer_->FreePendingToken(p, token);
|
| + if (bytes_since_last_flush_ >= size_to_flush_ && size_to_flush_ > 0) {
|
| + helper_->Flush();
|
| + bytes_since_last_flush_ = 0;
|
| + }
|
| }
|
|
|
| void TransferBuffer::AllocateRingBuffer(unsigned int size) {
|
| @@ -149,6 +158,7 @@ void* TransferBuffer::AllocUpTo(
|
|
|
| unsigned int max_size = ring_buffer_->GetLargestFreeOrPendingSize();
|
| *size_allocated = std::min(max_size, size);
|
| + bytes_since_last_flush_ += *size_allocated;
|
| return ring_buffer_->Alloc(*size_allocated);
|
| }
|
|
|
| @@ -164,6 +174,7 @@ void* TransferBuffer::Alloc(unsigned int size) {
|
| return NULL;
|
| }
|
|
|
| + bytes_since_last_flush_ += size;
|
| return ring_buffer_->Alloc(size);
|
| }
|
|
|
|
|