1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2018 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 "include/core/SkPoint.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRect.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTDArray.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTemplates.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/utils/SkPolyUtils.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker using namespace skia_private; 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SK_ENABLE_OPTIMIZE_SIZE) 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker class PolyUtilsBench : public Benchmark { 20*c8dee2aaSAndroid Build Coastguard Worker public: 21*c8dee2aaSAndroid Build Coastguard Worker // Evaluate SkTriangulateSimplePolygon's performance (via derived classes) on: 22*c8dee2aaSAndroid Build Coastguard Worker // a non-self-intersecting star, a circle of tiny line segments and a self-intersecting star 23*c8dee2aaSAndroid Build Coastguard Worker enum class Type { kConvexCheck, kSimpleCheck, kInsetConvex, kOffsetSimple, kTessellateSimple }; 24*c8dee2aaSAndroid Build Coastguard Worker PolyUtilsBench(Type type)25*c8dee2aaSAndroid Build Coastguard Worker PolyUtilsBench(Type type) : fType(type) {} 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker virtual void appendName(SkString*) = 0; 28*c8dee2aaSAndroid Build Coastguard Worker virtual void makePoly(SkTDArray<SkPoint>* poly) = 0; complexity()29*c8dee2aaSAndroid Build Coastguard Worker virtual int complexity() { return 0; } 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker protected: onGetName()32*c8dee2aaSAndroid Build Coastguard Worker const char* onGetName() override { 33*c8dee2aaSAndroid Build Coastguard Worker fName = "poly_utils_"; 34*c8dee2aaSAndroid Build Coastguard Worker this->appendName(&fName); 35*c8dee2aaSAndroid Build Coastguard Worker switch (fType) { 36*c8dee2aaSAndroid Build Coastguard Worker case Type::kConvexCheck: 37*c8dee2aaSAndroid Build Coastguard Worker fName.append("_c"); 38*c8dee2aaSAndroid Build Coastguard Worker break; 39*c8dee2aaSAndroid Build Coastguard Worker case Type::kSimpleCheck: 40*c8dee2aaSAndroid Build Coastguard Worker fName.append("_s"); 41*c8dee2aaSAndroid Build Coastguard Worker break; 42*c8dee2aaSAndroid Build Coastguard Worker case Type::kInsetConvex: 43*c8dee2aaSAndroid Build Coastguard Worker fName.append("_i"); 44*c8dee2aaSAndroid Build Coastguard Worker break; 45*c8dee2aaSAndroid Build Coastguard Worker case Type::kOffsetSimple: 46*c8dee2aaSAndroid Build Coastguard Worker fName.append("_o"); 47*c8dee2aaSAndroid Build Coastguard Worker break; 48*c8dee2aaSAndroid Build Coastguard Worker case Type::kTessellateSimple: 49*c8dee2aaSAndroid Build Coastguard Worker fName.append("_t"); 50*c8dee2aaSAndroid Build Coastguard Worker break; 51*c8dee2aaSAndroid Build Coastguard Worker } 52*c8dee2aaSAndroid Build Coastguard Worker return fName.c_str(); 53*c8dee2aaSAndroid Build Coastguard Worker } 54*c8dee2aaSAndroid Build Coastguard Worker onDraw(int loops,SkCanvas * canvas)55*c8dee2aaSAndroid Build Coastguard Worker void onDraw(int loops, SkCanvas* canvas) override { 56*c8dee2aaSAndroid Build Coastguard Worker SkTDArray<SkPoint> poly; 57*c8dee2aaSAndroid Build Coastguard Worker this->makePoly(&poly); 58*c8dee2aaSAndroid Build Coastguard Worker switch (fType) { 59*c8dee2aaSAndroid Build Coastguard Worker case Type::kConvexCheck: 60*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < loops; i++) { 61*c8dee2aaSAndroid Build Coastguard Worker (void)SkIsConvexPolygon(poly.begin(), poly.size()); 62*c8dee2aaSAndroid Build Coastguard Worker } 63*c8dee2aaSAndroid Build Coastguard Worker break; 64*c8dee2aaSAndroid Build Coastguard Worker case Type::kSimpleCheck: 65*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < loops; i++) { 66*c8dee2aaSAndroid Build Coastguard Worker (void)SkIsSimplePolygon(poly.begin(), poly.size()); 67*c8dee2aaSAndroid Build Coastguard Worker } 68*c8dee2aaSAndroid Build Coastguard Worker break; 69*c8dee2aaSAndroid Build Coastguard Worker case Type::kInsetConvex: 70*c8dee2aaSAndroid Build Coastguard Worker if (SkIsConvexPolygon(poly.begin(), poly.size())) { 71*c8dee2aaSAndroid Build Coastguard Worker SkTDArray<SkPoint> result; 72*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < loops; i++) { 73*c8dee2aaSAndroid Build Coastguard Worker (void)SkInsetConvexPolygon(poly.begin(), poly.size(), 10, &result); 74*c8dee2aaSAndroid Build Coastguard Worker (void)SkInsetConvexPolygon(poly.begin(), poly.size(), 40, &result); 75*c8dee2aaSAndroid Build Coastguard Worker } 76*c8dee2aaSAndroid Build Coastguard Worker } 77*c8dee2aaSAndroid Build Coastguard Worker break; 78*c8dee2aaSAndroid Build Coastguard Worker case Type::kOffsetSimple: 79*c8dee2aaSAndroid Build Coastguard Worker if (SkIsSimplePolygon(poly.begin(), poly.size())) { 80*c8dee2aaSAndroid Build Coastguard Worker SkTDArray<SkPoint> result; 81*c8dee2aaSAndroid Build Coastguard Worker SkRect bounds; 82*c8dee2aaSAndroid Build Coastguard Worker bounds.setBounds(poly.begin(), poly.size()); 83*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < loops; i++) { 84*c8dee2aaSAndroid Build Coastguard Worker (void)SkOffsetSimplePolygon(poly.begin(), poly.size(), bounds, 10, 85*c8dee2aaSAndroid Build Coastguard Worker &result); 86*c8dee2aaSAndroid Build Coastguard Worker (void)SkOffsetSimplePolygon(poly.begin(), poly.size(), bounds, -10, 87*c8dee2aaSAndroid Build Coastguard Worker &result); 88*c8dee2aaSAndroid Build Coastguard Worker } 89*c8dee2aaSAndroid Build Coastguard Worker } 90*c8dee2aaSAndroid Build Coastguard Worker break; 91*c8dee2aaSAndroid Build Coastguard Worker case Type::kTessellateSimple: 92*c8dee2aaSAndroid Build Coastguard Worker if (SkIsSimplePolygon(poly.begin(), poly.size())) { 93*c8dee2aaSAndroid Build Coastguard Worker AutoSTMalloc<64, uint16_t> indexMap(poly.size()); 94*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < poly.size(); ++i) { 95*c8dee2aaSAndroid Build Coastguard Worker indexMap[i] = i; 96*c8dee2aaSAndroid Build Coastguard Worker } 97*c8dee2aaSAndroid Build Coastguard Worker SkTDArray<uint16_t> triangleIndices; 98*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < loops; i++) { 99*c8dee2aaSAndroid Build Coastguard Worker SkTriangulateSimplePolygon(poly.begin(), indexMap, poly.size(), 100*c8dee2aaSAndroid Build Coastguard Worker &triangleIndices); 101*c8dee2aaSAndroid Build Coastguard Worker } 102*c8dee2aaSAndroid Build Coastguard Worker } 103*c8dee2aaSAndroid Build Coastguard Worker break; 104*c8dee2aaSAndroid Build Coastguard Worker } 105*c8dee2aaSAndroid Build Coastguard Worker } 106*c8dee2aaSAndroid Build Coastguard Worker 107*c8dee2aaSAndroid Build Coastguard Worker private: 108*c8dee2aaSAndroid Build Coastguard Worker SkString fName; 109*c8dee2aaSAndroid Build Coastguard Worker Type fType; 110*c8dee2aaSAndroid Build Coastguard Worker 111*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = Benchmark; 112*c8dee2aaSAndroid Build Coastguard Worker }; 113*c8dee2aaSAndroid Build Coastguard Worker 114*c8dee2aaSAndroid Build Coastguard Worker class StarPolyUtilsBench : public PolyUtilsBench { 115*c8dee2aaSAndroid Build Coastguard Worker public: StarPolyUtilsBench(PolyUtilsBench::Type type)116*c8dee2aaSAndroid Build Coastguard Worker StarPolyUtilsBench(PolyUtilsBench::Type type) : INHERITED(type) {} 117*c8dee2aaSAndroid Build Coastguard Worker appendName(SkString * name)118*c8dee2aaSAndroid Build Coastguard Worker void appendName(SkString* name) override { 119*c8dee2aaSAndroid Build Coastguard Worker name->append("star"); 120*c8dee2aaSAndroid Build Coastguard Worker } makePoly(SkTDArray<SkPoint> * poly)121*c8dee2aaSAndroid Build Coastguard Worker void makePoly(SkTDArray<SkPoint>* poly) override { 122*c8dee2aaSAndroid Build Coastguard Worker // create non-intersecting star 123*c8dee2aaSAndroid Build Coastguard Worker const SkScalar c = SkIntToScalar(45); 124*c8dee2aaSAndroid Build Coastguard Worker const SkScalar r1 = SkIntToScalar(20); 125*c8dee2aaSAndroid Build Coastguard Worker const SkScalar r2 = SkIntToScalar(3); 126*c8dee2aaSAndroid Build Coastguard Worker const int n = 500; 127*c8dee2aaSAndroid Build Coastguard Worker SkScalar rad = 0; 128*c8dee2aaSAndroid Build Coastguard Worker const SkScalar drad = SK_ScalarPI / n; 129*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < n; i++) { 130*c8dee2aaSAndroid Build Coastguard Worker *poly->append() = SkPoint::Make(c + SkScalarCos(rad) * r1, c + SkScalarSin(rad) * r1); 131*c8dee2aaSAndroid Build Coastguard Worker rad += drad; 132*c8dee2aaSAndroid Build Coastguard Worker *poly->append() = SkPoint::Make(c + SkScalarCos(rad) * r2, c + SkScalarSin(rad) * r2); 133*c8dee2aaSAndroid Build Coastguard Worker rad += drad; 134*c8dee2aaSAndroid Build Coastguard Worker } 135*c8dee2aaSAndroid Build Coastguard Worker } 136*c8dee2aaSAndroid Build Coastguard Worker private: 137*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = PolyUtilsBench; 138*c8dee2aaSAndroid Build Coastguard Worker }; 139*c8dee2aaSAndroid Build Coastguard Worker 140*c8dee2aaSAndroid Build Coastguard Worker class CirclePolyUtilsBench : public PolyUtilsBench { 141*c8dee2aaSAndroid Build Coastguard Worker public: CirclePolyUtilsBench(PolyUtilsBench::Type type)142*c8dee2aaSAndroid Build Coastguard Worker CirclePolyUtilsBench(PolyUtilsBench::Type type) : INHERITED(type) {} 143*c8dee2aaSAndroid Build Coastguard Worker appendName(SkString * name)144*c8dee2aaSAndroid Build Coastguard Worker void appendName(SkString* name) override { 145*c8dee2aaSAndroid Build Coastguard Worker name->append("circle"); 146*c8dee2aaSAndroid Build Coastguard Worker } makePoly(SkTDArray<SkPoint> * poly)147*c8dee2aaSAndroid Build Coastguard Worker void makePoly(SkTDArray<SkPoint>* poly) override { 148*c8dee2aaSAndroid Build Coastguard Worker // create circle with many vertices 149*c8dee2aaSAndroid Build Coastguard Worker const SkScalar c = SkIntToScalar(45); 150*c8dee2aaSAndroid Build Coastguard Worker const SkScalar r = SkIntToScalar(20); 151*c8dee2aaSAndroid Build Coastguard Worker const int n = 1000; 152*c8dee2aaSAndroid Build Coastguard Worker SkScalar rad = 0; 153*c8dee2aaSAndroid Build Coastguard Worker const SkScalar drad = 2 * SK_ScalarPI / n; 154*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < n; i++) { 155*c8dee2aaSAndroid Build Coastguard Worker *poly->append() = SkPoint::Make(c + SkScalarCos(rad) * r, c + SkScalarSin(rad) * r); 156*c8dee2aaSAndroid Build Coastguard Worker rad += drad; 157*c8dee2aaSAndroid Build Coastguard Worker } 158*c8dee2aaSAndroid Build Coastguard Worker } 159*c8dee2aaSAndroid Build Coastguard Worker private: 160*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = PolyUtilsBench; 161*c8dee2aaSAndroid Build Coastguard Worker }; 162*c8dee2aaSAndroid Build Coastguard Worker 163*c8dee2aaSAndroid Build Coastguard Worker class IntersectingPolyUtilsBench : public PolyUtilsBench { 164*c8dee2aaSAndroid Build Coastguard Worker public: IntersectingPolyUtilsBench(PolyUtilsBench::Type type)165*c8dee2aaSAndroid Build Coastguard Worker IntersectingPolyUtilsBench(PolyUtilsBench::Type type) : INHERITED(type) {} 166*c8dee2aaSAndroid Build Coastguard Worker appendName(SkString * name)167*c8dee2aaSAndroid Build Coastguard Worker void appendName(SkString* name) override { 168*c8dee2aaSAndroid Build Coastguard Worker name->append("intersecting"); 169*c8dee2aaSAndroid Build Coastguard Worker } makePoly(SkTDArray<SkPoint> * poly)170*c8dee2aaSAndroid Build Coastguard Worker void makePoly(SkTDArray<SkPoint>* poly) override { 171*c8dee2aaSAndroid Build Coastguard Worker // create self-intersecting star 172*c8dee2aaSAndroid Build Coastguard Worker const SkScalar c = SkIntToScalar(45); 173*c8dee2aaSAndroid Build Coastguard Worker const SkScalar r = SkIntToScalar(20); 174*c8dee2aaSAndroid Build Coastguard Worker const int n = 1000; 175*c8dee2aaSAndroid Build Coastguard Worker 176*c8dee2aaSAndroid Build Coastguard Worker SkScalar rad = -SK_ScalarPI / 2; 177*c8dee2aaSAndroid Build Coastguard Worker const SkScalar drad = (n >> 1) * SK_ScalarPI * 2 / n; 178*c8dee2aaSAndroid Build Coastguard Worker *poly->append() = SkPoint::Make(c, c - r); 179*c8dee2aaSAndroid Build Coastguard Worker for (int i = 1; i < n; i++) { 180*c8dee2aaSAndroid Build Coastguard Worker rad += drad; 181*c8dee2aaSAndroid Build Coastguard Worker *poly->append() = SkPoint::Make(c + SkScalarCos(rad) * r, c + SkScalarSin(rad) * r); 182*c8dee2aaSAndroid Build Coastguard Worker } 183*c8dee2aaSAndroid Build Coastguard Worker } 184*c8dee2aaSAndroid Build Coastguard Worker private: 185*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = PolyUtilsBench; 186*c8dee2aaSAndroid Build Coastguard Worker }; 187*c8dee2aaSAndroid Build Coastguard Worker 188*c8dee2aaSAndroid Build Coastguard Worker // familiar videogame character 189*c8dee2aaSAndroid Build Coastguard Worker class NotchPolyUtilsBench : public PolyUtilsBench { 190*c8dee2aaSAndroid Build Coastguard Worker public: NotchPolyUtilsBench(PolyUtilsBench::Type type)191*c8dee2aaSAndroid Build Coastguard Worker NotchPolyUtilsBench(PolyUtilsBench::Type type) : INHERITED(type) {} 192*c8dee2aaSAndroid Build Coastguard Worker appendName(SkString * name)193*c8dee2aaSAndroid Build Coastguard Worker void appendName(SkString* name) override { 194*c8dee2aaSAndroid Build Coastguard Worker name->append("notch"); 195*c8dee2aaSAndroid Build Coastguard Worker } makePoly(SkTDArray<SkPoint> * poly)196*c8dee2aaSAndroid Build Coastguard Worker void makePoly(SkTDArray<SkPoint>* poly) override { 197*c8dee2aaSAndroid Build Coastguard Worker // create 3/4 circle with many vertices 198*c8dee2aaSAndroid Build Coastguard Worker const SkScalar c = SkIntToScalar(45); 199*c8dee2aaSAndroid Build Coastguard Worker const SkScalar r = SkIntToScalar(20); 200*c8dee2aaSAndroid Build Coastguard Worker const int n = 1000; 201*c8dee2aaSAndroid Build Coastguard Worker SkScalar rad = 0; 202*c8dee2aaSAndroid Build Coastguard Worker const SkScalar drad = 3 * SK_ScalarPI / (2*n); 203*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < n; i++) { 204*c8dee2aaSAndroid Build Coastguard Worker *poly->append() = SkPoint::Make(c + SkScalarCos(rad) * r, c + SkScalarSin(rad) * r); 205*c8dee2aaSAndroid Build Coastguard Worker rad += drad; 206*c8dee2aaSAndroid Build Coastguard Worker } 207*c8dee2aaSAndroid Build Coastguard Worker // and the mouth 208*c8dee2aaSAndroid Build Coastguard Worker *poly->append() = SkPoint::Make(45, 45); 209*c8dee2aaSAndroid Build Coastguard Worker } 210*c8dee2aaSAndroid Build Coastguard Worker private: 211*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = PolyUtilsBench; 212*c8dee2aaSAndroid Build Coastguard Worker }; 213*c8dee2aaSAndroid Build Coastguard Worker 214*c8dee2aaSAndroid Build Coastguard Worker class IceCreamPolyUtilsBench : public PolyUtilsBench { 215*c8dee2aaSAndroid Build Coastguard Worker public: IceCreamPolyUtilsBench(PolyUtilsBench::Type type)216*c8dee2aaSAndroid Build Coastguard Worker IceCreamPolyUtilsBench(PolyUtilsBench::Type type) : INHERITED(type) {} 217*c8dee2aaSAndroid Build Coastguard Worker appendName(SkString * name)218*c8dee2aaSAndroid Build Coastguard Worker void appendName(SkString* name) override { 219*c8dee2aaSAndroid Build Coastguard Worker name->append("icecream"); 220*c8dee2aaSAndroid Build Coastguard Worker } makePoly(SkTDArray<SkPoint> * poly)221*c8dee2aaSAndroid Build Coastguard Worker void makePoly(SkTDArray<SkPoint>* poly) override { 222*c8dee2aaSAndroid Build Coastguard Worker // create 3/4 circle with many vertices 223*c8dee2aaSAndroid Build Coastguard Worker const SkScalar c = SkIntToScalar(45); 224*c8dee2aaSAndroid Build Coastguard Worker const SkScalar r = SkIntToScalar(20); 225*c8dee2aaSAndroid Build Coastguard Worker const int n = 1000; 226*c8dee2aaSAndroid Build Coastguard Worker SkScalar rad = 0; 227*c8dee2aaSAndroid Build Coastguard Worker const SkScalar drad = 3 * SK_ScalarPI / (2*n); 228*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < n; i++) { 229*c8dee2aaSAndroid Build Coastguard Worker *poly->append() = SkPoint::Make(c + SkScalarCos(rad) * r, c + SkScalarSin(rad) * r); 230*c8dee2aaSAndroid Build Coastguard Worker rad += drad; 231*c8dee2aaSAndroid Build Coastguard Worker } 232*c8dee2aaSAndroid Build Coastguard Worker // and the tip of the cone 233*c8dee2aaSAndroid Build Coastguard Worker *poly->append() = SkPoint::Make(90, 0); 234*c8dee2aaSAndroid Build Coastguard Worker } 235*c8dee2aaSAndroid Build Coastguard Worker private: 236*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = PolyUtilsBench; 237*c8dee2aaSAndroid Build Coastguard Worker }; 238*c8dee2aaSAndroid Build Coastguard Worker 239*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kConvexCheck);) 240*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kSimpleCheck);) 241*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kInsetConvex);) 242*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kOffsetSimple);) 243*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kTessellateSimple);) 244*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kConvexCheck);) 245*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kSimpleCheck);) 246*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kInsetConvex);) 247*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kOffsetSimple);) 248*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kTessellateSimple);) 249*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kConvexCheck);) 250*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kSimpleCheck);) 251*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kInsetConvex);) 252*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kOffsetSimple);) 253*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kTessellateSimple);) 254*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new NotchPolyUtilsBench(PolyUtilsBench::Type::kConvexCheck);) 255*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new NotchPolyUtilsBench(PolyUtilsBench::Type::kSimpleCheck);) 256*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new NotchPolyUtilsBench(PolyUtilsBench::Type::kInsetConvex);) 257*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new NotchPolyUtilsBench(PolyUtilsBench::Type::kOffsetSimple);) 258*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new NotchPolyUtilsBench(PolyUtilsBench::Type::kTessellateSimple);) 259*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IceCreamPolyUtilsBench(PolyUtilsBench::Type::kConvexCheck);) 260*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IceCreamPolyUtilsBench(PolyUtilsBench::Type::kSimpleCheck);) 261*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IceCreamPolyUtilsBench(PolyUtilsBench::Type::kInsetConvex);) 262*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IceCreamPolyUtilsBench(PolyUtilsBench::Type::kOffsetSimple);) 263*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new IceCreamPolyUtilsBench(PolyUtilsBench::Type::kTessellateSimple);) 264*c8dee2aaSAndroid Build Coastguard Worker 265*c8dee2aaSAndroid Build Coastguard Worker #endif // !defined(SK_ENABLE_OPTIMIZE_SIZE) 266