1 /* 2 * Copyright 2013 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 "SkDraw.h" 13 #include "SkMatrix.h" 14 #include "SkPath.h" 15 #include "SkRasterClip.h" 16 17 class DrawPathBench : public SkBenchmark { 18 SkPaint fPaint; 19 SkString fName; 20 SkPath fPath; 21 SkRasterClip fRC; 22 SkBitmap fBitmap; 23 SkMatrix fIdentity; 24 SkDraw fDraw; 25 bool fDrawCoverage; 26 public: 27 DrawPathBench(bool drawCoverage) : fDrawCoverage(drawCoverage) { 28 fPaint.setAntiAlias(true); 29 fName.printf("draw_coverage_%s", drawCoverage ? "true" : "false"); 30 31 fPath.moveTo(0, 0); 32 fPath.quadTo(500, 0, 500, 500); 33 fPath.quadTo(250, 0, 0, 500); 34 35 fBitmap.setConfig(SkBitmap::kA8_Config, 500, 500); 36 fBitmap.allocPixels(); 37 38 fIdentity.setIdentity(); 39 fRC.setRect(fPath.getBounds().round()); 40 41 fDraw.fBitmap = &fBitmap; 42 fDraw.fMatrix = &fIdentity; 43 fDraw.fClip = &fRC.bwRgn(); 44 fDraw.fRC = &fRC; 45 } 46 47 protected: 48 virtual const char* onGetName() SK_OVERRIDE { 49 return fName.c_str(); 50 } 51 52 virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 53 if (fDrawCoverage) { 54 for (int i = 0; i < loops; ++i) { 55 fDraw.drawPathCoverage(fPath, fPaint); 56 } 57 } else { 58 for (int i = 0; i < loops; ++i) { 59 fDraw.drawPath(fPath, fPaint); 60 } 61 } 62 } 63 64 private: 65 typedef SkBenchmark INHERITED; 66 }; 67 68 /////////////////////////////////////////////////////////////////////////////// 69 70 DEF_BENCH( return new DrawPathBench(false) ) 71 DEF_BENCH( return new DrawPathBench(true) ) 72