Index: tests/SkResourceCacheTest.cpp |
diff --git a/tests/SkResourceCacheTest.cpp b/tests/SkResourceCacheTest.cpp |
index f13476a5a3b681056b07aae7e9923250c92327f1..0e941758eede8bce9de3d51d53376eb9b398c3e7 100644 |
--- a/tests/SkResourceCacheTest.cpp |
+++ b/tests/SkResourceCacheTest.cpp |
@@ -121,6 +121,55 @@ DEF_TEST(BitmapCache_add_rect, reporter) { |
REPORTER_ASSERT(reporter, SkBitmapCache::Find(cachedBitmap.getGenerationID(), rect, &bm, cache)); |
} |
+#include "SkMipMap.h" |
+ |
+enum LockedState { |
+ kNotLocked, |
+ kLocked, |
+}; |
+ |
+enum CachedState { |
+ kNotInCache, |
+ kInCache, |
+}; |
+ |
+static void check_data(skiatest::Reporter* reporter, const SkCachedData* data, |
+ int refcnt, CachedState cacheState, LockedState lockedState) { |
+ REPORTER_ASSERT(reporter, data->testing_only_getRefCnt() == refcnt); |
+ REPORTER_ASSERT(reporter, data->testing_only_isInCache() == (kInCache == cacheState)); |
+ bool isLocked = (data->data() != NULL); |
+ REPORTER_ASSERT(reporter, isLocked == (lockedState == kLocked)); |
+} |
+ |
+static void test_mipmapcache(skiatest::Reporter* reporter, SkResourceCache* cache) { |
+ cache->purgeAll(); |
+ |
+ SkBitmap src; |
+ src.allocN32Pixels(5, 5); |
+ src.setImmutable(); |
+ |
+ const SkMipMap* mipmap = SkMipMapCache::FindAndRef(src, cache); |
+ REPORTER_ASSERT(reporter, NULL == mipmap); |
+ |
+ mipmap = SkMipMapCache::AddAndRef(src, cache); |
+ REPORTER_ASSERT(reporter, mipmap); |
+ check_data(reporter, mipmap, 2, kInCache, kLocked); |
+ |
+ mipmap->unref(); |
+ // tricky, since technically after this I'm no longer an owner, but since the cache is |
+ // local, I know it won't get purged behind my back |
+ check_data(reporter, mipmap, 1, kInCache, kNotLocked); |
+ |
+ // find us again |
+ mipmap = SkMipMapCache::FindAndRef(src, cache); |
+ check_data(reporter, mipmap, 2, kInCache, kLocked); |
+ |
+ cache->purgeAll(); |
+ check_data(reporter, mipmap, 1, kNotInCache, kLocked); |
+ |
+ mipmap->unref(); |
+} |
+ |
DEF_TEST(BitmapCache_discarded_bitmap, reporter) { |
SkResourceCache::DiscardableFactory factory = SkResourceCache::GetDiscardableFactory(); |
SkBitmap::Allocator* allocator = SkBitmapCache::GetAllocator(); |
@@ -165,4 +214,6 @@ DEF_TEST(BitmapCache_discarded_bitmap, reporter) { |
// We can add the bitmap back to the cache and find it again. |
REPORTER_ASSERT(reporter, SkBitmapCache::Add(cachedBitmap.getGenerationID(), rect, cachedBitmap, cache)); |
REPORTER_ASSERT(reporter, SkBitmapCache::Find(cachedBitmap.getGenerationID(), rect, &bm, cache)); |
+ |
+ test_mipmapcache(reporter, cache); |
} |