diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-23 01:08:42 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-23 01:08:42 +0000 |
commit | a5cf3cb036b3681875992522040de98fee87ad77 (patch) | |
tree | 39d00b23f0ff6cb887536754e36a76be166405f0 | |
parent | c95bef3e6d79bffdb616f9965169c545dfb29097 (diff) | |
download | chromium_src-a5cf3cb036b3681875992522040de98fee87ad77.zip chromium_src-a5cf3cb036b3681875992522040de98fee87ad77.tar.gz chromium_src-a5cf3cb036b3681875992522040de98fee87ad77.tar.bz2 |
Free the command buffer on destruction.
It used to be this happened automagically when the corresponding
GPU service code deleted all shared memory for a context but
now shared memory is shared by all contexts in a sharegroup
so this needs to be freed explicitly.
BUG=143799
Review URL: https://chromiumcodereview.appspot.com/10876025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152905 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 20 insertions, 2 deletions
diff --git a/gpu/command_buffer/client/cmd_buffer_helper.cc b/gpu/command_buffer/client/cmd_buffer_helper.cc index aa85560..3eba54f 100644 --- a/gpu/command_buffer/client/cmd_buffer_helper.cc +++ b/gpu/command_buffer/client/cmd_buffer_helper.cc @@ -69,20 +69,25 @@ bool CommandBufferHelper::AllocateRingBuffer() { return true; } -void CommandBufferHelper::FreeRingBuffer() { - GPU_CHECK_EQ(put_, get_offset()); +void CommandBufferHelper::FreeResources() { if (HaveRingBuffer()) { command_buffer_->DestroyTransferBuffer(ring_buffer_id_); ring_buffer_id_ = -1; } } +void CommandBufferHelper::FreeRingBuffer() { + GPU_CHECK_EQ(put_, get_offset()); + FreeResources(); +} + bool CommandBufferHelper::Initialize(int32 ring_buffer_size) { ring_buffer_size_ = ring_buffer_size; return AllocateRingBuffer(); } CommandBufferHelper::~CommandBufferHelper() { + FreeResources(); } bool CommandBufferHelper::FlushSync() { diff --git a/gpu/command_buffer/client/cmd_buffer_helper.h b/gpu/command_buffer/client/cmd_buffer_helper.h index f99e7bf..1ba1bf7 100644 --- a/gpu/command_buffer/client/cmd_buffer_helper.h +++ b/gpu/command_buffer/client/cmd_buffer_helper.h @@ -274,6 +274,7 @@ class GPU_EXPORT CommandBufferHelper { } bool AllocateRingBuffer(); + void FreeResources(); CommandBuffer* command_buffer_; int32 ring_buffer_id_; diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc index c337acd..e008ec7 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest.cc +++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc @@ -481,6 +481,10 @@ void GLES2ImplementationTest::SetUp() { void GLES2ImplementationTest::TearDown() { Mock::VerifyAndClear(gl_.get()); EXPECT_CALL(*command_buffer(), OnFlush()).Times(AnyNumber()); + // For command buffer. + EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) + .Times(1) + .RetiresOnSaturation(); gl_.reset(); } diff --git a/gpu/command_buffer/client/transfer_buffer_unittest.cc b/gpu/command_buffer/client/transfer_buffer_unittest.cc index 4f14e74..469483b 100644 --- a/gpu/command_buffer/client/transfer_buffer_unittest.cc +++ b/gpu/command_buffer/client/transfer_buffer_unittest.cc @@ -75,6 +75,10 @@ void TransferBufferTest::TearDown() { .Times(1) .RetiresOnSaturation(); } + // For command buffer. + EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) + .Times(1) + .RetiresOnSaturation(); transfer_buffer_.reset(); } @@ -281,6 +285,10 @@ void TransferBufferExpandContractTest::TearDown() { .Times(1) .RetiresOnSaturation(); } + // For command buffer. + EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_)) + .Times(1) + .RetiresOnSaturation(); transfer_buffer_.reset(); } |