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