Home | History | Annotate | Download | only in bench
      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);)
     81