Correctly pre-clip paths when recording display lists
Bug #6836448
External bug: http://code.google.com/p/android/issues/detail?id=34946

DO NOT MERGE

DisplayListRenderer::drawPath was not invoking quickReject() properly,
passing x,y,width,height instead of left,top,right,bottom. A path
could thus get rejected when it should be drawn instead.

While working on this change I found a similar issue with another
drawing command, drawBitmapData().

Change-Id: I8306faf72db14d71b54ecb7de295c9a6957d9494
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index d376e3a..0c89014 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -1541,7 +1541,7 @@
 
 status_t DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top,
         SkPaint* paint) {
-    const bool reject = quickReject(left, top, left + bitmap->width(), bitmap->height());
+    const bool reject = quickReject(left, top, left + bitmap->width(), top + bitmap->height());
     uint32_t* location = addOp(DisplayList::DrawBitmapData, reject);
     addBitmapData(bitmap);
     addPoint(left, top);
@@ -1643,7 +1643,10 @@
     uint32_t width, height;
     computePathBounds(path, paint, left, top, offset, width, height);
 
-    const bool reject = quickReject(left - offset, top - offset, width, height);
+    left -= offset;
+    top -= offset;
+
+    const bool reject = quickReject(left, top, left + width, top + height);
     uint32_t* location = addOp(DisplayList::DrawPath, reject);
     addPath(path);
     addPaint(paint);