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"
102 bool transparent_occluder,
111#define DRAW_LINE_BENCHMARKS(BACKEND, ATTRIBUTES) \
112 BENCHMARK_CAPTURE(BM_DrawLine, BACKEND, \
113 BackendType::k##BACKEND##Backend, \
115 ->RangeMultiplier(2) \
118 ->Unit(benchmark::kMillisecond);
121#define DRAW_RECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
122 BENCHMARK_CAPTURE(BM_DrawRect, BACKEND, \
123 BackendType::k##BACKEND##Backend, \
125 ->RangeMultiplier(2) \
128 ->Unit(benchmark::kMillisecond);
131#define DRAW_OVAL_BENCHMARKS(BACKEND, ATTRIBUTES) \
132 BENCHMARK_CAPTURE(BM_DrawOval, BACKEND, \
133 BackendType::k##BACKEND##Backend, \
135 ->RangeMultiplier(2) \
138 ->Unit(benchmark::kMillisecond);
141#define DRAW_CIRCLE_BENCHMARKS(BACKEND, ATTRIBUTES) \
142 BENCHMARK_CAPTURE(BM_DrawCircle, BACKEND, \
143 BackendType::k##BACKEND##Backend, \
145 ->RangeMultiplier(2) \
148 ->Unit(benchmark::kMillisecond);
151#define DRAW_ARC_BENCHMARKS(BACKEND, ATTRIBUTES) \
152 BENCHMARK_CAPTURE(BM_DrawArc, BACKEND, \
153 BackendType::k##BACKEND##Backend, \
155 ->RangeMultiplier(2) \
158 ->Unit(benchmark::kMillisecond);
161#define DRAW_PATH_BENCHMARKS(BACKEND, ATTRIBUTES) \
162 BENCHMARK_CAPTURE(BM_DrawPath, \
164 BackendType::k##BACKEND##Backend, \
167 ->RangeMultiplier(2) \
170 ->Unit(benchmark::kMillisecond) \
173 BENCHMARK_CAPTURE(BM_DrawPath, \
175 BackendType::k##BACKEND##Backend, \
178 ->RangeMultiplier(2) \
181 ->Unit(benchmark::kMillisecond) \
184 BENCHMARK_CAPTURE(BM_DrawPath, \
186 BackendType::k##BACKEND##Backend, \
189 ->RangeMultiplier(2) \
192 ->Unit(benchmark::kMillisecond) \
195 BENCHMARK_CAPTURE(BM_DrawPath, \
197 BackendType::k##BACKEND##Backend, \
200 ->RangeMultiplier(2) \
203 ->Unit(benchmark::kMillisecond) \
207#define DRAW_POINTS_BENCHMARKS(BACKEND, ATTRIBUTES) \
208 BENCHMARK_CAPTURE(BM_DrawPoints, Points/BACKEND, \
209 BackendType::k##BACKEND##Backend, \
211 DlPointMode::kPoints) \
212 ->RangeMultiplier(2) \
213 ->Range(1024, 32768) \
215 ->Unit(benchmark::kMillisecond); \
217 BENCHMARK_CAPTURE(BM_DrawPoints, Lines/BACKEND, \
218 BackendType::k##BACKEND##Backend, \
220 DlPointMode::kLines) \
221 ->RangeMultiplier(2) \
222 ->Range(1024, 32768) \
224 ->Unit(benchmark::kMillisecond); \
226 BENCHMARK_CAPTURE(BM_DrawPoints, Polygon/BACKEND, \
227 BackendType::k##BACKEND##Backend, \
229 DlPointMode::kPolygon) \
230 ->RangeMultiplier(2) \
231 ->Range(1024, 32768) \
233 ->Unit(benchmark::kMillisecond);
236#define DRAW_VERTICES_BENCHMARKS(BACKEND, ATTRIBUTES) \
237 BENCHMARK_CAPTURE(BM_DrawVertices, \
238 TriangleStrip/BACKEND, \
239 BackendType::k##BACKEND##Backend, \
241 DlVertexMode::kTriangleStrip) \
242 ->RangeMultiplier(2) \
245 ->Unit(benchmark::kMillisecond) \
248 BENCHMARK_CAPTURE(BM_DrawVertices, \
249 TriangleFan/BACKEND, \
250 BackendType::k##BACKEND##Backend, \
252 DlVertexMode::kTriangleFan) \
253 ->RangeMultiplier(2) \
256 ->Unit(benchmark::kMillisecond) \
259 BENCHMARK_CAPTURE(BM_DrawVertices, \
261 BackendType::k##BACKEND##Backend, \
263 DlVertexMode::kTriangles) \
264 ->RangeMultiplier(2) \
267 ->Unit(benchmark::kMillisecond) \
271#define DRAW_RRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
272 BENCHMARK_CAPTURE(BM_DrawRRect, Symmetric/BACKEND, \
273 BackendType::k##BACKEND##Backend, \
275 RRectType::kSimple) \
276 ->RangeMultiplier(2) \
279 ->Unit(benchmark::kMillisecond); \
281 BENCHMARK_CAPTURE(BM_DrawRRect, NinePatch/BACKEND, \
282 BackendType::k##BACKEND##Backend, \
284 RRectType::kNinePatch) \
285 ->RangeMultiplier(2) \
288 ->Unit(benchmark::kMillisecond); \
290 BENCHMARK_CAPTURE(BM_DrawRRect, Complex/BACKEND, \
291 BackendType::k##BACKEND##Backend, \
293 RRectType::kComplex) \
294 ->RangeMultiplier(2) \
297 ->Unit(benchmark::kMillisecond);
300#define DRAW_DRRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
301 BENCHMARK_CAPTURE(BM_DrawDRRect, Symmetric/BACKEND, \
302 BackendType::k##BACKEND##Backend, \
304 RRectType::kSimple) \
305 ->RangeMultiplier(2) \
308 ->Unit(benchmark::kMillisecond); \
310 BENCHMARK_CAPTURE(BM_DrawDRRect, NinePatch/BACKEND, \
311 BackendType::k##BACKEND##Backend, \
313 RRectType::kNinePatch) \
314 ->RangeMultiplier(2) \
317 ->Unit(benchmark::kMillisecond); \
319 BENCHMARK_CAPTURE(BM_DrawDRRect, Complex/BACKEND, \
320 BackendType::k##BACKEND##Backend, \
322 RRectType::kComplex) \
323 ->RangeMultiplier(2) \
326 ->Unit(benchmark::kMillisecond);
329#define DRAW_IMAGE_BENCHMARKS(BACKEND, ATTRIBUTES) \
330 BENCHMARK_CAPTURE(BM_DrawImage, Texture/BACKEND, \
331 BackendType::k##BACKEND##Backend, \
333 DlImageSampling::kNearestNeighbor, false) \
334 ->RangeMultiplier(2) \
337 ->Unit(benchmark::kMillisecond); \
339 BENCHMARK_CAPTURE(BM_DrawImage, Upload/BACKEND, \
340 BackendType::k##BACKEND##Backend, \
342 DlImageSampling::kNearestNeighbor, true) \
343 ->RangeMultiplier(2) \
346 ->Unit(benchmark::kMillisecond);
349#define DRAW_IMAGE_RECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
351 BM_DrawImageRect, Texture/Strict/BACKEND, \
352 BackendType::k##BACKEND##Backend, \
354 DlImageSampling::kNearestNeighbor, \
355 DlSrcRectConstraint::kStrict, false) \
356 ->RangeMultiplier(2) \
359 ->Unit(benchmark::kMillisecond); \
362 BM_DrawImageRect, Texture/Fast/BACKEND, \
363 BackendType::k##BACKEND##Backend, \
365 DlImageSampling::kNearestNeighbor, \
366 DlSrcRectConstraint::kFast, false) \
367 ->RangeMultiplier(2) \
370 ->Unit(benchmark::kMillisecond); \
373 BM_DrawImageRect, Upload/Strict/BACKEND, \
374 BackendType::k##BACKEND##Backend, \
376 DlImageSampling::kNearestNeighbor, \
377 DlSrcRectConstraint::kStrict, true) \
378 ->RangeMultiplier(2) \
381 ->Unit(benchmark::kMillisecond); \
384 BM_DrawImageRect, Upload/Fast/BACKEND, \
385 BackendType::k##BACKEND##Backend, \
387 DlImageSampling::kNearestNeighbor, \
388 DlSrcRectConstraint::kFast, true) \
389 ->RangeMultiplier(2) \
392 ->Unit(benchmark::kMillisecond);
395#define DRAW_IMAGE_NINE_BENCHMARKS(BACKEND, ATTRIBUTES) \
396 BENCHMARK_CAPTURE(BM_DrawImageNine, Texture/Nearest/BACKEND, \
397 BackendType::k##BACKEND##Backend, \
399 DlFilterMode::kNearest, false) \
400 ->RangeMultiplier(2) \
403 ->Unit(benchmark::kMillisecond); \
405 BENCHMARK_CAPTURE(BM_DrawImageNine, Upload/Nearest/BACKEND, \
406 BackendType::k##BACKEND##Backend, \
408 DlFilterMode::kNearest, true) \
409 ->RangeMultiplier(2) \
412 ->Unit(benchmark::kMillisecond); \
414 BENCHMARK_CAPTURE(BM_DrawImageNine, Texture/Linear/BACKEND, \
415 BackendType::k##BACKEND##Backend, \
417 DlFilterMode::kLinear, false) \
418 ->RangeMultiplier(2) \
421 ->Unit(benchmark::kMillisecond); \
423 BENCHMARK_CAPTURE(BM_DrawImageNine, Upload/Linear/BACKEND, \
424 BackendType::k##BACKEND##Backend, \
426 DlFilterMode::kLinear, true) \
427 ->RangeMultiplier(2) \
430 ->Unit(benchmark::kMillisecond);
433#define DRAW_TEXT_BLOB_BENCHMARKS(BACKEND, ATTRIBUTES) \
434 BENCHMARK_CAPTURE(BM_DrawTextBlob, BACKEND, \
435 BackendType::k##BACKEND##Backend, \
437 ->RangeMultiplier(2) \
440 ->Unit(benchmark::kMillisecond) \
444#define DRAW_SHADOW_BENCHMARKS(BACKEND, ATTRIBUTES) \
445 BENCHMARK_CAPTURE(BM_DrawShadow, Lines/Transparent/BACKEND, \
446 BackendType::k##BACKEND##Backend, \
450 ->RangeMultiplier(2) \
453 ->Unit(benchmark::kMillisecond); \
455 BENCHMARK_CAPTURE(BM_DrawShadow, Quads/Transparent/BACKEND, \
456 BackendType::k##BACKEND##Backend, \
460 ->RangeMultiplier(2) \
463 ->Unit(benchmark::kMillisecond); \
465 BENCHMARK_CAPTURE(BM_DrawShadow, Conics/Transparent/BACKEND, \
466 BackendType::k##BACKEND##Backend, \
470 ->RangeMultiplier(2) \
473 ->Unit(benchmark::kMillisecond); \
475 BENCHMARK_CAPTURE(BM_DrawShadow, Cubics/Transparent/BACKEND, \
476 BackendType::k##BACKEND##Backend, \
480 ->RangeMultiplier(2) \
483 ->Unit(benchmark::kMillisecond); \
485 BENCHMARK_CAPTURE(BM_DrawShadow, Lines/Opaque/BACKEND, \
486 BackendType::k##BACKEND##Backend, \
490 ->RangeMultiplier(2) \
493 ->Unit(benchmark::kMillisecond); \
495 BENCHMARK_CAPTURE(BM_DrawShadow, Quads/Opaque/BACKEND, \
496 BackendType::k##BACKEND##Backend, \
500 ->RangeMultiplier(2) \
503 ->Unit(benchmark::kMillisecond); \
505 BENCHMARK_CAPTURE(BM_DrawShadow, Conics/Opaque/BACKEND, \
506 BackendType::k##BACKEND##Backend, \
510 ->RangeMultiplier(2) \
513 ->Unit(benchmark::kMillisecond); \
515 BENCHMARK_CAPTURE(BM_DrawShadow, Cubics/Opaque/BACKEND, \
516 BackendType::k##BACKEND##Backend, \
520 ->RangeMultiplier(2) \
523 ->Unit(benchmark::kMillisecond);
526#define SAVE_LAYER_BENCHMARKS(BACKEND, ATTRIBUTES) \
527 BENCHMARK_CAPTURE(BM_SaveLayer, Depth 1/BACKEND, \
528 BackendType::k##BACKEND##Backend, \
531 ->RangeMultiplier(2) \
534 ->Unit(benchmark::kMillisecond); \
536 BENCHMARK_CAPTURE(BM_SaveLayer, Depth 8/BACKEND, \
537 BackendType::k##BACKEND##Backend, \
540 ->RangeMultiplier(2) \
543 ->Unit(benchmark::kMillisecond);
546#define STROKE_BENCHMARKS(BACKEND, ATTRIBUTES) \
547 DRAW_LINE_BENCHMARKS(BACKEND, ATTRIBUTES) \
548 DRAW_POINTS_BENCHMARKS(BACKEND, ATTRIBUTES) \
549 DRAW_RECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
550 DRAW_OVAL_BENCHMARKS(BACKEND, ATTRIBUTES) \
551 DRAW_CIRCLE_BENCHMARKS(BACKEND, ATTRIBUTES) \
552 DRAW_ARC_BENCHMARKS(BACKEND, ATTRIBUTES) \
553 DRAW_PATH_BENCHMARKS(BACKEND, ATTRIBUTES) \
554 DRAW_RRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
555 DRAW_DRRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
556 DRAW_TEXT_BLOB_BENCHMARKS(BACKEND, ATTRIBUTES)
559#define FILL_BENCHMARKS(BACKEND, ATTRIBUTES) \
560 DRAW_RECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
561 DRAW_OVAL_BENCHMARKS(BACKEND, ATTRIBUTES) \
562 DRAW_CIRCLE_BENCHMARKS(BACKEND, ATTRIBUTES) \
563 DRAW_ARC_BENCHMARKS(BACKEND, ATTRIBUTES) \
564 DRAW_PATH_BENCHMARKS(BACKEND, ATTRIBUTES) \
565 DRAW_RRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
566 DRAW_DRRECT_BENCHMARKS(BACKEND, ATTRIBUTES) \
567 DRAW_TEXT_BLOB_BENCHMARKS(BACKEND, ATTRIBUTES)
570#define ANTI_ALIASING_BENCHMARKS(BACKEND, ATTRIBUTES) \
571 DRAW_IMAGE_BENCHMARKS(BACKEND, ATTRIBUTES) \
572 DRAW_IMAGE_RECT_BENCHMARKS(BACKEND, ATTRIBUTES)
575#define OTHER_BENCHMARKS(BACKEND, ATTRIBUTES) \
576 DRAW_IMAGE_NINE_BENCHMARKS(BACKEND, ATTRIBUTES) \
577 DRAW_VERTICES_BENCHMARKS(BACKEND, ATTRIBUTES) \
578 DRAW_SHADOW_BENCHMARKS(BACKEND, ATTRIBUTES) \
579 SAVE_LAYER_BENCHMARKS(BACKEND, ATTRIBUTES)
581#define RUN_DISPLAYLIST_BENCHMARKS(BACKEND) \
582 STROKE_BENCHMARKS(BACKEND, kStrokedStyle) \
583 STROKE_BENCHMARKS(BACKEND, kStrokedStyle | kAntiAliasing) \
584 STROKE_BENCHMARKS(BACKEND, kStrokedStyle | kHairlineStroke) \
585 STROKE_BENCHMARKS(BACKEND, kStrokedStyle | kHairlineStroke | \
587 FILL_BENCHMARKS(BACKEND, kFilledStyle) \
588 FILL_BENCHMARKS(BACKEND, kFilledStyle | kAntiAliasing) \
589 ANTI_ALIASING_BENCHMARKS(BACKEND, kEmpty) \
590 ANTI_ALIASING_BENCHMARKS(BACKEND, kAntiAliasing) \
591 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)
DlPaint GetPaintForRun(unsigned attributes)
DlVertexMode
Defines the way in which the vertices of a DlVertices object are separated into triangles into which ...