Commit 1873a428 authored by gman@chromium.org's avatar gman@chromium.org

Make transfer buffer reallocate at default size.

TEST=unit tests
BUG=none

R=vangelis@chromium.org


Review URL: http://codereview.chromium.org/10197002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133781 0039d316-1c4b-4281-b951-d872f2087c98
parent d93841c2
...@@ -16,6 +16,7 @@ TransferBuffer::TransferBuffer( ...@@ -16,6 +16,7 @@ TransferBuffer::TransferBuffer(
CommandBufferHelper* helper) CommandBufferHelper* helper)
: helper_(helper), : helper_(helper),
result_size_(0), result_size_(0),
default_buffer_size_(0),
min_buffer_size_(0), min_buffer_size_(0),
max_buffer_size_(0), max_buffer_size_(0),
alignment_(0), alignment_(0),
...@@ -32,18 +33,19 @@ TransferBuffer::~TransferBuffer() { ...@@ -32,18 +33,19 @@ TransferBuffer::~TransferBuffer() {
} }
bool TransferBuffer::Initialize( bool TransferBuffer::Initialize(
unsigned int starting_buffer_size, unsigned int default_buffer_size,
unsigned int result_size, unsigned int result_size,
unsigned int min_buffer_size, unsigned int min_buffer_size,
unsigned int max_buffer_size, unsigned int max_buffer_size,
unsigned int alignment, unsigned int alignment,
unsigned int size_to_flush) { unsigned int size_to_flush) {
result_size_ = result_size; result_size_ = result_size;
default_buffer_size_ = default_buffer_size;
min_buffer_size_ = min_buffer_size; min_buffer_size_ = min_buffer_size;
max_buffer_size_ = max_buffer_size; max_buffer_size_ = max_buffer_size;
alignment_ = alignment; alignment_ = alignment;
size_to_flush_ = size_to_flush; size_to_flush_ = size_to_flush;
ReallocateRingBuffer(starting_buffer_size - result_size); ReallocateRingBuffer(default_buffer_size_ - result_size);
return HaveBuffer(); return HaveBuffer();
} }
...@@ -136,6 +138,7 @@ void TransferBuffer::ReallocateRingBuffer(unsigned int size) { ...@@ -136,6 +138,7 @@ void TransferBuffer::ReallocateRingBuffer(unsigned int size) {
// What size buffer would we ask for if we needed a new one? // What size buffer would we ask for if we needed a new one?
unsigned int needed_buffer_size = ComputePOTSize(size + result_size_); unsigned int needed_buffer_size = ComputePOTSize(size + result_size_);
needed_buffer_size = std::max(needed_buffer_size, min_buffer_size_); needed_buffer_size = std::max(needed_buffer_size, min_buffer_size_);
needed_buffer_size = std::max(needed_buffer_size, default_buffer_size_);
needed_buffer_size = std::min(needed_buffer_size, max_buffer_size_); needed_buffer_size = std::min(needed_buffer_size, max_buffer_size_);
if (usable_ && (!HaveBuffer() || needed_buffer_size > buffer_.size)) { if (usable_ && (!HaveBuffer() || needed_buffer_size > buffer_.size)) {
......
...@@ -92,7 +92,7 @@ class GPU_EXPORT TransferBuffer : public TransferBufferInterface { ...@@ -92,7 +92,7 @@ class GPU_EXPORT TransferBuffer : public TransferBufferInterface {
// Overridden from TransferBufferInterface. // Overridden from TransferBufferInterface.
virtual bool Initialize( virtual bool Initialize(
unsigned int buffer_size, unsigned int default_buffer_size,
unsigned int result_size, unsigned int result_size,
unsigned int min_buffer_size, unsigned int min_buffer_size,
unsigned int max_buffer_size, unsigned int max_buffer_size,
...@@ -125,6 +125,9 @@ class GPU_EXPORT TransferBuffer : public TransferBufferInterface { ...@@ -125,6 +125,9 @@ class GPU_EXPORT TransferBuffer : public TransferBufferInterface {
// size reserved for results // size reserved for results
unsigned int result_size_; unsigned int result_size_;
// default size. Size we want when starting or re-allocating
unsigned int default_buffer_size_;
// min size we'll consider successful // min size we'll consider successful
unsigned int min_buffer_size_; unsigned int min_buffer_size_;
......
...@@ -428,6 +428,30 @@ TEST_F(TransferBufferExpandContractTest, OutOfMemory) { ...@@ -428,6 +428,30 @@ TEST_F(TransferBufferExpandContractTest, OutOfMemory) {
EXPECT_FALSE(transfer_buffer_->HaveBuffer()); EXPECT_FALSE(transfer_buffer_->HaveBuffer());
} }
TEST_F(TransferBufferExpandContractTest, ReallocsToDefault) {
// Free buffer.
EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_))
.Times(1)
.RetiresOnSaturation();
transfer_buffer_->Free();
// See it's freed.
EXPECT_FALSE(transfer_buffer_->HaveBuffer());
// See that it gets reallocated.
EXPECT_CALL(*command_buffer(),
CreateTransferBuffer(kStartTransferBufferSize, _))
.WillOnce(Invoke(
command_buffer(),
&MockClientCommandBufferCanFail::RealCreateTransferBuffer))
.RetiresOnSaturation();
EXPECT_EQ(transfer_buffer_id_, transfer_buffer_->GetShmId());
EXPECT_TRUE(transfer_buffer_->HaveBuffer());
// Check it's the default size.
EXPECT_EQ(
kStartTransferBufferSize - kStartingOffset,
transfer_buffer_->GetCurrentMaxAllocationWithoutRealloc());
}
} // namespace gpu } // namespace gpu
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment