• 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 "bench/Benchmark.h"
8  #include "include/core/SkCanvas.h"
9  #include "include/core/SkImage.h"
10  #include "include/core/SkMatrix.h"
11  #include "include/core/SkPaint.h"
12  #include "include/core/SkString.h"
13  #include "include/core/SkSurface.h"
14  
15  /**
16   * This bench measures the rendering time of SkCanvas::drawBitmap with different anti-aliasing /
17   * matrix combinations.
18   */
19  
20  class DrawBitmapAABench : public Benchmark {
21  public:
DrawBitmapAABench(bool doAA,const SkMatrix & matrix,const char name[])22      DrawBitmapAABench(bool doAA, const SkMatrix& matrix, const char name[])
23          : fMatrix(matrix)
24          , fName("draw_bitmap_") {
25  
26          fPaint.setAntiAlias(doAA);
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          auto surf = SkSurface::MakeRasterN32Premul(200, 200);
37          surf->getCanvas()->clear(0xFF00FF00);
38          fImage = surf->makeImageSnapshot();
39      }
40  
onDraw(int loops,SkCanvas * canvas)41      void onDraw(int loops, SkCanvas* canvas) override {
42          SkSamplingOptions sampling(SkFilterMode::kLinear);
43          canvas->concat(fMatrix);
44          for (int i = 0; i < loops; i++) {
45              canvas->drawImage(fImage.get(), 0, 0, sampling, &fPaint);
46          }
47      }
48  
49  private:
50      SkPaint  fPaint;
51      SkMatrix fMatrix;
52      SkString fName;
53      sk_sp<SkImage> fImage;
54  
55      using INHERITED = Benchmark;
56  };
57  
58  DEF_BENCH( return new DrawBitmapAABench(false, SkMatrix::I(), "ident"); )
59  
60  DEF_BENCH( return new DrawBitmapAABench(false, SkMatrix::Scale(1.17f, 1.17f), "scale"); )
61  
62  DEF_BENCH( return new DrawBitmapAABench(false, SkMatrix::Translate(17.5f, 17.5f), "translate"); )
63  
64  DEF_BENCH(
65      SkMatrix m;
66      m.reset();
67      m.preRotate(15);
68      return new DrawBitmapAABench(false, m, "rotate");
69  )
70  
71  DEF_BENCH( return new DrawBitmapAABench(true, SkMatrix::I(), "ident"); )
72  
73  DEF_BENCH( return new DrawBitmapAABench(true, SkMatrix::Scale(1.17f, 1.17f), "scale"); )
74  
75  DEF_BENCH( return new DrawBitmapAABench(true, SkMatrix::Translate(17.5f, 17.5f), "translate"); )
76  
77  DEF_BENCH(
78      SkMatrix m;
79      m.reset();
80      m.preRotate(15);
81      return new DrawBitmapAABench(true, m, "rotate");
82  )
83