static void testBitmapCache_discarded_bitmap(skiatest::Reporter* reporter, SkResourceCache* cache, SkResourceCache::DiscardableFactory factory) { SkBitmap::Allocator* allocator = cache->allocator(); const SkColorType testTypes[] = { kAlpha_8_SkColorType, kRGB_565_SkColorType, kRGBA_8888_SkColorType, kBGRA_8888_SkColorType, kIndex_8_SkColorType, kGray_8_SkColorType }; for (const SkColorType testType : testTypes) { SkBitmap cachedBitmap; make_bitmap(&cachedBitmap, SkImageInfo::Make(5, 5, testType, kPremul_SkAlphaType), allocator); cachedBitmap.setImmutable(); cachedBitmap.unlockPixels(); SkBitmap bm; SkIRect rect = SkIRect::MakeWH(5, 5); // Add a bitmap to the cache. REPORTER_ASSERT(reporter, SkBitmapCache::Add(cachedBitmap.pixelRef(), rect, cachedBitmap, cache)); REPORTER_ASSERT(reporter, SkBitmapCache::Find(cachedBitmap.getGenerationID(), rect, &bm, cache)); // Finding more than once works fine. REPORTER_ASSERT(reporter, SkBitmapCache::Find(cachedBitmap.getGenerationID(), rect, &bm, cache)); bm.unlockPixels(); // Drop the pixels in the bitmap. if (factory) { REPORTER_ASSERT(reporter, gPool->getRAMUsed() > 0); gPool->dumpPool(); // The bitmap is not in the cache since it has been dropped. REPORTER_ASSERT(reporter, !SkBitmapCache::Find(cachedBitmap.getGenerationID(), rect, &bm, cache)); } make_bitmap(&cachedBitmap, SkImageInfo::Make(5, 5, testType, kPremul_SkAlphaType), allocator); cachedBitmap.setImmutable(); cachedBitmap.unlockPixels(); // We can add the bitmap back to the cache and find it again. REPORTER_ASSERT(reporter, SkBitmapCache::Add(cachedBitmap.pixelRef(), rect, cachedBitmap, cache)); REPORTER_ASSERT(reporter, SkBitmapCache::Find(cachedBitmap.getGenerationID(), rect, &bm, cache)); } test_mipmapcache(reporter, cache); test_bitmap_notify(reporter, cache); test_mipmap_notify(reporter, cache); }
static void testBitmapCache_discarded_bitmap(skiatest::Reporter* reporter, SkResourceCache* cache, SkResourceCache::DiscardableFactory factory) { test_mipmapcache(reporter, cache); test_mipmap_notify(reporter, cache); }