diff options
author | lsalzman <lsalzman@mozilla.com> | 2017-04-05 21:42:54 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2017-04-05 21:42:54 -0700 |
commit | c0e52f44aac391da632d88d9702aea4f41cfe17a (patch) | |
tree | 92dca93a073e768df1832fff4970db254dd2c45a /src/core/SkBitmapDevice.cpp | |
parent | 45dcc0c42c4059c3b533b3e91d6c7fe67f6eefc7 (diff) |
Fix the size check for the drawBitmap fast-path in SkBitmapDevice::drawBitmapRect. It would fail when the source rectangle had a non-zero offset, in which case it would compare the source rectangle with the offset to the extracted bitmap size, which always fails. The only thing that should matter is that the source rectangle and extract bitmap have the same size, since the offset gets added onto the matrix.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2089583002
Review-Url: https://codereview.chromium.org/2089583002
Committed: https://skia.googlesource.com/skia/+/ea9bc0c07b5dae78a9a449d7d7a07fc79262d41a
Review-Url: https://codereview.chromium.org/2089583002
Diffstat (limited to 'src/core/SkBitmapDevice.cpp')
-rw-r--r-- | src/core/SkBitmapDevice.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp index 95ea45c29d..fd387acb90 100644 --- a/src/core/SkBitmapDevice.cpp +++ b/src/core/SkBitmapDevice.cpp @@ -315,8 +315,14 @@ void SkBitmapDevice::drawBitmapRect(const SkBitmap& bitmap, matrix.preTranslate(dx, dy); } +#ifdef SK_DRAWBITMAPRECT_FAST_OFFSET + SkRect extractedBitmapBounds = SkRect::MakeXYWH(dx, dy, + SkIntToScalar(bitmapPtr->width()), + SkIntToScalar(bitmapPtr->height())); +#else SkRect extractedBitmapBounds; extractedBitmapBounds.isetWH(bitmapPtr->width(), bitmapPtr->height()); +#endif if (extractedBitmapBounds == tmpSrc) { // no fractional part in src, we can just call drawBitmap goto USE_DRAWBITMAP; |