1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2020 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "bench/Benchmark.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/tessellate/Tessellation.h" 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker class FindCubicConvex180ChopsBench : public Benchmark { 12*c8dee2aaSAndroid Build Coastguard Worker public: FindCubicConvex180ChopsBench(const std::array<SkPoint,4> & pts,const char * suffix)13*c8dee2aaSAndroid Build Coastguard Worker FindCubicConvex180ChopsBench(const std::array<SkPoint,4>& pts, const char* suffix) : fPts(pts) { 14*c8dee2aaSAndroid Build Coastguard Worker fName.printf("FindCubicConvex180Chops%s", suffix); 15*c8dee2aaSAndroid Build Coastguard Worker } 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker private: onGetName()18*c8dee2aaSAndroid Build Coastguard Worker const char* onGetName() override { return fName.c_str(); } isSuitableFor(Backend backend)19*c8dee2aaSAndroid Build Coastguard Worker bool isSuitableFor(Backend backend) final { return backend == Backend::kNonRendering; } onDraw(int loops,SkCanvas *)20*c8dee2aaSAndroid Build Coastguard Worker void onDraw(int loops, SkCanvas*) final { 21*c8dee2aaSAndroid Build Coastguard Worker float T[2] = {0}; 22*c8dee2aaSAndroid Build Coastguard Worker bool areCusps; 23*c8dee2aaSAndroid Build Coastguard Worker int iters = 50000 * loops; 24*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < iters; ++i) { 25*c8dee2aaSAndroid Build Coastguard Worker int count = skgpu::tess::FindCubicConvex180Chops(fPts.data(), T, &areCusps); 26*c8dee2aaSAndroid Build Coastguard Worker if (T[0] == 200.7f) { 27*c8dee2aaSAndroid Build Coastguard Worker // This will never happen. Pretend to use the result to keep the compiler honest. 28*c8dee2aaSAndroid Build Coastguard Worker SkDebugf("%i%f%f", count, T[0], T[1]); 29*c8dee2aaSAndroid Build Coastguard Worker } 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker } 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker SkString fName; 34*c8dee2aaSAndroid Build Coastguard Worker std::array<SkPoint,4> fPts; 35*c8dee2aaSAndroid Build Coastguard Worker }; 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new FindCubicConvex180ChopsBench({{{0,0}, {100,0}, {50,100}, {100,100}}}, 38*c8dee2aaSAndroid Build Coastguard Worker "_inflect1");) 39*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new FindCubicConvex180ChopsBench({{{0,0}, {50,0}, {100,50}, {100,100}}}, 40*c8dee2aaSAndroid Build Coastguard Worker "_loop");) 41