1/* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "Test.h" 9#include "SkScaledImageCache.h" 10 11static void make_bm(SkBitmap* bm, int w, int h) { 12 bm->setConfig(SkBitmap::kARGB_8888_Config, w, h); 13 bm->allocPixels(); 14} 15 16static void TestImageCache(skiatest::Reporter* reporter) { 17 static const int COUNT = 10; 18 static const int DIM = 256; 19 static const size_t defLimit = DIM * DIM * 4 * COUNT + 1024; // 1K slop 20 SkScaledImageCache cache(defLimit); 21 SkScaledImageCache::ID* id; 22 23 SkBitmap bm[COUNT]; 24 25 SkScalar scale = 2; 26 for (int i = 0; i < COUNT; ++i) { 27 SkBitmap tmp; 28 29 make_bm(&bm[i], DIM, DIM); 30 id = cache.findAndLock(bm[i], scale, scale, &tmp); 31 REPORTER_ASSERT(reporter, NULL == id); 32 33 make_bm(&tmp, DIM, DIM); 34 id = cache.addAndLock(bm[i], scale, scale, tmp); 35 REPORTER_ASSERT(reporter, NULL != id); 36 37 SkBitmap tmp2; 38 SkScaledImageCache::ID* id2 = cache.findAndLock(bm[i], scale, scale, 39 &tmp2); 40 REPORTER_ASSERT(reporter, id == id2); 41 REPORTER_ASSERT(reporter, tmp.pixelRef() == tmp2.pixelRef()); 42 REPORTER_ASSERT(reporter, tmp.width() == tmp2.width()); 43 REPORTER_ASSERT(reporter, tmp.height() == tmp2.height()); 44 cache.unlock(id2); 45 46 cache.unlock(id); 47 } 48 49 // stress test, should trigger purges 50 for (size_t i = 0; i < COUNT * 100; ++i) { 51 scale += 1; 52 53 SkBitmap tmp; 54 55 make_bm(&tmp, DIM, DIM); 56 id = cache.addAndLock(bm[0], scale, scale, tmp); 57 REPORTER_ASSERT(reporter, NULL != id); 58 cache.unlock(id); 59 } 60 61 cache.setByteLimit(0); 62} 63 64#include "TestClassDef.h" 65DEFINE_TESTCLASS("ImageCache", TestImageCacheClass, TestImageCache) 66