| Index: src/gpu/SkGpuDevice.cpp | 
| diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp | 
| index e0658b30f6ed6ae2003e4d66db01daf7f8ef2dad..9cf5b25d7814a2063f378e4ac47603e73c06abe1 100644 | 
| --- a/src/gpu/SkGpuDevice.cpp | 
| +++ b/src/gpu/SkGpuDevice.cpp | 
| @@ -791,7 +791,7 @@ void SkGpuDevice::drawBitmap(const SkDraw& origDraw, | 
| concat.setConcat(*draw->fMatrix, m); | 
| draw.writable()->fMatrix = &concat; | 
| } | 
| -    this->drawBitmapCommon(*draw, bitmap, NULL, NULL, paint, SkCanvas::kNone_DrawBitmapRectFlag); | 
| +    this->drawBitmapCommon(*draw, bitmap, NULL, NULL, paint, SkCanvas::kStrict_SrcRectConstraint); | 
| } | 
|  | 
| // This method outsets 'iRect' by 'outset' all around and then clamps its extents to | 
| @@ -903,7 +903,7 @@ void SkGpuDevice::drawBitmapCommon(const SkDraw& draw, | 
| const SkRect* srcRectPtr, | 
| const SkSize* dstSizePtr, | 
| const SkPaint& paint, | 
| -                                   SkCanvas::DrawBitmapRectFlags flags) { | 
| +                                   SkCanvas::SrcRectConstraint constraint) { | 
| CHECK_SHOULD_DRAW(draw); | 
|  | 
| SkRect srcRect; | 
| @@ -926,7 +926,7 @@ void SkGpuDevice::drawBitmapCommon(const SkDraw& draw, | 
| int height = tex ? tex->height() : bitmap.height(); | 
| if (srcRect.fLeft <= 0 && srcRect.fTop <= 0 && | 
| srcRect.fRight >= width && srcRect.fBottom >= height) { | 
| -        flags = (SkCanvas::DrawBitmapRectFlags) (flags | SkCanvas::kBleed_DrawBitmapRectFlag); | 
| +        constraint = SkCanvas::kFast_SrcRectConstraint; | 
| } | 
|  | 
| // If the render target is not msaa and draw is antialiased, we call | 
| @@ -976,7 +976,7 @@ void SkGpuDevice::drawBitmapCommon(const SkDraw& draw, | 
| // already accounted for in 'm' and 'srcRect'. In clamp mode we need to chop out | 
| // the desired portion of the bitmap and then update 'm' and 'srcRect' to | 
| // compensate. | 
| -            if (!(SkCanvas::kBleed_DrawBitmapRectFlag & flags)) { | 
| +            if (SkCanvas::kStrict_SrcRectConstraint == constraint) { | 
| SkIRect iSrc; | 
| srcRect.roundOut(&iSrc); | 
|  | 
| @@ -1064,7 +1064,7 @@ void SkGpuDevice::drawBitmapCommon(const SkDraw& draw, | 
| SkIRect clippedSrcRect; | 
| if (this->shouldTileBitmap(bitmap, viewM, params, srcRectPtr, maxTileSize, &tileSize, | 
| &clippedSrcRect)) { | 
| -        this->drawTiledBitmap(bitmap, viewM, srcRect, clippedSrcRect, params, paint, flags, | 
| +        this->drawTiledBitmap(bitmap, viewM, srcRect, clippedSrcRect, params, paint, constraint, | 
| tileSize, doBicubic); | 
| } else { | 
| // take the simple case | 
| @@ -1078,7 +1078,7 @@ void SkGpuDevice::drawBitmapCommon(const SkDraw& draw, | 
| srcRect, | 
| params, | 
| paint, | 
| -                                 flags, | 
| +                                 constraint, | 
| doBicubic, | 
| needsTextureDomain); | 
| } | 
| @@ -1092,7 +1092,7 @@ void SkGpuDevice::drawTiledBitmap(const SkBitmap& bitmap, | 
| const SkIRect& clippedSrcIRect, | 
| const GrTextureParams& params, | 
| const SkPaint& paint, | 
| -                                  SkCanvas::DrawBitmapRectFlags flags, | 
| +                                  SkCanvas::SrcRectConstraint constraint, | 
| int tileSize, | 
| bool bicubic) { | 
| // The following pixel lock is technically redundant, but it is desirable | 
| @@ -1135,7 +1135,7 @@ void SkGpuDevice::drawTiledBitmap(const SkBitmap& bitmap, | 
| if (GrTextureParams::kNone_FilterMode != params.filterMode() || bicubic) { | 
| SkIRect iClampRect; | 
|  | 
| -                if (SkCanvas::kBleed_DrawBitmapRectFlag & flags) { | 
| +                if (SkCanvas::kFast_SrcRectConstraint == constraint) { | 
| // In bleed mode we want to always expand the tile on all edges | 
| // but stay within the bitmap bounds | 
| iClampRect = SkIRect::MakeWH(bitmap.width(), bitmap.height()); | 
| @@ -1163,7 +1163,7 @@ void SkGpuDevice::drawTiledBitmap(const SkBitmap& bitmap, | 
| tileR, | 
| paramsTemp, | 
| paint, | 
| -                                         flags, | 
| +                                         constraint, | 
| bicubic, | 
| needsTextureDomain); | 
| } | 
| @@ -1184,7 +1184,7 @@ void SkGpuDevice::internalDrawBitmap(const SkBitmap& bitmap, | 
| const SkRect& srcRect, | 
| const GrTextureParams& params, | 
| const SkPaint& paint, | 
| -                                     SkCanvas::DrawBitmapRectFlags flags, | 
| +                                     SkCanvas::SrcRectConstraint constraint, | 
| bool bicubic, | 
| bool needsTextureDomain) { | 
| SkASSERT(bitmap.width() <= fContext->caps()->maxTextureSize() && | 
| @@ -1212,7 +1212,7 @@ void SkGpuDevice::internalDrawBitmap(const SkBitmap& bitmap, | 
| GrPaint grPaint; | 
| SkAutoTUnref<GrFragmentProcessor> fp; | 
|  | 
| -    if (needsTextureDomain && !(flags & SkCanvas::kBleed_DrawBitmapRectFlag)) { | 
| +    if (needsTextureDomain && (SkCanvas::kStrict_SrcRectConstraint == constraint)) { | 
| // Use a constrained texture domain to avoid color bleeding | 
| SkScalar left, top, right, bottom; | 
| if (srcRect.width() > SK_Scalar1) { | 
| @@ -1351,7 +1351,9 @@ void SkGpuDevice::drawSprite(const SkDraw& draw, const SkBitmap& bitmap, | 
| void SkGpuDevice::drawBitmapRect(const SkDraw& origDraw, const SkBitmap& bitmap, | 
| const SkRect* src, const SkRect& dst, | 
| const SkPaint& paint, | 
| -                                 SkCanvas::DrawBitmapRectFlags flags) { | 
| +                                 SK_VIRTUAL_CONSTRAINT_TYPE legacyConstraint) { | 
| +    SkCanvas::SrcRectConstraint constraint = (SkCanvas::SrcRectConstraint)legacyConstraint; | 
| + | 
| SkMatrix    matrix; | 
| SkRect      bitmapBounds, tmpSrc; | 
|  | 
| @@ -1391,7 +1393,7 @@ void SkGpuDevice::drawBitmapRect(const SkDraw& origDraw, const SkBitmap& bitmap, | 
| dstSize.fWidth = tmpDst.width(); | 
| dstSize.fHeight = tmpDst.height(); | 
|  | 
| -    this->drawBitmapCommon(*draw, bitmap, &tmpSrc, &dstSize, paint, flags); | 
| +    this->drawBitmapCommon(*draw, bitmap, &tmpSrc, &dstSize, paint, constraint); | 
| } | 
|  | 
| void SkGpuDevice::drawDevice(const SkDraw& draw, SkBaseDevice* device, | 
| @@ -1512,10 +1514,11 @@ void SkGpuDevice::drawImage(const SkDraw& draw, const SkImage* image, SkScalar x | 
| } | 
|  | 
| void SkGpuDevice::drawImageRect(const SkDraw& draw, const SkImage* image, const SkRect* src, | 
| -                                const SkRect& dst, const SkPaint& paint) { | 
| +                                const SkRect& dst, const SkPaint& paint, | 
| +                                SkCanvas::SrcRectConstraint constraint) { | 
| SkBitmap bm; | 
| if (wrap_as_bm(image, &bm)) { | 
| -        this->drawBitmapRect(draw, bm, src, dst, paint, SkCanvas::kNone_DrawBitmapRectFlag); | 
| +        this->drawBitmapRect(draw, bm, src, dst, paint, (SK_VIRTUAL_CONSTRAINT_TYPE)constraint); | 
| } | 
| } | 
|  | 
|  |