test (and fix) clip_restriction in canvas
[platform/upstream/libSkiaSharp.git] / bench / BlurRectsBench.cpp
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 "Benchmark.h"
9 #include "SkBlurMaskFilter.h"
10 #include "SkCanvas.h"
11 #include "SkPaint.h"
12 #include "SkPath.h"
13 #include "SkRect.h"
14 #include "SkString.h"
15
16 class BlurRectsBench : public Benchmark {
17 public:
18     BlurRectsBench(SkRect outer, SkRect inner, SkScalar radius) {
19         fRadius = radius;
20         fOuter = outer;
21         fInner = inner;
22     }
23
24     const char* onGetName() override {
25         return fName.c_str();
26     }
27
28     void setName(const SkString& name) {
29         fName = name;
30     }
31
32     void onDraw(int loops, SkCanvas* canvas) override {
33         SkPaint paint;
34         paint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, fRadius));
35
36         SkPath path;
37         path.addRect(fOuter, SkPath::kCW_Direction);
38         path.addRect(fInner, SkPath::kCW_Direction);
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     typedef     Benchmark INHERITED;
52 };
53
54 class BlurRectsNinePatchBench: public BlurRectsBench {
55 public:
56     BlurRectsNinePatchBench(SkRect outer, SkRect inner, SkScalar radius)
57         : INHERITED(outer, inner, radius) {
58         this->setName(SkString("blurrectsninepatch"));
59     }
60 private:
61     typedef BlurRectsBench INHERITED;
62 };
63
64 class BlurRectsNonNinePatchBench: public BlurRectsBench {
65 public:
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     typedef BlurRectsBench INHERITED;
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);)