diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-24 22:11:06 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-24 22:11:06 +0000 |
commit | 1873a4286d96b021361d5ddee28b4e17c0bd72aa (patch) | |
tree | 128bb487704d5548325c796bc808540a8f677c32 /gpu | |
parent | d93841c252a7363e184bce58db9b44de43d31303 (diff) | |
download | chromium_src-1873a4286d96b021361d5ddee28b4e17c0bd72aa.zip chromium_src-1873a4286d96b021361d5ddee28b4e17c0bd72aa.tar.gz chromium_src-1873a4286d96b021361d5ddee28b4e17c0bd72aa.tar.bz2 |
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
Diffstat (limited to 'gpu')
-rw-r--r-- | gpu/command_buffer/client/transfer_buffer.cc | 7 | ||||
-rw-r--r-- | gpu/command_buffer/client/transfer_buffer.h | 5 | ||||
-rw-r--r-- | gpu/command_buffer/client/transfer_buffer_unittest.cc | 24 |
3 files changed, 33 insertions, 3 deletions
diff --git a/gpu/command_buffer/client/transfer_buffer.cc b/gpu/command_buffer/client/transfer_buffer.cc index df2811f..7e0b25f 100644 --- a/gpu/command_buffer/client/transfer_buffer.cc +++ b/gpu/command_buffer/client/transfer_buffer.cc @@ -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)) { diff --git a/gpu/command_buffer/client/transfer_buffer.h b/gpu/command_buffer/client/transfer_buffer.h index 0921b74..a8b7d73 100644 --- a/gpu/command_buffer/client/transfer_buffer.h +++ b/gpu/command_buffer/client/transfer_buffer.h @@ -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_; diff --git a/gpu/command_buffer/client/transfer_buffer_unittest.cc b/gpu/command_buffer/client/transfer_buffer_unittest.cc index 80a1c02..4f14e74 100644 --- a/gpu/command_buffer/client/transfer_buffer_unittest.cc +++ b/gpu/command_buffer/client/transfer_buffer_unittest.cc @@ -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 |