1 /* 2 * Copyright 2020 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 "bench/Benchmark.h" 9 #include "src/gpu/geometry/GrPathUtils.h" 10 11 class FindCubicConvex180Chops : public Benchmark { 12 public: FindCubicConvex180Chops(const std::array<SkPoint,4> & pts,const char * suffix)13 FindCubicConvex180Chops(const std::array<SkPoint,4>& pts, const char* suffix) : fPts(pts) { 14 fName.printf("GrPathUtils_findCubicConvex180Chops%s", suffix); 15 } 16 17 private: onGetName()18 const char* onGetName() override { return fName.c_str(); } isSuitableFor(Backend backend)19 bool isSuitableFor(Backend backend) final { return backend == kNonRendering_Backend; } onDraw(int loops,SkCanvas *)20 void onDraw(int loops, SkCanvas*) final { 21 float T[2] = {0}; 22 bool areCusps; 23 int iters = 50000 * loops; 24 for (int i = 0; i < iters; ++i) { 25 int count = GrPathUtils::findCubicConvex180Chops(fPts.data(), T, &areCusps); 26 if (T[0] == 200.7f) { 27 // This will never happen. Pretend to use the result to keep the compiler honest. 28 SkDebugf("%i%f%f", count, T[0], T[1]); 29 } 30 } 31 } 32 33 SkString fName; 34 std::array<SkPoint,4> fPts; 35 }; 36 37 DEF_BENCH(return new FindCubicConvex180Chops({{{0,0}, {100,0}, {50,100}, {100,100}}}, "_inflect1");) 38 DEF_BENCH(return new FindCubicConvex180Chops({{{0,0}, {50,0}, {100,50}, {100,100}}}, "_loop");) 39