From e67307c816f3fdae2bfba8e9a4410dc015645e91 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Mon, 11 Feb 2013 18:01:20 -0800 Subject: [PATCH] Prevent crash when setting up a stencil-based clip Bug #8177690 Clear the layers before we setup the stencil to avoid dereferencing the recently deleted rects. Change-Id: I5dce5f965672f276f9490636d85b6018d3ab9422 --- libs/hwui/OpenGLRenderer.cpp | 7 +++++-- libs/hwui/font/Font.cpp | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 08e2332df80bc..62f268dab2912 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -1179,6 +1179,10 @@ void OpenGLRenderer::clearLayerRegions() { delete bounds; } + // We must clear the list of dirty rects before we + // call setupDraw() to prevent stencil setup to do + // the same thing again + mLayers.clear(); setupDraw(false); setupDrawColor(0.0f, 0.0f, 0.0f, 1.0f); @@ -1195,9 +1199,8 @@ void OpenGLRenderer::clearLayerRegions() { for (uint32_t i = 0; i < count; i++) { delete mLayers.itemAt(i); } + mLayers.clear(); } - - mLayers.clear(); } /////////////////////////////////////////////////////////////////////////////// diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp index 1afcb46d998cc..1a75ea8d272f6 100644 --- a/libs/hwui/font/Font.cpp +++ b/libs/hwui/font/Font.cpp @@ -189,7 +189,10 @@ void Font::drawCachedGlyph(CachedGlyphInfo* glyph, float x, float hOffset, float vOffset += glyph->mBitmapTop + height; SkPoint destination[4]; - measure.getPosTan(x + hOffset + glyph->mBitmapLeft + halfWidth, position, tangent); + bool ok = measure.getPosTan(x + hOffset + glyph->mBitmapLeft + halfWidth, position, tangent); + if (!ok) { + ALOGW("The path for drawTextOnPath is empty or null"); + } // Move along the tangent and offset by the normal destination[0].set(-tangent->fX * halfWidth - tangent->fY * vOffset,