Home | History | Annotate | Download | only in bench
      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     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.allocPixels(SkImageInfo::MakeA8(500, 500));
     36 
     37         fIdentity.setIdentity();
     38         fRC.setRect(fPath.getBounds().round());
     39 
     40         fDraw.fBitmap   = &fBitmap;
     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(const 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