Home | History | Annotate | Download | only in bench
      1 /*
      2  * Copyright 2017 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 
     10 #if SK_SUPPORT_GPU
     11 
     12 #include "GrPathUtils.h"
     13 #include "SkGeometry.h"
     14 
     15 class CubicKLMBench : public Benchmark {
     16 public:
     17     CubicKLMBench(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1,
     18                   SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3)  {
     19         fPoints[0].set(x0, y0);
     20         fPoints[1].set(x1, y1);
     21         fPoints[2].set(x2, y2);
     22         fPoints[3].set(x3, y3);
     23 
     24         fName = "cubic_klm_";
     25         switch (SkClassifyCubic(fPoints)) {
     26             case SkCubicType::kSerpentine:
     27                 fName.append("serp");
     28                 break;
     29             case SkCubicType::kLoop:
     30                 fName.append("loop");
     31                 break;
     32             default:
     33                 SK_ABORT("Unexpected cubic type");
     34                 break;
     35         }
     36     }
     37 
     38     bool isSuitableFor(Backend backend) override {
     39         return backend == kNonRendering_Backend;
     40     }
     41 
     42     const char* onGetName() override {
     43         return fName.c_str();
     44     }
     45 
     46     void onDraw(int loops, SkCanvas*) override {
     47         SkPoint dst[10];
     48         SkMatrix klm;
     49         int loopIdx;
     50         for (int i = 0; i < loops * 50000; ++i) {
     51             GrPathUtils::chopCubicAtLoopIntersection(fPoints, dst, &klm, &loopIdx);
     52         }
     53     }
     54 
     55 private:
     56     SkPoint     fPoints[4];
     57     SkString    fName;
     58 
     59     typedef Benchmark INHERITED;
     60 };
     61 
     62 DEF_BENCH( return new CubicKLMBench(285.625f, 499.687f, 411.625f, 808.188f,
     63                                     1064.62f, 135.688f, 1042.63f, 585.187f); )
     64 DEF_BENCH( return new CubicKLMBench(635.625f, 614.687f, 171.625f, 236.188f,
     65                                     1064.62f, 135.688f, 516.625f, 570.187f); )
     66 
     67 #endif
     68