| /* |
| * Copyright 2012 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "Benchmark.h" |
| #include "SkBitmap.h" |
| #include "SkCanvas.h" |
| #include "SkColorPriv.h" |
| #include "SkPaint.h" |
| #include "SkRandom.h" |
| #include "SkShader.h" |
| #include "SkString.h" |
| #include "SkTArray.h" |
| |
| |
| class LineBench : public Benchmark { |
| SkScalar fStrokeWidth; |
| bool fDoAA; |
| SkString fName; |
| enum { |
| PTS = 500, |
| }; |
| SkPoint fPts[PTS]; |
| |
| public: |
| LineBench(SkScalar width, bool doAA) { |
| fStrokeWidth = width; |
| fDoAA = doAA; |
| fName.printf("lines_%g_%s", width, doAA ? "AA" : "BW"); |
| |
| SkRandom rand; |
| for (int i = 0; i < PTS; ++i) { |
| fPts[i].set(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480); |
| } |
| } |
| |
| protected: |
| const char* onGetName() override { |
| return fName.c_str(); |
| } |
| |
| void onDraw(int loops, SkCanvas* canvas) override { |
| SkPaint paint; |
| this->setupPaint(&paint); |
| |
| paint.setStyle(SkPaint::kStroke_Style); |
| paint.setAntiAlias(fDoAA); |
| paint.setStrokeWidth(fStrokeWidth); |
| |
| for (int i = 0; i < loops; i++) { |
| canvas->drawPoints(SkCanvas::kLines_PointMode, PTS, fPts, paint); |
| } |
| } |
| |
| private: |
| typedef Benchmark INHERITED; |
| }; |
| |
| DEF_BENCH(return new LineBench(0, false);) |
| DEF_BENCH(return new LineBench(SK_Scalar1, false);) |
| DEF_BENCH(return new LineBench(0, true);) |
| DEF_BENCH(return new LineBench(SK_Scalar1/2, true);) |
| DEF_BENCH(return new LineBench(SK_Scalar1, true);) |