aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/image
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2015-09-14 11:17:23 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-14 11:17:23 -0700
commitefd50daa2883ccadbed4bcffc789a76b24536a60 (patch)
treefed08d1d2f687bfbfcdcfa56dd1c684b9e5ece7b /src/image
parent5a744b780190adbe6f210ffa4da9693b66d87afd (diff)
impl preroll for all image backends
Diffstat (limited to 'src/image')
-rw-r--r--src/image/SkImage.cpp9
-rw-r--r--src/image/SkImage_Base.h2
-rw-r--r--src/image/SkImage_Raster.cpp9
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();