5#ifndef FLUTTER_DISPLAY_LIST_BENCHMARKING_DL_BENCHMARKS_H_
6#define FLUTTER_DISPLAY_LIST_BENCHMARKING_DL_BENCHMARKS_H_
13#include "third_party/benchmark/include/benchmark/benchmark.h"
103 bool transparent_occluder,
112#define DRAW_LINE_BENCHMARKS(BACKEND, ATTRIBUTES) \
113 BENCHMARK_CAPTURE(BM_DrawLine, BACKEND, \
114 BackendType::k##BACKEND, \
116 ->RangeMultiplier(2) \
119 ->Unit(benchmark::kMillisecond);
122#define DRAW_RECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
123 BENCHMARK_CAPTURE(BM_DrawRect, BACKEND, \
124 BackendType::k##BACKEND, \
126 ->RangeMultiplier(2) \
129 ->Unit(benchmark::kMillisecond);
132#define DRAW_OVAL_BENCHMARKS(BACKEND, ATTRIBUTES) \
133 BENCHMARK_CAPTURE(BM_DrawOval, BACKEND, \
134 BackendType::k##BACKEND, \
136 ->RangeMultiplier(2) \
139 ->Unit(benchmark::kMillisecond);
142#define DRAW_CIRCLE_BENCHMARKS(BACKEND, ATTRIBUTES) \
143 BENCHMARK_CAPTURE(BM_DrawCircle, BACKEND, \
144 BackendType::k##BACKEND, \
146 ->RangeMultiplier(2) \
149 ->Unit(benchmark::kMillisecond);
152#define DRAW_ARC_BENCHMARKS(BACKEND, ATTRIBUTES) \
153 BENCHMARK_CAPTURE(BM_DrawArc, BACKEND, \
154 BackendType::k##BACKEND, \
156 ->RangeMultiplier(2) \
159 ->Unit(benchmark::kMillisecond);
162#define DRAW_PATH_BENCHMARKS(BACKEND, ATTRIBUTES) \
163 BENCHMARK_CAPTURE(BM_DrawPath, \
165 BackendType::k##BACKEND, \
168 ->RangeMultiplier(2) \
171 ->Unit(benchmark::kMillisecond) \
174 BENCHMARK_CAPTURE(BM_DrawPath, \
176 BackendType::k##BACKEND, \
179 ->RangeMultiplier(2) \
182 ->Unit(benchmark::kMillisecond) \
185 BENCHMARK_CAPTURE(BM_DrawPath, \
187 BackendType::k##BACKEND, \
190 ->RangeMultiplier(2) \
193 ->Unit(benchmark::kMillisecond) \
196 BENCHMARK_CAPTURE(BM_DrawPath, \
198 BackendType::k##BACKEND, \
201 ->RangeMultiplier(2) \
204 ->Unit(benchmark::kMillisecond) \
208#define DRAW_POINTS_BENCHMARKS(BACKEND, ATTRIBUTES) \
209 BENCHMARK_CAPTURE(BM_DrawPoints, Points/BACKEND, \
210 BackendType::k##BACKEND, \
212 DlPointMode::kPoints) \
213 ->RangeMultiplier(2) \
214 ->Range(1024, 32768) \
216 ->Unit(benchmark::kMillisecond); \
218 BENCHMARK_CAPTURE(BM_DrawPoints, Lines/BACKEND, \
219 BackendType::k##BACKEND, \
221 DlPointMode::kLines) \
222 ->RangeMultiplier(2) \
223 ->Range(1024, 32768) \
225 ->Unit(benchmark::kMillisecond); \
227 BENCHMARK_CAPTURE(BM_DrawPoints, Polygon/BACKEND, \
228 BackendType::k##BACKEND, \
230 DlPointMode::kPolygon) \
231 ->RangeMultiplier(2) \
232 ->Range(1024, 32768) \
234 ->Unit(benchmark::kMillisecond);
237#define DRAW_VERTICES_BENCHMARKS(BACKEND, ATTRIBUTES) \
238 BENCHMARK_CAPTURE(BM_DrawVertices, \
239 TriangleStrip/BACKEND, \
240 BackendType::k##BACKEND, \
242 DlVertexMode::kTriangleStrip) \
243 ->RangeMultiplier(2) \
246 ->Unit(benchmark::kMillisecond) \
249 BENCHMARK_CAPTURE(BM_DrawVertices, \
250 TriangleFan/BACKEND, \
251 BackendType::k##BACKEND, \
253 DlVertexMode::kTriangleFan) \
254 ->RangeMultiplier(2) \
257 ->Unit(benchmark::kMillisecond) \
260 BENCHMARK_CAPTURE(BM_DrawVertices, \
262 BackendType::k##BACKEND, \
264 DlVertexMode::kTriangles) \
265 ->RangeMultiplier(2) \
268 ->Unit(benchmark::kMillisecond) \
272#define DRAW_RRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
273 BENCHMARK_CAPTURE(BM_DrawRRect, Symmetric/BACKEND, \
274 BackendType::k##BACKEND, \
276 RRectType::kSimple) \
277 ->RangeMultiplier(2) \
280 ->Unit(benchmark::kMillisecond); \
282 BENCHMARK_CAPTURE(BM_DrawRRect, NinePatch/BACKEND, \
283 BackendType::k##BACKEND, \
285 RRectType::kNinePatch) \
286 ->RangeMultiplier(2) \
289 ->Unit(benchmark::kMillisecond); \
291 BENCHMARK_CAPTURE(BM_DrawRRect, Complex/BACKEND, \
292 BackendType::k##BACKEND, \
294 RRectType::kComplex) \
295 ->RangeMultiplier(2) \
298 ->Unit(benchmark::kMillisecond);
301#define DRAW_DRRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
302 BENCHMARK_CAPTURE(BM_DrawDRRect, Symmetric/BACKEND, \
303 BackendType::k##BACKEND, \
305 RRectType::kSimple) \
306 ->RangeMultiplier(2) \
309 ->Unit(benchmark::kMillisecond); \
311 BENCHMARK_CAPTURE(BM_DrawDRRect, NinePatch/BACKEND, \
312 BackendType::k##BACKEND, \
314 RRectType::kNinePatch) \
315 ->RangeMultiplier(2) \
318 ->Unit(benchmark::kMillisecond); \
320 BENCHMARK_CAPTURE(BM_DrawDRRect, Complex/BACKEND, \
321 BackendType::k##BACKEND, \
323 RRectType::kComplex) \
324 ->RangeMultiplier(2) \
327 ->Unit(benchmark::kMillisecond);
330#define DRAW_IMAGE_BENCHMARKS(BACKEND, ATTRIBUTES) \
331 BENCHMARK_CAPTURE(BM_DrawImage, Texture/BACKEND, \
332 BackendType::k##BACKEND, \
334 DlImageSampling::kNearestNeighbor, false) \
335 ->RangeMultiplier(2) \
338 ->Unit(benchmark::kMillisecond); \
340 BENCHMARK_CAPTURE(BM_DrawImage, Upload/BACKEND, \
341 BackendType::k##BACKEND, \
343 DlImageSampling::kNearestNeighbor, true) \
344 ->RangeMultiplier(2) \
347 ->Unit(benchmark::kMillisecond);
350#define DRAW_IMAGE_RECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
352 BM_DrawImageRect, Texture/Strict/BACKEND, \
353 BackendType::k##BACKEND, \
355 DlImageSampling::kNearestNeighbor, \
356 DlSrcRectConstraint::kStrict, false) \
357 ->RangeMultiplier(2) \
360 ->Unit(benchmark::kMillisecond); \
363 BM_DrawImageRect, Texture/Fast/BACKEND, \
364 BackendType::k##BACKEND, \
366 DlImageSampling::kNearestNeighbor, \
367 DlSrcRectConstraint::kFast, false) \
368 ->RangeMultiplier(2) \
371 ->Unit(benchmark::kMillisecond); \
374 BM_DrawImageRect, Upload/Strict/BACKEND, \
375 BackendType::k##BACKEND, \
377 DlImageSampling::kNearestNeighbor, \
378 DlSrcRectConstraint::kStrict, true) \
379 ->RangeMultiplier(2) \
382 ->Unit(benchmark::kMillisecond); \
385 BM_DrawImageRect, Upload/Fast/BACKEND, \
386 BackendType::k##BACKEND, \
388 DlImageSampling::kNearestNeighbor, \
389 DlSrcRectConstraint::kFast, true) \
390 ->RangeMultiplier(2) \
393 ->Unit(benchmark::kMillisecond);
396#define DRAW_IMAGE_NINE_BENCHMARKS(BACKEND, ATTRIBUTES) \
397 BENCHMARK_CAPTURE(BM_DrawImageNine, Texture/Nearest/BACKEND, \
398 BackendType::k##BACKEND, \
400 DlFilterMode::kNearest, false) \
401 ->RangeMultiplier(2) \
404 ->Unit(benchmark::kMillisecond); \
406 BENCHMARK_CAPTURE(BM_DrawImageNine, Upload/Nearest/BACKEND, \
407 BackendType::k##BACKEND, \
409 DlFilterMode::kNearest, true) \
410 ->RangeMultiplier(2) \
413 ->Unit(benchmark::kMillisecond); \
415 BENCHMARK_CAPTURE(BM_DrawImageNine, Texture/Linear/BACKEND, \
416 BackendType::k##BACKEND, \
418 DlFilterMode::kLinear, false) \
419 ->RangeMultiplier(2) \
422 ->Unit(benchmark::kMillisecond); \
424 BENCHMARK_CAPTURE(BM_DrawImageNine, Upload/Linear/BACKEND, \
425 BackendType::k##BACKEND, \
427 DlFilterMode::kLinear, true) \
428 ->RangeMultiplier(2) \
431 ->Unit(benchmark::kMillisecond);
434#define DRAW_TEXT_BLOB_BENCHMARKS(BACKEND, ATTRIBUTES) \
435 BENCHMARK_CAPTURE(BM_DrawTextBlob, BACKEND, \
436 BackendType::k##BACKEND, \
438 ->RangeMultiplier(2) \
441 ->Unit(benchmark::kMillisecond) \
445#define DRAW_SHADOW_BENCHMARKS(BACKEND, ATTRIBUTES) \
446 BENCHMARK_CAPTURE(BM_DrawShadow, Lines/Transparent/BACKEND, \
447 BackendType::k##BACKEND, \
451 ->RangeMultiplier(2) \
454 ->Unit(benchmark::kMillisecond); \
456 BENCHMARK_CAPTURE(BM_DrawShadow, Quads/Transparent/BACKEND, \
457 BackendType::k##BACKEND, \
461 ->RangeMultiplier(2) \
464 ->Unit(benchmark::kMillisecond); \
466 BENCHMARK_CAPTURE(BM_DrawShadow, Conics/Transparent/BACKEND, \
467 BackendType::k##BACKEND, \
471 ->RangeMultiplier(2) \
474 ->Unit(benchmark::kMillisecond); \
476 BENCHMARK_CAPTURE(BM_DrawShadow, Cubics/Transparent/BACKEND, \
477 BackendType::k##BACKEND, \
481 ->RangeMultiplier(2) \
484 ->Unit(benchmark::kMillisecond); \
486 BENCHMARK_CAPTURE(BM_DrawShadow, Lines/Opaque/BACKEND, \
487 BackendType::k##BACKEND, \
491 ->RangeMultiplier(2) \
494 ->Unit(benchmark::kMillisecond); \
496 BENCHMARK_CAPTURE(BM_DrawShadow, Quads/Opaque/BACKEND, \
497 BackendType::k##BACKEND, \
501 ->RangeMultiplier(2) \
504 ->Unit(benchmark::kMillisecond); \
506 BENCHMARK_CAPTURE(BM_DrawShadow, Conics/Opaque/BACKEND, \
507 BackendType::k##BACKEND, \
511 ->RangeMultiplier(2) \
514 ->Unit(benchmark::kMillisecond); \
516 BENCHMARK_CAPTURE(BM_DrawShadow, Cubics/Opaque/BACKEND, \
517 BackendType::k##BACKEND, \
521 ->RangeMultiplier(2) \
524 ->Unit(benchmark::kMillisecond);
527#define SAVE_LAYER_BENCHMARKS(BACKEND, ATTRIBUTES) \
528 BENCHMARK_CAPTURE(BM_SaveLayer, Depth 1/BACKEND, \
529 BackendType::k##BACKEND, \
532 ->RangeMultiplier(2) \
535 ->Unit(benchmark::kMillisecond); \
537 BENCHMARK_CAPTURE(BM_SaveLayer, Depth 8/BACKEND, \
538 BackendType::k##BACKEND, \
541 ->RangeMultiplier(2) \
544 ->Unit(benchmark::kMillisecond);
547#define STROKE_BENCHMARKS(BACKEND, ATTRIBUTES) \
548 DRAW_LINE_BENCHMARKS(BACKEND, ATTRIBUTES) \
549 DRAW_POINTS_BENCHMARKS(BACKEND, ATTRIBUTES) \
550 DRAW_RECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
551 DRAW_OVAL_BENCHMARKS(BACKEND, ATTRIBUTES) \
552 DRAW_CIRCLE_BENCHMARKS(BACKEND, ATTRIBUTES) \
553 DRAW_ARC_BENCHMARKS(BACKEND, ATTRIBUTES) \
554 DRAW_PATH_BENCHMARKS(BACKEND, ATTRIBUTES) \
555 DRAW_RRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
556 DRAW_DRRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
557 DRAW_TEXT_BLOB_BENCHMARKS(BACKEND, ATTRIBUTES)
560#define FILL_BENCHMARKS(BACKEND, ATTRIBUTES) \
561 DRAW_RECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
562 DRAW_OVAL_BENCHMARKS(BACKEND, ATTRIBUTES) \
563 DRAW_CIRCLE_BENCHMARKS(BACKEND, ATTRIBUTES) \
564 DRAW_ARC_BENCHMARKS(BACKEND, ATTRIBUTES) \
565 DRAW_PATH_BENCHMARKS(BACKEND, ATTRIBUTES) \
566 DRAW_RRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
567 DRAW_DRRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
568 DRAW_TEXT_BLOB_BENCHMARKS(BACKEND, ATTRIBUTES)
571#define ANTI_ALIASING_BENCHMARKS(BACKEND, ATTRIBUTES) \
572 DRAW_IMAGE_BENCHMARKS(BACKEND, ATTRIBUTES) \
573 DRAW_IMAGE_RECT_BENCHMARKS(BACKEND, ATTRIBUTES)
576#define OTHER_BENCHMARKS(BACKEND, ATTRIBUTES) \
577 DRAW_IMAGE_NINE_BENCHMARKS(BACKEND, ATTRIBUTES) \
578 DRAW_VERTICES_BENCHMARKS(BACKEND, ATTRIBUTES) \
579 DRAW_SHADOW_BENCHMARKS(BACKEND, ATTRIBUTES) \
580 SAVE_LAYER_BENCHMARKS(BACKEND, ATTRIBUTES)
582#define RUN_DISPLAYLIST_BENCHMARKS(BACKEND) \
583 STROKE_BENCHMARKS(BACKEND, kStrokedStyle) \
584 STROKE_BENCHMARKS(BACKEND, kStrokedStyle | kAntiAliasing) \
585 STROKE_BENCHMARKS(BACKEND, kStrokedStyle | kHairlineStroke) \
586 STROKE_BENCHMARKS(BACKEND, kStrokedStyle | kHairlineStroke | \
588 FILL_BENCHMARKS(BACKEND, kFilledStyle) \
589 FILL_BENCHMARKS(BACKEND, kFilledStyle | kAntiAliasing) \
590 ANTI_ALIASING_BENCHMARKS(BACKEND, kEmpty) \
591 ANTI_ALIASING_BENCHMARKS(BACKEND, kAntiAliasing) \
592 OTHER_BENCHMARKS(BACKEND, kEmpty)
void BM_DrawVertices(benchmark::State &state, BackendType backend_type, unsigned attributes, DlVertexMode mode)
void BM_DrawPath(benchmark::State &state, BackendType backend_type, unsigned attributes, PathVerb type)
void BM_DrawPoints(benchmark::State &state, BackendType backend_type, unsigned attributes, DlPointMode mode)
void BM_DrawOval(benchmark::State &state, BackendType backend_type, unsigned attributes)
void BM_DrawShadow(benchmark::State &state, BackendType backend_type, unsigned attributes, bool transparent_occluder, PathVerb type)
void BM_DrawImage(benchmark::State &state, BackendType backend_type, unsigned attributes, DlImageSampling options, bool upload_bitmap)
void BM_DrawLine(benchmark::State &state, BackendType backend_type, unsigned attributes)
void BM_DrawCircle(benchmark::State &state, BackendType backend_type, unsigned attributes)
void BM_DrawRRect(benchmark::State &state, BackendType backend_type, unsigned attributes, RRectType type)
void BM_DrawRect(benchmark::State &state, BackendType backend_type, unsigned attributes)
void BM_DrawDRRect(benchmark::State &state, BackendType backend_type, unsigned attributes, RRectType type)
void BM_DrawTextBlob(benchmark::State &state, BackendType backend_type, unsigned attributes)
void BM_DrawArc(benchmark::State &state, BackendType backend_type, unsigned attributes)
void BM_DrawImageNine(benchmark::State &state, BackendType backend_type, unsigned attributes, const DlFilterMode filter, bool upload_bitmap)
void BM_SaveLayer(benchmark::State &state, BackendType backend_type, unsigned attributes, size_t save_depth)
void BM_DrawImageRect(benchmark::State &state, BackendType backend_type, unsigned attributes, DlImageSampling options, DlSrcRectConstraint constraint, bool upload_bitmap)
DlVertexMode
Defines the way in which the vertices of a DlVertices object are separated into triangles into which ...
impeller::ShaderType type