Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Unified Diff: compositor/gles/opengles_visitor.cc

Issue 6691037: wm: Fix an uncommon memory leak in the compositor code. (Closed) Base URL: ssh://gitrw.chromium.org:9222/window_manager.git@master
Patch Set: update another arg to be a const ref Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « compositor/gles/opengles_visitor.h ('k') | compositor/mock_compositor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: compositor/gles/opengles_visitor.cc
diff --git a/compositor/gles/opengles_visitor.cc b/compositor/gles/opengles_visitor.cc
index cb4fdd5d71d559166981bc16d489ac191341518a..ffebe59417208d9344176c987e3bd7158de15ff2 100644
--- a/compositor/gles/opengles_visitor.cc
+++ b/compositor/gles/opengles_visitor.cc
@@ -22,7 +22,7 @@
#endif
namespace window_manager {
-
+
OpenGlesDrawVisitor::OpenGlesDrawVisitor(Gles2Interface* gl,
RealCompositor* compositor,
Compositor::StageActor* stage)
@@ -95,10 +95,10 @@ OpenGlesDrawVisitor::OpenGlesDrawVisitor(Gles2Interface* gl,
CHECK(gl_->InitGLExtensions()) << "Failed to load GL-ES extensions.";
// Allocate shaders
- tex_color_shader_ = new TexColorShader();
- tex_shade_shader_ = new TexShadeShader();
- no_alpha_color_shader_ = new NoAlphaColorShader();
- no_alpha_shade_shader_ = new NoAlphaShadeShader();
+ tex_color_shader_.reset(new TexColorShader());
+ tex_shade_shader_.reset(new TexShadeShader());
+ no_alpha_color_shader_.reset(new NoAlphaColorShader());
+ no_alpha_shade_shader_.reset(new NoAlphaShadeShader());
gl_->ReleaseShaderCompiler();
// TODO: Move away from one global Vertex Buffer Object
@@ -128,14 +128,10 @@ OpenGlesDrawVisitor::OpenGlesDrawVisitor(Gles2Interface* gl,
}
OpenGlesDrawVisitor::~OpenGlesDrawVisitor() {
- delete tex_color_shader_;
- delete tex_shade_shader_;
- delete no_alpha_color_shader_;
- delete no_alpha_shade_shader_;
-
gl_->DeleteBuffers(1, &vertex_buffer_object_);
- LOG_IF(ERROR, gl_->EglMakeCurrent(egl_display_, EGL_NO_SURFACE,
+ LOG_IF(ERROR, gl_->EglMakeCurrent(egl_display_,
+ EGL_NO_SURFACE,
EGL_NO_SURFACE,
EGL_NO_CONTEXT) != EGL_TRUE)
<< "eglMakeCurrent() failed: " << eglGetError();
@@ -184,10 +180,10 @@ void OpenGlesDrawVisitor::BindImage(const ImageContainer* container,
container->width(), container->height(),
0, gl_format, gl_type, container->data());
- OpenGlesTextureData* data = new OpenGlesTextureData(gl_);
+ scoped_ptr<OpenGlesTextureData> data(new OpenGlesTextureData(gl_));
data->SetTexture(texture);
data->set_has_alpha(ImageFormatUsesAlpha(container->format()));
- actor->set_texture_data(data);
+ actor->set_texture_data(data.release());
}
void OpenGlesDrawVisitor::VisitStage(RealCompositor::StageActor* actor) {
@@ -271,9 +267,9 @@ void OpenGlesDrawVisitor::CreateTextureData(
if (!image_data.Bind(actor))
return;
- OpenGlesTextureData* texture = new OpenGlesTextureData(gl_);
- image_data.BindTexture(texture, !actor->pixmap_is_opaque());
- actor->set_texture_data(texture);
+ scoped_ptr<OpenGlesTextureData> texture(new OpenGlesTextureData(gl_));
+ image_data.BindTexture(texture.get(), !actor->pixmap_is_opaque());
+ actor->set_texture_data(texture.release());
}
void OpenGlesDrawVisitor::VisitImage(RealCompositor::ImageActor* actor) {
« no previous file with comments | « compositor/gles/opengles_visitor.h ('k') | compositor/mock_compositor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698