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
19class LineBench : public Benchmark {
20    SkScalar    fStrokeWidth;
21    bool        fDoAA;
22    SkString    fName;
23    enum {
24        PTS = 500,
25    };
26    SkPoint fPts[PTS];
27
28public:
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
40protected:
41    virtual const char* onGetName() SK_OVERRIDE {
42        return fName.c_str();
43    }
44
45    virtual void onDraw(const int loops, SkCanvas* canvas) SK_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
58private:
59    typedef Benchmark INHERITED;
60};
61
62DEF_BENCH(return new LineBench(0,            false);)
63DEF_BENCH(return new LineBench(SK_Scalar1,   false);)
64DEF_BENCH(return new LineBench(0,            true);)
65DEF_BENCH(return new LineBench(SK_Scalar1/2, true);)
66DEF_BENCH(return new LineBench(SK_Scalar1,   true);)
67