diff options
author | reed <reed@google.com> | 2015-09-14 11:17:23 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-14 11:17:23 -0700 |
commit | efd50daa2883ccadbed4bcffc789a76b24536a60 (patch) | |
tree | fed08d1d2f687bfbfcdcfa56dd1c684b9e5ece7b /src/image | |
parent | 5a744b780190adbe6f210ffa4da9693b66d87afd (diff) |
impl preroll for all image backends
BUG=skia:
Review URL: https://codereview.chromium.org/1341043002
Diffstat (limited to 'src/image')
-rw-r--r-- | src/image/SkImage.cpp | 9 | ||||
-rw-r--r-- | src/image/SkImage_Base.h | 2 | ||||
-rw-r--r-- | src/image/SkImage_Raster.cpp | 9 |
3 files changed, 8 insertions, 12 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index 4315ad7e87..654b848fce 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -55,7 +55,14 @@ bool SkImage::readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dst } void SkImage::preroll(GrContext* ctx) const { - as_IB(this)->onPreroll(ctx); + // For now, and to maintain parity w/ previous pixelref behavior, we just force the image + // to produce a cached raster-bitmap form, so that drawing to a raster canvas should be fast. + // + SkBitmap bm; + if (as_IB(this)->getROPixels(&bm)) { + bm.lockPixels(); + bm.unlockPixels(); + } } SkShader* SkImage::newShader(SkShader::TileMode tileX, diff --git a/src/image/SkImage_Base.h b/src/image/SkImage_Base.h index 8c9a73ba36..d316267647 100644 --- a/src/image/SkImage_Base.h +++ b/src/image/SkImage_Base.h @@ -52,8 +52,6 @@ public: virtual bool onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY) const; - virtual void onPreroll(GrContext*) const {} - virtual GrTexture* peekTexture() const { return nullptr; } // return a read-only copy of the pixels. We promise to not modify them, diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp index 5025dfa8c4..7eff9ef0f6 100644 --- a/src/image/SkImage_Raster.cpp +++ b/src/image/SkImage_Raster.cpp @@ -64,7 +64,6 @@ public: SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const override; bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY) const override; - void onPreroll(GrContext*) const override; const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const override; SkData* onRefEncoded() const override; bool getROPixels(SkBitmap*) const override; @@ -164,14 +163,6 @@ const void* SkImage_Raster::onPeekPixels(SkImageInfo* infoPtr, size_t* rowBytesP return fBitmap.getPixels(); } -void SkImage_Raster::onPreroll(GrContext* ctx) const { - // SkImage can be called from lots of threads, but our fBitmap is *not* thread-safe, - // so we have to perform this lock/unlock in a non-racy way... we make a copy! - SkBitmap localShallowCopy(fBitmap); - localShallowCopy.lockPixels(); - localShallowCopy.unlockPixels(); -} - SkData* SkImage_Raster::onRefEncoded() const { SkPixelRef* pr = fBitmap.pixelRef(); const SkImageInfo prInfo = pr->info(); |