Chromium Code Reviews| Index: src/core/SkBitmapCache.cpp |
| diff --git a/src/core/SkBitmapCache.cpp b/src/core/SkBitmapCache.cpp |
| index 84f10363f02aac1bd9b62e9f0c7db7f401e29af7..edb2cfb77b0265a03b727ef54df2af59260f7723 100644 |
| --- a/src/core/SkBitmapCache.cpp |
| +++ b/src/core/SkBitmapCache.cpp |
| @@ -70,33 +70,41 @@ struct BitmapRec : public SkResourceCache::Rec { |
| } |
| }; |
| -bool SkBitmapCache::Find(const SkBitmap& src, SkScalar invScaleX, SkScalar invScaleY, |
| - SkBitmap* result) { |
| +#define CHECK_LOCAL(localCache, localName, globalName, args...) \ |
| + (localCache) ? localCache->localName(args) : SkResourceCache::globalName(args) |
| + |
| +bool SkBitmapCache::Find(const SkBitmap& src, SkScalar invScaleX, SkScalar invScaleY, SkBitmap* result, |
| + SkResourceCache* localCache) { |
| if (0 == invScaleX || 0 == invScaleY) { |
| // degenerate, and the key we use for mipmaps |
| return false; |
| } |
| BitmapKey key(src.getGenerationID(), invScaleX, invScaleY, get_bounds_from_bitmap(src)); |
| - return SkResourceCache::Find(key, BitmapRec::Visitor, result); |
| + |
| + return CHECK_LOCAL(localCache, find, Find, key, BitmapRec::Visitor, result); |
|
danakj
2014/09/16 15:26:27
This is really awkward to read :(
Tho, given you
reed1
2014/09/16 17:31:12
I find it very nice for calls sites that want to a
|
| } |
| void SkBitmapCache::Add(const SkBitmap& src, SkScalar invScaleX, SkScalar invScaleY, |
| - const SkBitmap& result) { |
| + const SkBitmap& result, SkResourceCache* localCache) { |
| if (0 == invScaleX || 0 == invScaleY) { |
| // degenerate, and the key we use for mipmaps |
| return; |
| } |
| SkASSERT(result.isImmutable()); |
| - SkResourceCache::Add(SkNEW_ARGS(BitmapRec, (src.getGenerationID(), invScaleX, invScaleY, |
| - get_bounds_from_bitmap(src), result))); |
| + BitmapRec* rec = SkNEW_ARGS(BitmapRec, (src.getGenerationID(), invScaleX, invScaleY, |
| + get_bounds_from_bitmap(src), result)); |
| + CHECK_LOCAL(localCache, add, Add, rec); |
| } |
| -bool SkBitmapCache::Find(uint32_t genID, const SkIRect& subset, SkBitmap* result) { |
| +bool SkBitmapCache::Find(uint32_t genID, const SkIRect& subset, SkBitmap* result, |
| + SkResourceCache* localCache) { |
| BitmapKey key(genID, SK_Scalar1, SK_Scalar1, subset); |
| - return SkResourceCache::Find(key, BitmapRec::Visitor, result); |
| + |
| + return CHECK_LOCAL(localCache, find, Find, key, BitmapRec::Visitor, result); |
| } |
| -bool SkBitmapCache::Add(uint32_t genID, const SkIRect& subset, const SkBitmap& result) { |
| +bool SkBitmapCache::Add(uint32_t genID, const SkIRect& subset, const SkBitmap& result, |
| + SkResourceCache* localCache) { |
| SkASSERT(result.isImmutable()); |
| if (subset.isEmpty() |
| @@ -106,9 +114,9 @@ bool SkBitmapCache::Add(uint32_t genID, const SkIRect& subset, const SkBitmap& r |
| || result.height() != subset.height()) { |
| return false; |
| } else { |
| - SkResourceCache::Add(SkNEW_ARGS(BitmapRec, (genID, SK_Scalar1, SK_Scalar1, |
| - subset, result))); |
| + BitmapRec* rec = SkNEW_ARGS(BitmapRec, (genID, SK_Scalar1, SK_Scalar1, subset, result)); |
| + CHECK_LOCAL(localCache, add, Add, rec); |
| return true; |
| } |
| } |