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 "SkAutoPixmapStorage.h"
     10 #include "SkBitmap.h"
     11 #include "SkCanvas.h"
     12 #include "SkColorPriv.h"
     13 #include "SkDraw.h"
     14 #include "SkMatrix.h"
     15 #include "SkPath.h"
     16 #include "SkRasterClip.h"
     17 
     18 class DrawPathBench : public Benchmark {
     19     SkPaint     fPaint;
     20     SkString    fName;
     21     SkPath      fPath;
     22     SkRasterClip fRC;
     23     SkAutoPixmapStorage fPixmap;
     24     SkMatrix    fIdentity;
     25     SkDraw      fDraw;
     26     bool        fDrawCoverage;
     27 public:
     28     DrawPathBench(bool drawCoverage) : fDrawCoverage(drawCoverage) {
     29         fPaint.setAntiAlias(true);
     30         fName.printf("draw_coverage_%s", drawCoverage ? "true" : "false");
     31 
     32         fPath.moveTo(0, 0);
     33         fPath.quadTo(500, 0, 500, 500);
     34         fPath.quadTo(250, 0, 0, 500);
     35 
     36         fPixmap.alloc(SkImageInfo::MakeA8(500, 500));
     37         if (!drawCoverage) {
     38             // drawPathCoverage() goes out of its way to work fine with an uninitialized
     39             // dst buffer, even in "SrcOver" mode, but ordinary drawing sure doesn't.
     40             fPixmap.erase(0);
     41         }
     42 
     43         fIdentity.setIdentity();
     44         fRC.setRect(fPath.getBounds().round());
     45 
     46         fDraw.fDst      = fPixmap;
     47         fDraw.fMatrix   = &fIdentity;
     48         fDraw.fRC       = &fRC;
     49     }
     50 
     51 protected:
     52     const char* onGetName() override {
     53         return fName.c_str();
     54     }
     55 
     56     void onDraw(int loops, SkCanvas* canvas) override {
     57         if (fDrawCoverage) {
     58             for (int i = 0; i < loops; ++i) {
     59                 fDraw.drawPathCoverage(fPath, fPaint);
     60             }
     61         } else {
     62             for (int i = 0; i < loops; ++i) {
     63                 fDraw.drawPath(fPath, fPaint);
     64             }
     65         }
     66     }
     67 
     68 private:
     69     typedef Benchmark INHERITED;
     70 };
     71 
     72 ///////////////////////////////////////////////////////////////////////////////
     73 
     74 DEF_BENCH( return new DrawPathBench(false) )
     75 DEF_BENCH( return new DrawPathBench(true) )
     76