From 92561a0b99ad6c08ab7a11dd1872f028199392e9 Mon Sep 17 00:00:00 2001 From: reed Date: Thu, 2 Oct 2014 13:47:08 -0700 Subject: Add SkCachedData and use it for SkMipMap Review URL: https://codereview.chromium.org/592843003 --- tests/SkResourceCacheTest.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'tests/SkResourceCacheTest.cpp') diff --git a/tests/SkResourceCacheTest.cpp b/tests/SkResourceCacheTest.cpp index f13476a5a3..0e941758ee 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); } -- cgit v1.2.3