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 #include "Benchmark.h"
      8 #include "SkCanvas.h"
      9 #include "SkMatrix.h"
     10 #include "SkPaint.h"
     11 #include "SkString.h"
     12 
     13 /**
     14  * This bench measures the rendering time of SkCanvas::drawBitmap with different anti-aliasing /
     15  * matrix combinations.
     16  */
     17 
     18 class DrawBitmapAABench : public Benchmark {
     19 public:
     20     DrawBitmapAABench(bool doAA, const SkMatrix& matrix, const char name[])
     21         : fMatrix(matrix)
     22         , fName("draw_bitmap_") {
     23 
     24         fPaint.setAntiAlias(doAA);
     25         // Most clients use filtering, so let's focus on this for now.
     26         fPaint.setFilterQuality(kLow_SkFilterQuality);
     27         fName.appendf("%s_%s", doAA ? "aa" : "noaa", name);
     28     }
     29 
     30 protected:
     31     const char* onGetName() override {
     32         return fName.c_str();
     33     }
     34 
     35     void onDelayedSetup() override {
     36         fBitmap.allocN32Pixels(200, 200);
     37         fBitmap.eraseARGB(255, 0, 255, 0);
     38     }
     39 
     40     void onDraw(int loops, SkCanvas* canvas) override {
     41         canvas->concat(fMatrix);
     42         for (int i = 0; i < loops; i++) {
     43             canvas->drawBitmap(fBitmap, 0, 0, &fPaint);
     44         }
     45     }
     46 
     47 private:
     48     SkPaint  fPaint;
     49     SkMatrix fMatrix;
     50     SkString fName;
     51     SkBitmap fBitmap;
     52 
     53     typedef Benchmark INHERITED;
     54 };
     55 
     56 DEF_BENCH( return new DrawBitmapAABench(false, SkMatrix::MakeScale(1), "ident"); )
     57 
     58 DEF_BENCH( return new DrawBitmapAABench(false, SkMatrix::MakeScale(1.17f), "scale"); )
     59 
     60 DEF_BENCH( return new DrawBitmapAABench(false, SkMatrix::MakeTrans(17.5f, 17.5f), "translate"); )
     61 
     62 DEF_BENCH(
     63     SkMatrix m;
     64     m.reset();
     65     m.preRotate(15);
     66     return new DrawBitmapAABench(false, m, "rotate");
     67 )
     68 
     69 DEF_BENCH( return new DrawBitmapAABench(true, SkMatrix::MakeScale(1), "ident"); )
     70 
     71 DEF_BENCH( return new DrawBitmapAABench(true, SkMatrix::MakeScale(1.17f), "scale"); )
     72 
     73 DEF_BENCH( return new DrawBitmapAABench(true, SkMatrix::MakeTrans(17.5f, 17.5f), "translate"); )
     74 
     75 DEF_BENCH(
     76     SkMatrix m;
     77     m.reset();
     78     m.preRotate(15);
     79     return new DrawBitmapAABench(true, m, "rotate");
     80 )
     81