LineBench.cpp revision e0e7cfe44bb9d66d76120a79e5275c294bacaa22
11ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com/*
21ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com * Copyright 2012 Google Inc.
31ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com *
41ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com * Use of this source code is governed by a BSD-style license that can be
51ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com * found in the LICENSE file.
61ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com */
71ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
81ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com#include "SkBenchmark.h"
91ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com#include "SkBitmap.h"
101ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com#include "SkCanvas.h"
111ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com#include "SkColorPriv.h"
121ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com#include "SkPaint.h"
131ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com#include "SkRandom.h"
141ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com#include "SkShader.h"
151ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com#include "SkString.h"
161ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com#include "SkTArray.h"
171ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
181ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
191ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.comclass LineBench : public SkBenchmark {
201ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    SkScalar    fStrokeWidth;
211ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    bool        fDoAA;
221ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    SkString    fName;
231ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    enum {
241ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        PTS = 500,
251ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        N = SkBENCHLOOP(10)
261ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    };
271ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    SkPoint fPts[PTS];
281ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
291ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.compublic:
301ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    LineBench(void* param, SkScalar width, bool doAA) : INHERITED(param) {
311ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        fStrokeWidth = width;
321ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        fDoAA = doAA;
331ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        fName.printf("lines_%g_%s", width, doAA ? "AA" : "BW");
341ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
35e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
361ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        for (int i = 0; i < PTS; ++i) {
371ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com            fPts[i].set(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480);
381ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        }
391ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    }
401ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
411ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.comprotected:
421ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    virtual const char* onGetName() SK_OVERRIDE {
431ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        return fName.c_str();
441ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    }
451ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
461ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
471ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        SkPaint paint;
481ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        this->setupPaint(&paint);
491ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
501ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        paint.setStyle(SkPaint::kStroke_Style);
511ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        paint.setAntiAlias(fDoAA);
521ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        paint.setStrokeWidth(fStrokeWidth);
531ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
541ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        for (int i = 0; i < N; i++) {
551ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com            canvas->drawPoints(SkCanvas::kLines_PointMode, PTS, fPts, paint);
561ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com        }
571ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    }
581ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
591ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.comprivate:
601ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com    typedef SkBenchmark INHERITED;
611ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com};
621ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.com
631ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.comDEF_BENCH(return new LineBench(p, 0,            false);)
641ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.comDEF_BENCH(return new LineBench(p, SK_Scalar1,   false);)
651ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.comDEF_BENCH(return new LineBench(p, 0,            true);)
661ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.comDEF_BENCH(return new LineBench(p, SK_Scalar1/2, true);)
671ca015bd5911987ab10fa81f168a5cf3b582f2ddreed@google.comDEF_BENCH(return new LineBench(p, SK_Scalar1,   true);)
68