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