summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 22:11:06 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 22:11:06 +0000
commit1873a4286d96b021361d5ddee28b4e17c0bd72aa (patch)
tree128bb487704d5548325c796bc808540a8f677c32 /gpu
parentd93841c252a7363e184bce58db9b44de43d31303 (diff)
downloadchromium_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.cc7
-rw-r--r--gpu/command_buffer/client/transfer_buffer.h5
-rw-r--r--gpu/command_buffer/client/transfer_buffer_unittest.cc24
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