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 "SkBenchmark.h" 9 #include "SkScaledImageCache.h" 10 11 class ImageCacheBench : public SkBenchmark { 12 SkScaledImageCache fCache; 13 SkBitmap fBM; 14 15 enum { 16 N = SkBENCHLOOP(1000), 17 DIM = 1, 18 CACHE_COUNT = 500 19 }; 20 public: 21 ImageCacheBench(void* param) : INHERITED(param) , fCache(CACHE_COUNT * 100) { 22 fBM.setConfig(SkBitmap::kARGB_8888_Config, DIM, DIM); 23 fBM.allocPixels(); 24 } 25 26 void populateCache() { 27 SkScalar scale = 1; 28 for (int i = 0; i < CACHE_COUNT; ++i) { 29 SkBitmap tmp; 30 tmp.setConfig(SkBitmap::kARGB_8888_Config, 1, 1); 31 tmp.allocPixels(); 32 fCache.unlock(fCache.addAndLock(fBM, scale, scale, tmp)); 33 scale += 1; 34 } 35 } 36 37 protected: 38 virtual const char* onGetName() SK_OVERRIDE { 39 return "imagecache"; 40 } 41 42 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 43 if (fCache.getBytesUsed() == 0) { 44 this->populateCache(); 45 } 46 47 SkBitmap tmp; 48 // search for a miss (-1 scale) 49 for (int i = 0; i < N; ++i) { 50 (void)fCache.findAndLock(fBM, -1, -1, &tmp); 51 } 52 } 53 54 private: 55 typedef SkBenchmark INHERITED; 56 }; 57 58 /////////////////////////////////////////////////////////////////////////////// 59 60 DEF_BENCH( return new ImageCacheBench(p); ) 61