blob: feaae2b267a8f7694341d7bf5d36b6d20f120fa3 [file] [log] [blame]
reed@google.com1ca015b2012-10-25 17:32:10 +00001/*
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 "SkBenchmark.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 SkBenchmark {
20 SkScalar fStrokeWidth;
21 bool fDoAA;
22 SkString fName;
23 enum {
24 PTS = 500,
25 N = SkBENCHLOOP(10)
26 };
27 SkPoint fPts[PTS];
28
29public:
30 LineBench(void* param, SkScalar width, bool doAA) : INHERITED(param) {
31 fStrokeWidth = width;
32 fDoAA = doAA;
33 fName.printf("lines_%g_%s", width, doAA ? "AA" : "BW");
34
35 SkRandom rand;
36 for (int i = 0; i < PTS; ++i) {
37 fPts[i].set(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480);
38 }
39 }
40
41protected:
42 virtual const char* onGetName() SK_OVERRIDE {
43 return fName.c_str();
44 }
45
46 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
47 SkPaint paint;
48 this->setupPaint(&paint);
49
50 paint.setStyle(SkPaint::kStroke_Style);
51 paint.setAntiAlias(fDoAA);
52 paint.setStrokeWidth(fStrokeWidth);
53
54 for (int i = 0; i < N; i++) {
55 canvas->drawPoints(SkCanvas::kLines_PointMode, PTS, fPts, paint);
56 }
57 }
58
59private:
60 typedef SkBenchmark INHERITED;
61};
62
63DEF_BENCH(return new LineBench(p, 0, false);)
64DEF_BENCH(return new LineBench(p, SK_Scalar1, false);)
65DEF_BENCH(return new LineBench(p, 0, true);)
66DEF_BENCH(return new LineBench(p, SK_Scalar1/2, true);)
67DEF_BENCH(return new LineBench(p, SK_Scalar1, true);)