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 "Benchmark.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 Benchmark { 18 SkPaint fPaint; 19 SkString fName; 20 SkPath fPath; 21 SkRasterClip fRC; 22 SkAutoPixmapStorage fPixmap; 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 fPixmap.alloc(SkImageInfo::MakeA8(500, 500)); 36 37 fIdentity.setIdentity(); 38 fRC.setRect(fPath.getBounds().round()); 39 40 fDraw.fDst = fPixmap; 41 fDraw.fMatrix = &fIdentity; 42 fDraw.fClip = &fRC.bwRgn(); 43 fDraw.fRC = &fRC; 44 } 45 46 protected: 47 const char* onGetName() override { 48 return fName.c_str(); 49 } 50 51 void onDraw(int loops, SkCanvas* canvas) override { 52 if (fDrawCoverage) { 53 for (int i = 0; i < loops; ++i) { 54 fDraw.drawPathCoverage(fPath, fPaint); 55 } 56 } else { 57 for (int i = 0; i < loops; ++i) { 58 fDraw.drawPath(fPath, fPaint); 59 } 60 } 61 } 62 63 private: 64 typedef Benchmark INHERITED; 65 }; 66 67 /////////////////////////////////////////////////////////////////////////////// 68 69 DEF_BENCH( return new DrawPathBench(false) ) 70 DEF_BENCH( return new DrawPathBench(true) ) 71