1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2012 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "bench/Benchmark.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkBitmap.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColorPriv.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkShader.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTArray.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkRandom.h" 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker class LineBench : public Benchmark { 20*c8dee2aaSAndroid Build Coastguard Worker SkScalar fStrokeWidth; 21*c8dee2aaSAndroid Build Coastguard Worker bool fDoAA; 22*c8dee2aaSAndroid Build Coastguard Worker SkString fName; 23*c8dee2aaSAndroid Build Coastguard Worker enum { 24*c8dee2aaSAndroid Build Coastguard Worker PTS = 500, 25*c8dee2aaSAndroid Build Coastguard Worker }; 26*c8dee2aaSAndroid Build Coastguard Worker SkPoint fPts[PTS]; 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker public: LineBench(SkScalar width,bool doAA)29*c8dee2aaSAndroid Build Coastguard Worker LineBench(SkScalar width, bool doAA) { 30*c8dee2aaSAndroid Build Coastguard Worker fStrokeWidth = width; 31*c8dee2aaSAndroid Build Coastguard Worker fDoAA = doAA; 32*c8dee2aaSAndroid Build Coastguard Worker fName.printf("lines_%g_%s", width, doAA ? "AA" : "BW"); 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker SkRandom rand; 35*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < PTS; ++i) { 36*c8dee2aaSAndroid Build Coastguard Worker fPts[i].set(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480); 37*c8dee2aaSAndroid Build Coastguard Worker } 38*c8dee2aaSAndroid Build Coastguard Worker } 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker protected: onGetName()41*c8dee2aaSAndroid Build Coastguard Worker const char* onGetName() override { 42*c8dee2aaSAndroid Build Coastguard Worker return fName.c_str(); 43*c8dee2aaSAndroid Build Coastguard Worker } 44*c8dee2aaSAndroid Build Coastguard Worker onDraw(int loops,SkCanvas * canvas)45*c8dee2aaSAndroid Build Coastguard Worker void onDraw(int loops, SkCanvas* canvas) override { 46*c8dee2aaSAndroid Build Coastguard Worker SkPaint paint; 47*c8dee2aaSAndroid Build Coastguard Worker this->setupPaint(&paint); 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker paint.setStyle(SkPaint::kStroke_Style); 50*c8dee2aaSAndroid Build Coastguard Worker paint.setAntiAlias(fDoAA); 51*c8dee2aaSAndroid Build Coastguard Worker paint.setStrokeWidth(fStrokeWidth); 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < loops; i++) { 54*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPoints(SkCanvas::kLines_PointMode, PTS, fPts, paint); 55*c8dee2aaSAndroid Build Coastguard Worker } 56*c8dee2aaSAndroid Build Coastguard Worker } 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker private: 59*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = Benchmark; 60*c8dee2aaSAndroid Build Coastguard Worker }; 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new LineBench(0, false);) 63*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new LineBench(SK_Scalar1, false);) 64*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new LineBench(0, true);) 65*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new LineBench(SK_Scalar1/2, true);) 66*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new LineBench(SK_Scalar1, true);) 67