• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "SkBenchmark.h"
9 #include "SkBitmap.h"
10 #include "SkCanvas.h"
11 #include "SkColorPriv.h"
12 #include "SkDraw.h"
13 #include "SkMatrix.h"
14 #include "SkPath.h"
15 #include "SkRasterClip.h"
16 
17 class DrawPathBench : public SkBenchmark {
18     SkPaint     fPaint;
19     SkString    fName;
20     SkPath      fPath;
21     SkRasterClip fRC;
22     SkBitmap    fBitmap;
23     SkMatrix    fIdentity;
24     SkDraw      fDraw;
25     bool        fDrawCoverage;
26 public:
DrawPathBench(bool drawCoverage)27     DrawPathBench(bool drawCoverage) : fDrawCoverage(drawCoverage) {
28         fPaint.setAntiAlias(true);
29         fName.printf("draw_coverage_%s", drawCoverage ? "true" : "false");
30 
31         fPath.moveTo(0, 0);
32         fPath.quadTo(500, 0, 500, 500);
33         fPath.quadTo(250, 0, 0, 500);
34 
35         fBitmap.setConfig(SkBitmap::kA8_Config, 500, 500);
36         fBitmap.allocPixels();
37 
38         fIdentity.setIdentity();
39         fRC.setRect(fPath.getBounds().round());
40 
41         fDraw.fBitmap   = &fBitmap;
42         fDraw.fMatrix   = &fIdentity;
43         fDraw.fClip     = &fRC.bwRgn();
44         fDraw.fRC       = &fRC;
45     }
46 
47 protected:
onGetName()48     virtual const char* onGetName() SK_OVERRIDE {
49         return fName.c_str();
50     }
51 
onDraw(const int loops,SkCanvas * canvas)52     virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
53         if (fDrawCoverage) {
54             for (int i = 0; i < loops; ++i) {
55                 fDraw.drawPathCoverage(fPath, fPaint);
56             }
57         } else {
58             for (int i = 0; i < loops; ++i) {
59                 fDraw.drawPath(fPath, fPaint);
60             }
61         }
62     }
63 
64 private:
65     typedef SkBenchmark INHERITED;
66 };
67 
68 ///////////////////////////////////////////////////////////////////////////////
69 
70 DEF_BENCH( return new DrawPathBench(false) )
71 DEF_BENCH( return new DrawPathBench(true) )
72