xref: /aosp_15_r20/external/skia/bench/PolyUtilsBench.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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