Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Unified Diff: gpu/command_buffer/client/transfer_buffer.cc

Issue 9387014: Add AsyncFlush when transferbuffer is > a certain size (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/client/transfer_buffer.h ('k') | gpu/command_buffer/client/transfer_buffer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « gpu/command_buffer/client/transfer_buffer.h ('k') | gpu/command_buffer/client/transfer_buffer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698