summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDohyun Lee <leedhyun11@gmail.com>2016-01-21 13:46:21 +0900
committerSteve Kondik <shade@chemlab.org>2016-01-23 23:45:19 -0800
commita7e2f64feb3ec5869ca501737a2ade0d0855336b (patch)
tree4e39f984259ee6710d6384d8e5bcae8c7250d44a
parent64deb448b8ac50587bc90e3506e639e4e1a066ed (diff)
downloadframeworks_base-a7e2f64feb3ec5869ca501737a2ade0d0855336b.zip
frameworks_base-a7e2f64feb3ec5869ca501737a2ade0d0855336b.tar.gz
frameworks_base-a7e2f64feb3ec5869ca501737a2ade0d0855336b.tar.bz2
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 <leedhyun11@gmail.com>
-rw-r--r--libs/hwui/OpenGLRenderer.cpp1
-rw-r--r--libs/hwui/renderstate/RenderState.cpp4
2 files changed, 5 insertions, 0 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index c5e709e..773c6f5 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -1710,6 +1710,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 1e39bfa..84b6965 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 ----------
// ------------------------------------