• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright 2014 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 "bench/Benchmark.h"
9 #include "include/core/SkCanvas.h"
10 #include "include/core/SkMaskFilter.h"
11 #include "include/core/SkPaint.h"
12 #include "include/core/SkPath.h"
13 #include "include/core/SkRect.h"
14 #include "include/core/SkString.h"
15 
16 class BlurRectsBench : public Benchmark {
17 public:
BlurRectsBench(SkRect outer,SkRect inner,SkScalar radius)18     BlurRectsBench(SkRect outer, SkRect inner, SkScalar radius) {
19         fRadius = radius;
20         fOuter = outer;
21         fInner = inner;
22     }
23 
onGetName()24     const char* onGetName() override {
25         return fName.c_str();
26     }
27 
setName(const SkString & name)28     void setName(const SkString& name) {
29         fName = name;
30     }
31 
onDraw(int loops,SkCanvas * canvas)32     void onDraw(int loops, SkCanvas* canvas) override {
33         SkPaint paint;
34         paint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, fRadius));
35 
36         SkPath path;
37         path.addRect(fOuter, SkPathDirection::kCW);
38         path.addRect(fInner, SkPathDirection::kCW);
39 
40         for (int i = 0; i < loops; i++) {
41             canvas->drawPath(path, paint);
42         }
43     }
44 
45 private:
46     SkString    fName;
47     SkRect      fOuter;
48     SkRect      fInner;
49     SkScalar    fRadius;
50 
51     using INHERITED =     Benchmark;
52 };
53 
54 class BlurRectsNinePatchBench: public BlurRectsBench {
55 public:
BlurRectsNinePatchBench(SkRect outer,SkRect inner,SkScalar radius)56     BlurRectsNinePatchBench(SkRect outer, SkRect inner, SkScalar radius)
57         : INHERITED(outer, inner, radius) {
58         this->setName(SkString("blurrectsninepatch"));
59     }
60 private:
61     using INHERITED = BlurRectsBench;
62 };
63 
64 class BlurRectsNonNinePatchBench: public BlurRectsBench {
65 public:
BlurRectsNonNinePatchBench(SkRect outer,SkRect inner,SkScalar radius)66     BlurRectsNonNinePatchBench(SkRect outer, SkRect inner, SkScalar radius)
67         : INHERITED(outer, inner, radius) {
68         SkString name;
69         this->setName(SkString("blurrectsnonninepatch"));
70     }
71 private:
72     using INHERITED = BlurRectsBench;
73 };
74 
75 DEF_BENCH(return new BlurRectsNinePatchBench(SkRect::MakeXYWH(10, 10, 100, 100),
76                                              SkRect::MakeXYWH(20, 20, 60, 60),
77                                              2.3f);)
78 DEF_BENCH(return new BlurRectsNonNinePatchBench(SkRect::MakeXYWH(10, 10, 100, 100),
79                                                 SkRect::MakeXYWH(50, 50, 10, 10),
80                                                 4.3f);)
81