From 62101e8b479a746e73903ea3f2520d5038aaf686 Mon Sep 17 00:00:00 2001 From: John Reck Date: Thu, 12 Jul 2012 15:57:49 -0700 Subject: Don't attempt to draw clipped-out pictures Change-Id: Iaf91d46b448ae49fe2359cfd19694995edec95e5 --- Source/WebKit/android/jni/PicturePile.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'Source/WebKit/android/jni') diff --git a/Source/WebKit/android/jni/PicturePile.cpp b/Source/WebKit/android/jni/PicturePile.cpp index 0567b62..b69c131 100644 --- a/Source/WebKit/android/jni/PicturePile.cpp +++ b/Source/WebKit/android/jni/PicturePile.cpp @@ -58,7 +58,10 @@ static SkIRect toSkIRect(const IntRect& rect) { static IntRect extractClipBounds(SkCanvas* canvas, const IntSize& size) { SkRect clip; - canvas->getClipBounds(&clip); + if (!canvas->getClipBounds(&clip)) { + ALOGW("Empty clip!"); + return IntRect(); + } clip.intersect(0, 0, size.width(), size.height()); return enclosingIntRect(clip); } @@ -93,6 +96,8 @@ void PicturePile::draw(SkCanvas* canvas) * used for translucent surfaces */ IntRect clipBounds = extractClipBounds(canvas, m_size); + if (clipBounds.isEmpty()) + return; SkRegion clipRegion(toSkIRect(clipBounds)); drawWithClipRecursive(canvas, clipRegion, m_pile.size() - 1); } @@ -116,8 +121,8 @@ void PicturePile::drawWithClipRecursive(SkCanvas* canvas, SkRegion& clipRegion, clipRegion.op(intersection, SkRegion::kDifference_Op); drawWithClipRecursive(canvas, clipRegion, index - 1); int saved = canvas->save(); - canvas->clipRect(intersection); - drawPicture(canvas, pc); + if (canvas->clipRect(intersection)) + drawPicture(canvas, pc); canvas->restoreToCount(saved); } else drawWithClipRecursive(canvas, clipRegion, index - 1); -- cgit v1.1