Home | History | Annotate | Download | only in bench
      1 /*
      2  * Copyright 2015 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 "Benchmark.h"
      9 #include "SkBitmap.h"
     10 #include "SkMipMap.h"
     11 
     12 class MipMapBench: public Benchmark {
     13     SkBitmap fBitmap;
     14     SkString fName;
     15     const int fW, fH;
     16 
     17 public:
     18     MipMapBench(int w, int h) : fW(w), fH(h) {
     19         fName.printf("mipmap_build_%dx%d", w, h);
     20     }
     21 
     22 protected:
     23     bool isSuitableFor(Backend backend) override {
     24         return kNonRendering_Backend == backend;
     25     }
     26 
     27     const char* onGetName() override { return fName.c_str(); }
     28 
     29     void onDelayedSetup() override {
     30         fBitmap.allocN32Pixels(fW, fH, true);
     31         fBitmap.eraseColor(SK_ColorWHITE);  // so we don't read uninitialized memory
     32     }
     33 
     34     void onDraw(int loops, SkCanvas*) override {
     35         for (int i = 0; i < loops * 4; i++) {
     36             SkMipMap::Build(fBitmap, nullptr)->unref();
     37         }
     38     }
     39 
     40 private:
     41     typedef Benchmark INHERITED;
     42 };
     43 
     44 // Build variants that exercise the width and heights being even or odd at each level, as the
     45 // impl specializes on each of these.
     46 //
     47 DEF_BENCH( return new MipMapBench(511, 511); )
     48 DEF_BENCH( return new MipMapBench(512, 511); )
     49 DEF_BENCH( return new MipMapBench(511, 512); )
     50 DEF_BENCH( return new MipMapBench(512, 512); )
     51