| Index: src/core/SkPictureShader.cpp
|
| diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp
|
| index 3919471b1bd43178f571fb5adb4a5391abb0d9d0..a6644aacbab362152fc9691255cc8b73442bc9ed 100644
|
| --- a/src/core/SkPictureShader.cpp
|
| +++ b/src/core/SkPictureShader.cpp
|
| @@ -93,21 +93,21 @@ struct BitmapShaderRec : public SkResourceCache::Rec {
|
|
|
| } // namespace
|
|
|
| -SkPictureShader::SkPictureShader(const SkPicture* picture, TileMode tmx, TileMode tmy,
|
| +SkPictureShader::SkPictureShader(sk_sp<const SkPicture> picture, TileMode tmx, TileMode tmy,
|
| const SkMatrix* localMatrix, const SkRect* tile)
|
| : INHERITED(localMatrix)
|
| - , fPicture(SkRef(picture))
|
| - , fTile(tile ? *tile : picture->cullRect())
|
| + , fPicture(std::move(picture))
|
| + , fTile(tile ? *tile : fPicture->cullRect())
|
| , fTmx(tmx)
|
| , fTmy(tmy) {
|
| }
|
|
|
| -SkShader* SkPictureShader::Create(const SkPicture* picture, TileMode tmx, TileMode tmy,
|
| - const SkMatrix* localMatrix, const SkRect* tile) {
|
| +sk_sp<SkShader> SkPictureShader::Make(sk_sp<const SkPicture> picture, TileMode tmx, TileMode tmy,
|
| + const SkMatrix* localMatrix, const SkRect* tile) {
|
| if (!picture || picture->cullRect().isEmpty() || (tile && tile->isEmpty())) {
|
| - return SkShader::CreateEmptyShader();
|
| + return SkShader::MakeEmptyShader();
|
| }
|
| - return new SkPictureShader(picture, tmx, tmy, localMatrix, tile);
|
| + return sk_sp<SkShader>(new SkPictureShader(std::move(picture), tmx, tmy, localMatrix, tile));
|
| }
|
|
|
| SkFlattenable* SkPictureShader::CreateProc(SkReadBuffer& buffer) {
|
| @@ -118,7 +118,7 @@ SkFlattenable* SkPictureShader::CreateProc(SkReadBuffer& buffer) {
|
| SkRect tile;
|
| buffer.readRect(&tile);
|
|
|
| - SkAutoTUnref<SkPicture> picture;
|
| + sk_sp<SkPicture> picture;
|
|
|
| if (buffer.isCrossProcess() && SkPicture::PictureIOSecurityPrecautionsEnabled()) {
|
| if (buffer.isVersionLT(SkReadBuffer::kPictureShaderHasPictureBool_Version)) {
|
| @@ -136,7 +136,7 @@ SkFlattenable* SkPictureShader::CreateProc(SkReadBuffer& buffer) {
|
| picture.reset(SkPicture::CreateFromBuffer(buffer));
|
| }
|
| }
|
| - return SkPictureShader::Create(picture, mx, my, &lm, &tile);
|
| + return SkPictureShader::Make(picture, mx, my, &lm, &tile).release();
|
| }
|
|
|
| void SkPictureShader::flatten(SkWriteBuffer& buffer) const {
|
| @@ -155,8 +155,8 @@ void SkPictureShader::flatten(SkWriteBuffer& buffer) const {
|
| }
|
| }
|
|
|
| -SkShader* SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, const SkMatrix* localM,
|
| - const int maxTextureSize) const {
|
| +sk_sp<SkShader> SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, const SkMatrix* localM,
|
| + const int maxTextureSize) const {
|
| SkASSERT(fPicture && !fPicture->cullRect().isEmpty());
|
|
|
| SkMatrix m;
|
| @@ -203,14 +203,14 @@ SkShader* SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, const SkM
|
| const SkISize tileSize = scaledSize.toCeil();
|
| #endif
|
| if (tileSize.isEmpty()) {
|
| - return SkShader::CreateEmptyShader();
|
| + return SkShader::MakeEmptyShader();
|
| }
|
|
|
| // The actual scale, compensating for rounding & clamping.
|
| const SkSize tileScale = SkSize::Make(SkIntToScalar(tileSize.width()) / fTile.width(),
|
| SkIntToScalar(tileSize.height()) / fTile.height());
|
|
|
| - SkAutoTUnref<SkShader> tileShader;
|
| + sk_sp<SkShader> tileShader;
|
| BitmapShaderKey key(fPicture->uniqueID(),
|
| fTile,
|
| fTmx,
|
| @@ -224,7 +224,7 @@ SkShader* SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, const SkM
|
| SkMatrix::kFill_ScaleToFit);
|
|
|
| SkAutoTUnref<SkImage> tileImage(
|
| - SkImage::NewFromPicture(fPicture, tileSize, &tileMatrix, nullptr));
|
| + SkImage::NewFromPicture(fPicture.get(), tileSize, &tileMatrix, nullptr));
|
| if (!tileImage) {
|
| return nullptr;
|
| }
|
| @@ -238,7 +238,7 @@ SkShader* SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, const SkM
|
| tileInfo.getSafeSize(tileInfo.minRowBytes())));
|
| }
|
|
|
| - return tileShader.detach();
|
| + return tileShader;
|
| }
|
|
|
| size_t SkPictureShader::onContextSize(const ContextRec&) const {
|
| @@ -246,8 +246,8 @@ size_t SkPictureShader::onContextSize(const ContextRec&) const {
|
| }
|
|
|
| SkShader::Context* SkPictureShader::onCreateContext(const ContextRec& rec, void* storage) const {
|
| - SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(*rec.fMatrix, rec.fLocalMatrix));
|
| - if (nullptr == bitmapShader.get()) {
|
| + sk_sp<SkShader> bitmapShader(this->refBitmapShader(*rec.fMatrix, rec.fLocalMatrix));
|
| + if (!bitmapShader) {
|
| return nullptr;
|
| }
|
| return PictureShaderContext::Create(storage, *this, rec, bitmapShader);
|
| @@ -256,8 +256,10 @@ SkShader::Context* SkPictureShader::onCreateContext(const ContextRec& rec, void*
|
| /////////////////////////////////////////////////////////////////////////////////////////
|
|
|
| SkShader::Context* SkPictureShader::PictureShaderContext::Create(void* storage,
|
| - const SkPictureShader& shader, const ContextRec& rec, SkShader* bitmapShader) {
|
| - PictureShaderContext* ctx = new (storage) PictureShaderContext(shader, rec, bitmapShader);
|
| + const SkPictureShader& shader, const ContextRec& rec,
|
| + sk_sp<SkShader> bitmapShader) {
|
| + PictureShaderContext* ctx = new (storage) PictureShaderContext(shader, rec,
|
| + std::move(bitmapShader));
|
| if (nullptr == ctx->fBitmapShaderContext) {
|
| ctx->~PictureShaderContext();
|
| ctx = nullptr;
|
| @@ -266,12 +268,12 @@ SkShader::Context* SkPictureShader::PictureShaderContext::Create(void* storage,
|
| }
|
|
|
| SkPictureShader::PictureShaderContext::PictureShaderContext(
|
| - const SkPictureShader& shader, const ContextRec& rec, SkShader* bitmapShader)
|
| + const SkPictureShader& shader, const ContextRec& rec, sk_sp<SkShader> bitmapShader)
|
| : INHERITED(shader, rec)
|
| - , fBitmapShader(SkRef(bitmapShader))
|
| + , fBitmapShader(std::move(bitmapShader))
|
| {
|
| - fBitmapShaderContextStorage = sk_malloc_throw(bitmapShader->contextSize(rec));
|
| - fBitmapShaderContext = bitmapShader->createContext(rec, fBitmapShaderContextStorage);
|
| + fBitmapShaderContextStorage = sk_malloc_throw(fBitmapShader->contextSize(rec));
|
| + fBitmapShaderContext = fBitmapShader->createContext(rec, fBitmapShaderContextStorage);
|
| //if fBitmapShaderContext is null, we are invalid
|
| }
|
|
|
| @@ -325,7 +327,7 @@ const GrFragmentProcessor* SkPictureShader::asFragmentProcessor(
|
| if (context) {
|
| maxTextureSize = context->caps()->maxTextureSize();
|
| }
|
| - SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(viewM, localMatrix, maxTextureSize));
|
| + sk_sp<SkShader> bitmapShader(this->refBitmapShader(viewM, localMatrix, maxTextureSize));
|
| if (!bitmapShader) {
|
| return nullptr;
|
| }
|
|
|