5#include "flutter/benchmarking/benchmarking.h"
7#include "flutter/impeller/entity/solid_fill.vert.h"
18 static std::vector<SolidFillVertexShader::PerVertexData>
25 return StrokePathGeometry::GenerateSolidStrokeVertices(
33Path CreateCubic(
bool closed);
35Path CreateQuadratic(
bool closed);
42template <
class... Args>
44 auto args_tuple = std::make_tuple(std::move(
args)...);
45 auto path = std::get<Path>(args_tuple);
47 size_t point_count = 0u;
48 size_t single_point_count = 0u;
49 auto points = std::make_unique<std::vector<Point>>();
51 while (
state.KeepRunning()) {
58 points = std::move(reclaimed);
61 point_count += single_point_count;
63 state.counters[
"SinglePointCount"] = single_point_count;
64 state.counters[
"TotalPointCount"] = point_count;
67template <
class... Args>
69 auto args_tuple = std::make_tuple(std::move(
args)...);
70 auto path = std::get<Path>(args_tuple);
71 auto cap = std::get<Cap>(args_tuple);
72 auto join = std::get<Join>(args_tuple);
75 const Scalar miter_limit = 10.0f;
78 auto points = std::make_unique<std::vector<Point>>();
83 points = std::move(reclaimed);
86 size_t point_count = 0u;
87 size_t single_point_count = 0u;
88 while (
state.KeepRunning()) {
91 single_point_count = vertices.size();
92 point_count += single_point_count;
94 state.counters[
"SinglePointCount"] = single_point_count;
95 state.counters[
"TotalPointCount"] = point_count;
98template <
class... Args>
100 auto args_tuple = std::make_tuple(std::move(
args)...);
101 auto path = std::get<Path>(args_tuple);
103 size_t point_count = 0u;
104 size_t single_point_count = 0u;
105 auto points = std::make_unique<std::vector<Point>>();
106 auto indices = std::make_unique<std::vector<uint16_t>>();
108 while (
state.KeepRunning()) {
112 single_point_count = indices->size();
113 point_count += indices->size();
115 state.counters[
"SinglePointCount"] = single_point_count;
116 state.counters[
"TotalPointCount"] = point_count;
119#define MAKE_STROKE_BENCHMARK_CAPTURE(path, cap, join, closed) \
120 BENCHMARK_CAPTURE(BM_StrokePolyline, stroke_##path##_##cap##_##join, \
121 Create##path(closed), Cap::k##cap, Join::k##join)
123#define MAKE_STROKE_BENCHMARK_CAPTURE_ALL_CAPS_JOINS(path, closed) \
124 MAKE_STROKE_BENCHMARK_CAPTURE(path, Butt, Bevel, closed); \
125 MAKE_STROKE_BENCHMARK_CAPTURE(path, Butt, Miter, closed); \
126 MAKE_STROKE_BENCHMARK_CAPTURE(path, Butt, Round, closed); \
127 MAKE_STROKE_BENCHMARK_CAPTURE(path, Square, Bevel, closed); \
128 MAKE_STROKE_BENCHMARK_CAPTURE(path, Round, Bevel, closed)
154Path CreateCubic(
bool closed) {
157 .MoveTo({359.934, 96.6335})
158 .CubicCurveTo({358.189, 96.7055}, {356.436, 96.7908}, {354.673, 96.8895})
159 .CubicCurveTo({354.571, 96.8953}, {354.469, 96.9016}, {354.367, 96.9075})
160 .CubicCurveTo({352.672, 97.0038}, {350.969, 97.113}, {349.259, 97.2355})
161 .CubicCurveTo({349.048, 97.2506}, {348.836, 97.2678}, {348.625, 97.2834})
162 .CubicCurveTo({347.019, 97.4014}, {345.407, 97.5299}, {343.789, 97.6722})
163 .CubicCurveTo({343.428, 97.704}, {343.065, 97.7402}, {342.703, 97.7734})
164 .CubicCurveTo({341.221, 97.9086}, {339.736, 98.0505}, {338.246, 98.207})
165 .CubicCurveTo({337.702, 98.2642}, {337.156, 98.3292}, {336.612, 98.3894})
166 .CubicCurveTo({335.284, 98.5356}, {333.956, 98.6837}, {332.623, 98.8476})
167 .CubicCurveTo({332.495, 98.8635}, {332.366, 98.8818}, {332.237, 98.8982})
168 .
LineTo({332.237, 102.601})
169 .
LineTo({321.778, 102.601})
170 .
LineTo({321.778, 100.382})
171 .CubicCurveTo({321.572, 100.413}, {321.367, 100.442}, {321.161, 100.476})
172 .CubicCurveTo({319.22, 100.79}, {317.277, 101.123}, {315.332, 101.479})
173 .CubicCurveTo({315.322, 101.481}, {315.311, 101.482}, {315.301, 101.484})
174 .
LineTo({310.017, 105.94})
175 .
LineTo({309.779, 105.427})
176 .
LineTo({314.403, 101.651})
177 .CubicCurveTo({314.391, 101.653}, {314.379, 101.656}, {314.368, 101.658})
178 .CubicCurveTo({312.528, 102.001}, {310.687, 102.366}, {308.846, 102.748})
179 .CubicCurveTo({307.85, 102.955}, {306.855, 103.182}, {305.859, 103.4})
180 .CubicCurveTo({305.048, 103.579}, {304.236, 103.75}, {303.425, 103.936})
181 .
LineTo({299.105, 107.578})
182 .
LineTo({298.867, 107.065})
183 .
LineTo({302.394, 104.185})
184 .
LineTo({302.412, 104.171})
185 .CubicCurveTo({301.388, 104.409}, {300.366, 104.67}, {299.344, 104.921})
186 .CubicCurveTo({298.618, 105.1}, {297.89, 105.269}, {297.165, 105.455})
187 .CubicCurveTo({295.262, 105.94}, {293.36, 106.445}, {291.462, 106.979})
188 .CubicCurveTo({291.132, 107.072}, {290.802, 107.163}, {290.471, 107.257})
189 .CubicCurveTo({289.463, 107.544}, {288.455, 107.839}, {287.449, 108.139})
190 .CubicCurveTo({286.476, 108.431}, {285.506, 108.73}, {284.536, 109.035})
191 .CubicCurveTo({283.674, 109.304}, {282.812, 109.579}, {281.952, 109.859})
192 .CubicCurveTo({281.177, 110.112}, {280.406, 110.377}, {279.633, 110.638})
193 .CubicCurveTo({278.458, 111.037}, {277.256, 111.449}, {276.803, 111.607})
194 .CubicCurveTo({276.76, 111.622}, {276.716, 111.637}, {276.672, 111.653})
195 .CubicCurveTo({275.017, 112.239}, {273.365, 112.836}, {271.721, 113.463})
196 .
LineTo({271.717, 113.449})
197 .CubicCurveTo({271.496, 113.496}, {271.238, 113.559}, {270.963, 113.628})
198 .CubicCurveTo({270.893, 113.645}, {270.822, 113.663}, {270.748, 113.682})
199 .CubicCurveTo({270.468, 113.755}, {270.169, 113.834}, {269.839, 113.926})
200 .CubicCurveTo({269.789, 113.94}, {269.732, 113.957}, {269.681, 113.972})
201 .CubicCurveTo({269.391, 114.053}, {269.081, 114.143}, {268.756, 114.239})
202 .CubicCurveTo({268.628, 114.276}, {268.5, 114.314}, {268.367, 114.354})
203 .CubicCurveTo({268.172, 114.412}, {267.959, 114.478}, {267.752, 114.54})
204 .CubicCurveTo({263.349, 115.964}, {258.058, 117.695}, {253.564, 119.252})
205 .CubicCurveTo({253.556, 119.255}, {253.547, 119.258}, {253.538, 119.261})
206 .CubicCurveTo({251.844, 119.849}, {250.056, 120.474}, {248.189, 121.131})
207 .CubicCurveTo({248, 121.197}, {247.812, 121.264}, {247.621, 121.331})
208 .CubicCurveTo({247.079, 121.522}, {246.531, 121.715}, {245.975, 121.912})
209 .CubicCurveTo({245.554, 122.06}, {245.126, 122.212}, {244.698, 122.364})
210 .CubicCurveTo({244.071, 122.586}, {243.437, 122.811}, {242.794, 123.04})
211 .CubicCurveTo({242.189, 123.255}, {241.58, 123.472}, {240.961, 123.693})
212 .CubicCurveTo({240.659, 123.801}, {240.357, 123.909}, {240.052, 124.018})
213 .CubicCurveTo({239.12, 124.351}, {238.18, 124.687}, {237.22, 125.032})
214 .
LineTo({237.164, 125.003})
215 .CubicCurveTo({236.709, 125.184}, {236.262, 125.358}, {235.81, 125.538})
216 .CubicCurveTo({235.413, 125.68}, {234.994, 125.832}, {234.592, 125.977})
217 .CubicCurveTo({234.592, 125.977}, {234.591, 125.977}, {234.59, 125.977})
218 .CubicCurveTo({222.206, 130.435}, {207.708, 135.753}, {192.381, 141.429})
219 .CubicCurveTo({162.77, 151.336}, {122.17, 156.894}, {84.1123, 160})
224 .CubicCurveTo({359.978, 96.6317}, {359.956, 96.6326}, {359.934, 96.6335});
229 .MoveTo({337.336, 124.143})
230 .CubicCurveTo({337.274, 122.359}, {338.903, 121.511}, {338.903, 121.511})
231 .CubicCurveTo({338.903, 121.511}, {338.96, 123.303}, {337.336, 124.143});
236 .MoveTo({340.082, 121.849})
237 .CubicCurveTo({340.074, 121.917}, {340.062, 121.992}, {340.046, 122.075})
238 .CubicCurveTo({340.039, 122.109}, {340.031, 122.142}, {340.023, 122.177})
239 .CubicCurveTo({340.005, 122.26}, {339.98, 122.346}, {339.952, 122.437})
240 .CubicCurveTo({339.941, 122.473}, {339.931, 122.507}, {339.918, 122.544})
241 .CubicCurveTo({339.873, 122.672}, {339.819, 122.804}, {339.75, 122.938})
242 .CubicCurveTo({339.747, 122.944}, {339.743, 122.949}, {339.74, 122.955})
243 .CubicCurveTo({339.674, 123.08}, {339.593, 123.205}, {339.501, 123.328})
244 .CubicCurveTo({339.473, 123.366}, {339.441, 123.401}, {339.41, 123.438})
245 .CubicCurveTo({339.332, 123.534}, {339.243, 123.625}, {339.145, 123.714})
246 .CubicCurveTo({339.105, 123.75}, {339.068, 123.786}, {339.025, 123.821})
247 .CubicCurveTo({338.881, 123.937}, {338.724, 124.048}, {338.539, 124.143})
248 .CubicCurveTo({338.532, 123.959}, {338.554, 123.79}, {338.58, 123.626})
249 .CubicCurveTo({338.58, 123.625}, {338.58, 123.625}, {338.58, 123.625})
250 .CubicCurveTo({338.607, 123.455}, {338.65, 123.299}, {338.704, 123.151})
251 .CubicCurveTo({338.708, 123.14}, {338.71, 123.127}, {338.714, 123.117})
252 .CubicCurveTo({338.769, 122.971}, {338.833, 122.838}, {338.905, 122.712})
253 .CubicCurveTo({338.911, 122.702}, {338.916, 122.69200000000001},
255 .CubicCurveTo({338.996, 122.557}, {339.072, 122.444}, {339.155, 122.34})
256 .CubicCurveTo({339.161, 122.333}, {339.166, 122.326}, {339.172, 122.319})
257 .CubicCurveTo({339.256, 122.215}, {339.339, 122.12}, {339.425, 122.037})
258 .CubicCurveTo({339.428, 122.033}, {339.431, 122.03}, {339.435, 122.027})
259 .CubicCurveTo({339.785, 121.687}, {340.106, 121.511}, {340.106, 121.511})
260 .CubicCurveTo({340.106, 121.511}, {340.107, 121.645}, {340.082, 121.849});
265 .MoveTo({340.678, 113.245})
266 .CubicCurveTo({340.594, 113.488}, {340.356, 113.655}, {340.135, 113.775})
267 .CubicCurveTo({339.817, 113.948}, {339.465, 114.059}, {339.115, 114.151})
268 .CubicCurveTo({338.251, 114.379}, {337.34, 114.516}, {336.448, 114.516})
269 .CubicCurveTo({335.761, 114.516}, {335.072, 114.527}, {334.384, 114.513})
270 .CubicCurveTo({334.125, 114.508}, {333.862, 114.462}, {333.605, 114.424})
271 .CubicCurveTo({332.865, 114.318}, {332.096, 114.184}, {331.41, 113.883})
272 .CubicCurveTo({330.979, 113.695}, {330.442, 113.34}, {330.672, 112.813})
273 .CubicCurveTo({331.135, 111.755}, {333.219, 112.946}, {334.526, 113.833})
274 .CubicCurveTo({334.54, 113.816}, {334.554, 113.8}, {334.569, 113.784})
275 .CubicCurveTo({333.38, 112.708}, {331.749, 110.985}, {332.76, 110.402})
276 .CubicCurveTo({333.769, 109.82}, {334.713, 111.93}, {335.228, 113.395})
277 .CubicCurveTo({334.915, 111.889}, {334.59, 109.636}, {335.661, 109.592})
278 .CubicCurveTo({336.733, 109.636}, {336.408, 111.889}, {336.07, 113.389})
279 .CubicCurveTo({336.609, 111.93}, {337.553, 109.82}, {338.563, 110.402})
280 .CubicCurveTo({339.574, 110.984}, {337.942, 112.708}, {336.753, 113.784})
281 .CubicCurveTo({336.768, 113.8}, {336.782, 113.816}, {336.796, 113.833})
282 .CubicCurveTo({338.104, 112.946}, {340.187, 111.755}, {340.65, 112.813})
283 .CubicCurveTo({340.71, 112.95}, {340.728, 113.102}, {340.678, 113.245});
288 .MoveTo({346.357, 106.771})
289 .CubicCurveTo({346.295, 104.987}, {347.924, 104.139}, {347.924, 104.139})
290 .CubicCurveTo({347.924, 104.139}, {347.982, 105.931}, {346.357, 106.771});
295 .MoveTo({347.56, 106.771})
296 .CubicCurveTo({347.498, 104.987}, {349.127, 104.139}, {349.127, 104.139})
297 .CubicCurveTo({349.127, 104.139}, {349.185, 105.931}, {347.56, 106.771});
304Path CreateQuadratic(
bool closed) {
307 .MoveTo({359.934, 96.6335})
308 .QuadraticCurveTo({358.189, 96.7055}, {354.673, 96.8895})
309 .QuadraticCurveTo({354.571, 96.8953}, {354.367, 96.9075})
310 .QuadraticCurveTo({352.672, 97.0038}, {349.259, 97.2355})
311 .QuadraticCurveTo({349.048, 97.2506}, {348.625, 97.2834})
312 .QuadraticCurveTo({347.019, 97.4014}, {343.789, 97.6722})
313 .QuadraticCurveTo({343.428, 97.704}, {342.703, 97.7734})
314 .QuadraticCurveTo({341.221, 97.9086}, {338.246, 98.207})
315 .QuadraticCurveTo({337.702, 98.2642}, {336.612, 98.3894})
316 .QuadraticCurveTo({335.284, 98.5356}, {332.623, 98.8476})
317 .QuadraticCurveTo({332.495, 98.8635}, {332.237, 98.8982})
318 .
LineTo({332.237, 102.601})
319 .
LineTo({321.778, 102.601})
320 .
LineTo({321.778, 100.382})
321 .QuadraticCurveTo({321.572, 100.413}, {321.161, 100.476})
322 .QuadraticCurveTo({319.22, 100.79}, {315.332, 101.479})
323 .QuadraticCurveTo({315.322, 101.481}, {315.301, 101.484})
324 .
LineTo({310.017, 105.94})
325 .
LineTo({309.779, 105.427})
326 .
LineTo({314.403, 101.651})
327 .QuadraticCurveTo({314.391, 101.653}, {314.368, 101.658})
328 .QuadraticCurveTo({312.528, 102.001}, {308.846, 102.748})
329 .QuadraticCurveTo({307.85, 102.955}, {305.859, 103.4})
330 .QuadraticCurveTo({305.048, 103.579}, {303.425, 103.936})
331 .
LineTo({299.105, 107.578})
332 .
LineTo({298.867, 107.065})
333 .
LineTo({302.394, 104.185})
334 .
LineTo({302.412, 104.171})
335 .QuadraticCurveTo({301.388, 104.409}, {299.344, 104.921})
336 .QuadraticCurveTo({298.618, 105.1}, {297.165, 105.455})
337 .QuadraticCurveTo({295.262, 105.94}, {291.462, 106.979})
338 .QuadraticCurveTo({291.132, 107.072}, {290.471, 107.257})
339 .QuadraticCurveTo({289.463, 107.544}, {287.449, 108.139})
340 .QuadraticCurveTo({286.476, 108.431}, {284.536, 109.035})
341 .QuadraticCurveTo({283.674, 109.304}, {281.952, 109.859})
342 .QuadraticCurveTo({281.177, 110.112}, {279.633, 110.638})
343 .QuadraticCurveTo({278.458, 111.037}, {276.803, 111.607})
344 .QuadraticCurveTo({276.76, 111.622}, {276.672, 111.653})
345 .QuadraticCurveTo({275.017, 112.239}, {271.721, 113.463})
346 .
LineTo({271.717, 113.449})
347 .QuadraticCurveTo({271.496, 113.496}, {270.963, 113.628})
348 .QuadraticCurveTo({270.893, 113.645}, {270.748, 113.682})
349 .QuadraticCurveTo({270.468, 113.755}, {269.839, 113.926})
350 .QuadraticCurveTo({269.789, 113.94}, {269.681, 113.972})
351 .QuadraticCurveTo({269.391, 114.053}, {268.756, 114.239})
352 .QuadraticCurveTo({268.628, 114.276}, {268.367, 114.354})
353 .QuadraticCurveTo({268.172, 114.412}, {267.752, 114.54})
354 .QuadraticCurveTo({263.349, 115.964}, {253.564, 119.252})
355 .QuadraticCurveTo({253.556, 119.255}, {253.538, 119.261})
356 .QuadraticCurveTo({251.844, 119.849}, {248.189, 121.131})
357 .QuadraticCurveTo({248, 121.197}, {247.621, 121.331})
358 .QuadraticCurveTo({247.079, 121.522}, {245.975, 121.912})
359 .QuadraticCurveTo({245.554, 122.06}, {244.698, 122.364})
360 .QuadraticCurveTo({244.071, 122.586}, {242.794, 123.04})
361 .QuadraticCurveTo({242.189, 123.255}, {240.961, 123.693})
362 .QuadraticCurveTo({240.659, 123.801}, {240.052, 124.018})
363 .QuadraticCurveTo({239.12, 124.351}, {237.22, 125.032})
364 .
LineTo({237.164, 125.003})
365 .QuadraticCurveTo({236.709, 125.184}, {235.81, 125.538})
366 .QuadraticCurveTo({235.413, 125.68}, {234.592, 125.977})
367 .QuadraticCurveTo({234.592, 125.977}, {234.59, 125.977})
368 .QuadraticCurveTo({222.206, 130.435}, {192.381, 141.429})
369 .QuadraticCurveTo({162.77, 151.336}, {84.1123, 160})
374 .QuadraticCurveTo({359.978, 96.6317}, {359.934, 96.6335});
379 .MoveTo({337.336, 124.143})
380 .QuadraticCurveTo({337.274, 122.359}, {338.903, 121.511})
381 .QuadraticCurveTo({338.903, 121.511}, {337.336, 124.143});
386 .MoveTo({340.082, 121.849})
387 .QuadraticCurveTo({340.074, 121.917}, {340.046, 122.075})
388 .QuadraticCurveTo({340.039, 122.109}, {340.023, 122.177})
389 .QuadraticCurveTo({340.005, 122.26}, {339.952, 122.437})
390 .QuadraticCurveTo({339.941, 122.473}, {339.918, 122.544})
391 .QuadraticCurveTo({339.873, 122.672}, {339.75, 122.938})
392 .QuadraticCurveTo({339.747, 122.944}, {339.74, 122.955})
393 .QuadraticCurveTo({339.674, 123.08}, {339.501, 123.328})
394 .QuadraticCurveTo({339.473, 123.366}, {339.41, 123.438})
395 .QuadraticCurveTo({339.332, 123.534}, {339.145, 123.714})
396 .QuadraticCurveTo({339.105, 123.75}, {339.025, 123.821})
397 .QuadraticCurveTo({338.881, 123.937}, {338.539, 124.143})
398 .QuadraticCurveTo({338.532, 123.959}, {338.58, 123.626})
399 .QuadraticCurveTo({338.58, 123.625}, {338.58, 123.625})
400 .QuadraticCurveTo({338.607, 123.455}, {338.704, 123.151})
401 .QuadraticCurveTo({338.708, 123.14}, {338.714, 123.117})
402 .QuadraticCurveTo({338.769, 122.971}, {338.905, 122.712})
403 .QuadraticCurveTo({338.911, 122.702}, {338.922, 122.682})
404 .QuadraticCurveTo({338.996, 122.557}, {339.155, 122.34})
405 .QuadraticCurveTo({339.161, 122.333}, {339.172, 122.319})
406 .QuadraticCurveTo({339.256, 122.215}, {339.425, 122.037})
407 .QuadraticCurveTo({339.428, 122.033}, {339.435, 122.027})
408 .QuadraticCurveTo({339.785, 121.687}, {340.106, 121.511})
409 .QuadraticCurveTo({340.106, 121.511}, {340.082, 121.849});
414 .MoveTo({340.678, 113.245})
415 .QuadraticCurveTo({340.594, 113.488}, {340.135, 113.775})
416 .QuadraticCurveTo({339.817, 113.948}, {339.115, 114.151})
417 .QuadraticCurveTo({338.251, 114.379}, {336.448, 114.516})
418 .QuadraticCurveTo({335.761, 114.516}, {334.384, 114.513})
419 .QuadraticCurveTo({334.125, 114.508}, {333.605, 114.424})
420 .QuadraticCurveTo({332.865, 114.318}, {331.41, 113.883})
421 .QuadraticCurveTo({330.979, 113.695}, {330.672, 112.813})
422 .QuadraticCurveTo({331.135, 111.755}, {334.526, 113.833})
423 .QuadraticCurveTo({334.54, 113.816}, {334.569, 113.784})
424 .QuadraticCurveTo({333.38, 112.708}, {332.76, 110.402})
425 .QuadraticCurveTo({333.769, 109.82}, {335.228, 113.395})
426 .QuadraticCurveTo({334.915, 111.889}, {335.661, 109.592})
427 .QuadraticCurveTo({336.733, 109.636}, {336.07, 113.389})
428 .QuadraticCurveTo({336.609, 111.93}, {338.563, 110.402})
429 .QuadraticCurveTo({339.574, 110.984}, {336.753, 113.784})
430 .QuadraticCurveTo({336.768, 113.8}, {336.796, 113.833})
431 .QuadraticCurveTo({338.104, 112.946}, {340.65, 112.813})
432 .QuadraticCurveTo({340.71, 112.95}, {340.678, 113.245});
437 .MoveTo({346.357, 106.771})
438 .QuadraticCurveTo({346.295, 104.987}, {347.924, 104.139})
439 .QuadraticCurveTo({347.924, 104.139}, {346.357, 106.771});
444 .MoveTo({347.56, 106.771})
445 .QuadraticCurveTo({347.498, 104.987}, {349.127, 104.139})
446 .QuadraticCurveTo({349.127, 104.139}, {347.56, 106.771});
static const int points[]
static std::vector< SolidFillVertexShader::PerVertexData > GenerateSolidStrokeVertices(const Path::Polyline &polyline, Scalar stroke_width, Scalar miter_limit, Join stroke_join, Cap stroke_cap, Scalar scale)
Path TakePath(FillType fill=FillType::kNonZero)
PathBuilder & AddRoundedRect(Rect rect, RoundingRadii radii)
Paths are lightweight objects that describe a collection of linear, quadratic, or cubic segments....
An extended tessellator that offers arbitrary/concave tessellation via the libtess2 library.
static void TessellateConvexInternal(const Path &path, std::vector< Point > &point_buffer, std::vector< uint16_t > &index_buffer, Scalar tolerance)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
static TessellatorLibtess tess
MAKE_STROKE_BENCHMARK_CAPTURE_ALL_CAPS_JOINS(Cubic, false)
static void BM_Convex(benchmark::State &state, Args &&... args)
MAKE_STROKE_BENCHMARK_CAPTURE(RRect, Butt, Bevel,)
BENCHMARK_CAPTURE(BM_CanvasRecord, draw_rect, &DrawRect)
void LineTo(PathBuilder *builder, Scalar x, Scalar y)
static void BM_Polyline(benchmark::State &state, Args &&... args)
static void BM_StrokePolyline(benchmark::State &state, Args &&... args)
static SkString join(const CommandLineFlags::StringArray &)
const Scalar stroke_width
const Path::Polyline & polyline
std::unique_ptr< std::vector< Point > > PointBufferPtr
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)