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 "SkCanvas.h" 10 #include "SkMaskFilter.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: 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, 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: 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 typedef BlurRectsBench INHERITED; 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 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);) 81