From c5a3efd28668a62df3e3b364b49624c5af7549b6 Mon Sep 17 00:00:00 2001 From: Dohyun Lee Date: Thu, 21 Jan 2016 13:46:21 +0900 Subject: [PATCH] libhwui: fix texture memory leak When there is not enough space and we cannot delete any Texture in TextureCache to secure space, a new Texture is created over and over again for the same SkBitmap and there is the case that it is not deleted. This patch avoids such cases. Change-Id: Ic5353995e6d0716c31fe3bb49c60ec1a71574643 Signed-off-by: Dohyun Lee --- libs/hwui/OpenGLRenderer.cpp | 1 + libs/hwui/renderstate/RenderState.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 9621b545fada..5233a2377d7f 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -1699,6 +1699,7 @@ void OpenGLRenderer::drawPatch(const SkBitmap* bitmap, const Patch* mesh, Texture* texture = entry ? entry->texture : mCaches.textureCache.get(bitmap); if (!texture) return; + const AutoTexture autoCleanup(texture); // 9 patches are built for stretching - always filter int textureFillFlags = TextureFillFlags::ForceFilter; diff --git a/libs/hwui/renderstate/RenderState.cpp b/libs/hwui/renderstate/RenderState.cpp index 1e39bfa4b583..84b696596d40 100644 --- a/libs/hwui/renderstate/RenderState.cpp +++ b/libs/hwui/renderstate/RenderState.cpp @@ -306,6 +306,10 @@ void RenderState::render(const Glop& glop) { // Shader uniforms SkiaShader::apply(*mCaches, fill.skiaShaderData); + Texture* texture = (fill.skiaShaderData.skiaShaderType & kBitmap_SkiaShaderType) ? + fill.skiaShaderData.bitmapData.bitmapTexture : nullptr; + const AutoTexture autoCleanup(texture); + // ------------------------------------ // ---------- GL state setup ---------- // ------------------------------------ -- 2.11.0