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 "Benchmark.h"
      9 #include "SkBicubicImageFilter.h"
     10 #include "SkCanvas.h"
     11 #include "SkShader.h"
     12 #include "SkString.h"
     13 
     14 // This bench exercises SkBicubicImageFilter, upsampling a 40x40 input to
     15 // 100x100, 400x100, 100x400, and 400x400.
     16 
     17 class BicubicBench : public Benchmark {
     18     SkSize         fScale;
     19     SkString       fName;
     20 
     21 public:
     22     BicubicBench(float x, float y)
     23         : fScale(SkSize::Make(x, y)) {
     24         fName.printf("bicubic_%gx%g",
     25                      SkScalarToFloat(fScale.fWidth), SkScalarToFloat(fScale.fHeight));
     26     }
     27 
     28 protected:
     29     virtual const char* onGetName() {
     30         return fName.c_str();
     31     }
     32 
     33     virtual void onDraw(const int loops, SkCanvas* canvas) {
     34         SkPaint paint;
     35         this->setupPaint(&paint);
     36 
     37         paint.setAntiAlias(true);
     38 
     39         SkRect r = SkRect::MakeWH(40, 40);
     40         SkAutoTUnref<SkImageFilter> bicubic(SkBicubicImageFilter::CreateMitchell(fScale));
     41         paint.setImageFilter(bicubic);
     42 
     43         for (int i = 0; i < loops; i++) {
     44             canvas->save();
     45             canvas->clipRect(r);
     46             canvas->drawOval(r, paint);
     47             canvas->restore();
     48         }
     49     }
     50 
     51 private:
     52     typedef Benchmark INHERITED;
     53 };
     54 
     55 DEF_BENCH( return new BicubicBench(10.0f, 10.0f); )
     56 DEF_BENCH( return new BicubicBench(2.5f, 10.0f); )
     57 DEF_BENCH( return new BicubicBench(10.0f, 2.5f); )
     58 DEF_BENCH( return new BicubicBench(2.5f, 2.5f); )
     59