summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-23 01:08:42 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-23 01:08:42 +0000
commita5cf3cb036b3681875992522040de98fee87ad77 (patch)
tree39d00b23f0ff6cb887536754e36a76be166405f0
parentc95bef3e6d79bffdb616f9965169c545dfb29097 (diff)
downloadchromium_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
-rw-r--r--gpu/command_buffer/client/cmd_buffer_helper.cc9
-rw-r--r--gpu/command_buffer/client/cmd_buffer_helper.h1
-rw-r--r--gpu/command_buffer/client/gles2_implementation_unittest.cc4
-rw-r--r--gpu/command_buffer/client/transfer_buffer_unittest.cc8
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();
}