| Index: src/core/SkBitmapDevice.cpp
|
| diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp
|
| index 21601f40372b004dea942545abc812789de67fa9..79b62abe2c0b48126db69c67ef34a3ac231fc449 100644
|
| --- a/src/core/SkBitmapDevice.cpp
|
| +++ b/src/core/SkBitmapDevice.cpp
|
| @@ -322,16 +322,23 @@ void SkBitmapDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap,
|
| }
|
|
|
| USE_SHADER:
|
| +
|
| + // Since the shader need only live for our stack-frame, pass in a custom allocator. This
|
| + // can save malloc calls, and signals to SkMakeBitmapShader to not try to copy the bitmap
|
| + // if its mutable, since that precaution is not needed (give the short lifetime of the shader).
|
| + SkTBlitterAllocator allocator;
|
| // construct a shader, so we can call drawRect with the dst
|
| - auto s = SkShader::MakeBitmapShader(*bitmapPtr, SkShader::kClamp_TileMode,
|
| - SkShader::kClamp_TileMode, &matrix);
|
| + auto s = SkMakeBitmapShader(*bitmapPtr, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode,
|
| + &matrix, &allocator);
|
| if (!s) {
|
| return;
|
| }
|
| + // we deliberately add a ref, since the allocator wants to be the last owner
|
| + s.get()->ref();
|
|
|
| SkPaint paintWithShader(paint);
|
| paintWithShader.setStyle(SkPaint::kFill_Style);
|
| - paintWithShader.setShader(std::move(s));
|
| + paintWithShader.setShader(s);
|
|
|
| // Call ourself, in case the subclass wanted to share this setup code
|
| // but handle the drawRect code themselves.
|
|
|