diff options
author | fmalita <fmalita@chromium.org> | 2015-09-25 15:04:43 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-25 15:04:43 -0700 |
commit | 97be9a0c86eedd8ab85ae7d9aaccb0b0a8e4577d (patch) | |
tree | f843747076a1273a4fe0e11494be2f83fac44bfc | |
parent | 2f5891ea6460675b3c8d08684e1fa8b239bc0a14 (diff) |
SkImage-backed SkPictureShader
Instead of using an explicit image generator + SkBitmap + bitmap shader,
switch to the shiny new SkImage/image generator/image shader.
R=reed@google.com
Review URL: https://codereview.chromium.org/1343153003
-rw-r--r-- | src/core/SkPictureShader.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp index 906313d819..6685211df7 100644 --- a/src/core/SkPictureShader.cpp +++ b/src/core/SkPictureShader.cpp @@ -7,10 +7,10 @@ #include "SkPictureShader.h" -#include "SkBitmap.h" -#include "SkBitmapProcShader.h" #include "SkCanvas.h" +#include "SkImageCacherator.h" #include "SkImageGenerator.h" +#include "SkImageShader.h" #include "SkMatrixUtils.h" #include "SkPicture.h" #include "SkReadBuffer.h" @@ -215,20 +215,26 @@ SkShader* SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, const SkM this->getLocalMatrix()); if (!SkResourceCache::Find(key, BitmapShaderRec::Visitor, &tileShader)) { - SkMatrix tileMatrix; - tileMatrix.setRectToRect(fTile, SkRect::MakeIWH(tileSize.width(), tileSize.height()), - SkMatrix::kFill_ScaleToFit); - SkBitmap bm; - if (!SkDEPRECATED_InstallDiscardablePixelRef( - SkImageGenerator::NewFromPicture(tileSize, fPicture, &tileMatrix, nullptr), &bm)) { + SkMatrix tileMatrix = + SkMatrix::MakeRectToRect(fTile, SkRect::MakeIWH(tileSize.width(), tileSize.height()), + SkMatrix::kFill_ScaleToFit); + SkAutoTUnref<SkImage> tileImage( + SkImage::NewFromPicture(fPicture, tileSize, &tileMatrix, nullptr)); + if (!tileImage) { return nullptr; } SkMatrix shaderMatrix = this->getLocalMatrix(); shaderMatrix.preScale(1 / tileScale.width(), 1 / tileScale.height()); - tileShader.reset(CreateBitmapShader(bm, fTmx, fTmy, &shaderMatrix)); - - SkResourceCache::Add(new BitmapShaderRec(key, tileShader.get(), bm.getSize())); + tileShader.reset(tileImage->newShader(fTmx, fTmy, &shaderMatrix)); + + // The actual pixels are accounted for in the SkImage cacherator budget. Here we + // use a rough estimate for the related objects. + const size_t bytesUsed = sizeof(SkImageShader) + + sizeof(SkImage) + + sizeof(SkImageCacherator) + + sizeof(SkImageGenerator); + SkResourceCache::Add(new BitmapShaderRec(key, tileShader.get(), bytesUsed)); } return tileShader.detach(); |