• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
DrawBitmapAABench(bool doAA,const SkMatrix & matrix,const char name[])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:
onGetName()31     const char* onGetName() override {
32         return fName.c_str();
33     }
34 
onDelayedSetup()35     void onDelayedSetup() override {
36         fBitmap.allocN32Pixels(200, 200);
37         fBitmap.eraseARGB(255, 0, 255, 0);
38     }
39 
onDraw(int loops,SkCanvas * canvas)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