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(
CommandBufferHelper* helper)
: helper_(helper),
result_size_(0),
default_buffer_size_(0),
min_buffer_size_(0),
max_buffer_size_(0),
alignment_(0),
......@@ -32,18 +33,19 @@ TransferBuffer::~TransferBuffer() {
}
bool TransferBuffer::Initialize(
unsigned int starting_buffer_size,
unsigned int default_buffer_size,
unsigned int result_size,
unsigned int min_buffer_size,
unsigned int max_buffer_size,
unsigned int alignment,
unsigned int size_to_flush) {
result_size_ = result_size;
default_buffer_size_ = default_buffer_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);
ReallocateRingBuffer(default_buffer_size_ - result_size);
return HaveBuffer();
}
......@@ -136,6 +138,7 @@ void TransferBuffer::ReallocateRingBuffer(unsigned int size) {
// What size buffer would we ask for if we needed a new one?
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, default_buffer_size_);
needed_buffer_size = std::min(needed_buffer_size, max_buffer_size_);
if (usable_ && (!HaveBuffer() || needed_buffer_size > buffer_.size)) {
......
......@@ -92,7 +92,7 @@ class GPU_EXPORT TransferBuffer : public TransferBufferInterface {
// Overridden from TransferBufferInterface.
virtual bool Initialize(
unsigned int buffer_size,
unsigned int default_buffer_size,
unsigned int result_size,
unsigned int min_buffer_size,
unsigned int max_buffer_size,
......@@ -125,6 +125,9 @@ class GPU_EXPORT TransferBuffer : public TransferBufferInterface {
// size reserved for results
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
unsigned int min_buffer_size_;
......
......@@ -428,6 +428,30 @@ TEST_F(TransferBufferExpandContractTest, OutOfMemory) {
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
......
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