Home | History | Annotate | Download | only in bench
      1 /*
      2  * Copyright 2012 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 "SkBitmap.h"
     10 #include "SkCanvas.h"
     11 #include "SkColorPriv.h"
     12 #include "SkPaint.h"
     13 #include "SkRandom.h"
     14 #include "SkShader.h"
     15 #include "SkString.h"
     16 #include "SkTArray.h"
     17 
     18 
     19 class LineBench : public Benchmark {
     20     SkScalar    fStrokeWidth;
     21     bool        fDoAA;
     22     SkString    fName;
     23     enum {
     24         PTS = 500,
     25     };
     26     SkPoint fPts[PTS];
     27 
     28 public:
     29     LineBench(SkScalar width, bool doAA)  {
     30         fStrokeWidth = width;
     31         fDoAA = doAA;
     32         fName.printf("lines_%g_%s", width, doAA ? "AA" : "BW");
     33 
     34         SkRandom rand;
     35         for (int i = 0; i < PTS; ++i) {
     36             fPts[i].set(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480);
     37         }
     38     }
     39 
     40 protected:
     41     const char* onGetName() override {
     42         return fName.c_str();
     43     }
     44 
     45     void onDraw(int loops, SkCanvas* canvas) override {
     46         SkPaint paint;
     47         this->setupPaint(&paint);
     48 
     49         paint.setStyle(SkPaint::kStroke_Style);
     50         paint.setAntiAlias(fDoAA);
     51         paint.setStrokeWidth(fStrokeWidth);
     52 
     53         for (int i = 0; i < loops; i++) {
     54             canvas->drawPoints(SkCanvas::kLines_PointMode, PTS, fPts, paint);
     55         }
     56     }
     57 
     58 private:
     59     typedef Benchmark INHERITED;
     60 };
     61 
     62 DEF_BENCH(return new LineBench(0,            false);)
     63 DEF_BENCH(return new LineBench(SK_Scalar1,   false);)
     64 DEF_BENCH(return new LineBench(0,            true);)
     65 DEF_BENCH(return new LineBench(SK_Scalar1/2, true);)
     66 DEF_BENCH(return new LineBench(SK_Scalar1,   true);)
     67