diff options
author | 2013-02-11 18:01:20 -0800 | |
---|---|---|
committer | 2013-02-11 18:04:23 -0800 | |
commit | e67307c816f3fdae2bfba8e9a4410dc015645e91 (patch) | |
tree | a97695ed6c6e087364fba51b3a848d4aedebdb41 | |
parent | f16c7a97548cedccea291ffebc4388a7f15c9aa1 (diff) |
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
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 7 | ||||
-rw-r--r-- | 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 08e2332df80b..62f268dab291 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 1afcb46d998c..1a75ea8d272f 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, |