summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authoralexeypa@google.com <alexeypa@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-22 22:49:00 +0000
committeralexeypa@google.com <alexeypa@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-22 22:49:00 +0000
commit31cfebe0eaaba1036314eab5e2a17d52f743bdd1 (patch)
tree783681cc9d5e9aa1d196eb62d110b9438d0d8d66 /gpu
parent2bbb2a620da425e98ea20cd96f06ee92006da7c8 (diff)
downloadchromium_src-31cfebe0eaaba1036314eab5e2a17d52f743bdd1.zip
chromium_src-31cfebe0eaaba1036314eab5e2a17d52f743bdd1.tar.gz
chromium_src-31cfebe0eaaba1036314eab5e2a17d52f743bdd1.tar.bz2
Revert 212978 "Fix a memory leak."
Specilative revert. We suspect it might be causing http://build.chromium.org/p/chromium.linux/builders/Linux%20Tests%20%28dbg%29%282%29/builds/37159 > Fix a memory leak. > > ProgramManager::UnuseProgram was never called in existing code > because state_.current_program was cleared first. So the current > program object leaks. > > The fix is to clear state_.current_program at the end of function. > > BUG=258772 > > Review URL: https://chromiumcodereview.appspot.com/19577012 TBR=feng@chromium.org Review URL: https://codereview.chromium.org/19947005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@212989 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc7
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc4
2 files changed, 2 insertions, 9 deletions
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index f38ff8e..3c49a73 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -3134,6 +3134,7 @@ void GLES2DecoderImpl::Destroy(bool have_context) {
state_.texture_units.clear();
state_.bound_array_buffer = NULL;
state_.current_query = NULL;
+ state_.current_program = NULL;
state_.bound_read_framebuffer = NULL;
state_.bound_draw_framebuffer = NULL;
state_.bound_renderbuffer = NULL;
@@ -3154,6 +3155,7 @@ void GLES2DecoderImpl::Destroy(bool have_context) {
if (state_.current_program.get()) {
program_manager()->UnuseProgram(shader_manager(),
state_.current_program.get());
+ state_.current_program = NULL;
}
if (attrib_0_buffer_id_) {
@@ -3237,11 +3239,6 @@ void GLES2DecoderImpl::Destroy(bool have_context) {
context_ = NULL;
}
- // Current program must be cleared after calling
- // ProgramManager::UnuseProgram. Otherwise, we can
- // leak objects. http://crbug.com/258772
- state_.current_program = NULL;
-
#if defined(OS_MACOSX)
for (TextureToIOSurfaceMap::iterator it = texture_to_io_surface_map_.begin();
it != texture_to_io_surface_map_.end(); ++it) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
index ed8725d..09ed184 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
@@ -292,8 +292,6 @@ TEST_F(GLES2DecoderWithShaderTest, DrawArraysDeletedProgramSucceeds) {
EXPECT_CALL(*gl_, DrawArrays(_, _, _))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId))
- .Times(1);
DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -687,8 +685,6 @@ TEST_F(GLES2DecoderWithShaderTest, DrawElementsDeletedProgramSucceeds) {
EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
.Times(1);
- EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId))
- .Times(1);
DrawElements cmd;
cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
kValidIndexRangeStart * 2);