Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1689)

Unified Diff: src/core/SkImageCacherator.cpp

Issue 1282363002: Use SkImageCacherator in SkImages (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: now with mutex safeness Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/core/SkImageCacherator.cpp
diff --git a/src/core/SkImageCacherator.cpp b/src/core/SkImageCacherator.cpp
index 863cc11b1d8f189368c10524fed583bda0014be7..b591b22dd226991a8ccf850a29ed56582ba1e7dd 100644
--- a/src/core/SkImageCacherator.cpp
+++ b/src/core/SkImageCacherator.cpp
@@ -53,14 +53,19 @@ SkImageCacherator* SkImageCacherator::NewFromGenerator(SkImageGenerator* gen,
SkImageCacherator::SkImageCacherator(SkImageGenerator* gen, const SkImageInfo& info,
const SkIPoint& origin, uint32_t uniqueID)
- : fGenerator(gen)
+ : fNotThreadSafeGenerator(gen)
, fInfo(info)
, fOrigin(origin)
, fUniqueID(uniqueID)
{}
SkImageCacherator::~SkImageCacherator() {
- SkDELETE(fGenerator);
+ SkDELETE(fNotThreadSafeGenerator);
+}
+
+SkData* SkImageCacherator::refEncoded() {
+ ScopedGenerator generator(this);
+ return generator->refEncodedData();
}
static bool check_output_bitmap(const SkBitmap& bitmap, uint32_t expectedID) {
@@ -70,17 +75,17 @@ static bool check_output_bitmap(const SkBitmap& bitmap, uint32_t expectedID) {
return true;
}
-static bool generate_bitmap(SkBitmap* bitmap, const SkImageInfo& info, const SkIPoint& origin,
- SkImageGenerator* generator) {
- const size_t rowBytes = info.minRowBytes();
- if (!bitmap->tryAllocPixels(info, rowBytes)) {
+bool SkImageCacherator::generateBitmap(SkBitmap* bitmap) {
+ const size_t rowBytes = fInfo.minRowBytes();
+ if (!bitmap->tryAllocPixels(fInfo, rowBytes)) {
return false;
}
SkASSERT(bitmap->rowBytes() == rowBytes);
+ ScopedGenerator generator(this);
const SkImageInfo& genInfo = generator->getInfo();
- if (info.dimensions() == genInfo.dimensions()) {
- SkASSERT(origin.x() == 0 && origin.y() == 0);
+ if (fInfo.dimensions() == genInfo.dimensions()) {
+ SkASSERT(fOrigin.x() == 0 && fOrigin.y() == 0);
// fast-case, no copy needed
if (!generator->getPixels(bitmap->info(), bitmap->getPixels(), rowBytes)) {
bitmap->reset();
@@ -97,7 +102,7 @@ static bool generate_bitmap(SkBitmap* bitmap, const SkImageInfo& info, const SkI
return false;
}
full.readPixels(bitmap->info(), bitmap->getPixels(), bitmap->rowBytes(),
- origin.x(), origin.y());
+ fOrigin.x(), fOrigin.y());
}
return true;
}
@@ -108,7 +113,8 @@ bool SkImageCacherator::tryLockAsBitmap(SkBitmap* bitmap) {
if (SkBitmapCache::Find(fUniqueID, bitmap)) {
return check_output_bitmap(*bitmap, fUniqueID);
}
- if (!generate_bitmap(bitmap, fInfo, fOrigin, fGenerator)) {
+
+ if (!this->generateBitmap(bitmap)) {
return false;
}
@@ -124,10 +130,13 @@ bool SkImageCacherator::lockAsBitmap(SkBitmap* bitmap) {
#if SK_SUPPORT_GPU
// Try to get a texture and read it back to raster (and then cache that with our ID)
+ SkAutoTUnref<GrTexture> tex;
- SkIRect subset = SkIRect::MakeXYWH(fOrigin.x(), fOrigin.y(), fInfo.width(), fInfo.height());
- SkAutoTUnref<GrTexture> tex(fGenerator->generateTexture(nullptr, kUntiled_SkImageUsageType,
- &subset));
+ {
+ ScopedGenerator generator(this);
+ SkIRect subset = SkIRect::MakeXYWH(fOrigin.x(), fOrigin.y(), fInfo.width(), fInfo.height());
+ tex.reset(generator->generateTexture(nullptr, kUntiled_SkImageUsageType, &subset));
+ }
if (!tex) {
bitmap->reset();
return false;
@@ -165,8 +174,11 @@ GrTexture* SkImageCacherator::tryLockAsTexture(GrContext* ctx, SkImageUsageType
return tex; // we got a cache hit!
}
- SkIRect subset = SkIRect::MakeXYWH(fOrigin.x(), fOrigin.y(), fInfo.width(), fInfo.height());
- tex = fGenerator->generateTexture(ctx, usage, &subset);
+ {
+ ScopedGenerator generator(this);
+ SkIRect subset = SkIRect::MakeXYWH(fOrigin.x(), fOrigin.y(), fInfo.width(), fInfo.height());
+ tex = generator->generateTexture(ctx, usage, &subset);
+ }
if (tex) {
tex->resourcePriv().setUniqueKey(key);
}
@@ -188,7 +200,7 @@ GrTexture* SkImageCacherator::lockAsTexture(GrContext* ctx, SkImageUsageType usa
// Try to get a bitmap and then upload/cache it as a texture
SkBitmap bitmap;
- if (!generate_bitmap(&bitmap, fInfo, fOrigin, fGenerator)) {
+ if (!this->generateBitmap(&bitmap)) {
return nullptr;
}
return GrRefCachedBitmapTexture(ctx, bitmap, usage);

Powered by Google App Engine
This is Rietveld 408576698