bl_bench_backend.cpp (4382B)
1 // This file is part of Blend2D project <https://blend2d.com> 2 // 3 // See LICENSE.md for license and copyright information 4 // SPDX-License-Identifier: Zlib 5 6 #include "bl_bench_app.h" 7 #include "bl_bench_backend.h" 8 #include "shape_data.h" 9 10 #include <chrono> 11 12 namespace blbench { 13 14 // blbench::Backend - Construction & Destruction 15 // ================================================= 16 17 Backend::Backend() 18 : _name(), 19 _params(), 20 _duration(0), 21 _rnd_coord(0x19AE0DDAE3FA7391ull), 22 _rnd_color(0x94BD7A499AD10011ull), 23 _rnd_extra(0x1ABD9CC9CAF0F123ull), 24 _rnd_sprite_id(0) {} 25 Backend::~Backend() {} 26 27 // blbench::Backend - Run 28 // ========================== 29 30 static void BenchModule_shape_helper(Backend* mod, RenderOp op, ShapeKind shapeKind) { 31 ShapeData shapeData; 32 get_shape_data(shapeData, shapeKind); 33 mod->render_shape(op, shapeData); 34 } 35 36 void Backend::run(const BenchApp& app, const BenchParams& params) { 37 _params = params; 38 39 _rnd_coord.rewind(); 40 _rnd_color.rewind(); 41 _rnd_extra.rewind(); 42 _rnd_sprite_id = 0; 43 44 // Initialize the sprites. 45 for (uint32_t i = 0; i < kBenchNumSprites; i++) { 46 _sprites[i] = app.get_scaled_sprite(i, params.shape_size); 47 } 48 49 before_run(); 50 auto start = std::chrono::high_resolution_clock::now(); 51 52 switch (_params.testKind) { 53 case TestKind::kFillAlignedRect : render_rect_a(RenderOp::kFillNonZero); break; 54 case TestKind::kFillSmoothRect : render_rect_f(RenderOp::kFillNonZero); break; 55 case TestKind::kFillRotatedRect : render_rect_rotated(RenderOp::kFillNonZero); break; 56 case TestKind::kFillSmoothRound : render_round_f(RenderOp::kFillNonZero); break; 57 case TestKind::kFillRotatedRound : render_round_rotated(RenderOp::kFillNonZero); break; 58 case TestKind::kFillTriangle : render_polygon(RenderOp::kFillNonZero, 3); break; 59 case TestKind::kFillPolygon10NZ : render_polygon(RenderOp::kFillNonZero, 10); break; 60 case TestKind::kFillPolygon10EO : render_polygon(RenderOp::kFillEvenOdd, 10); break; 61 case TestKind::kFillPolygon20NZ : render_polygon(RenderOp::kFillNonZero, 20); break; 62 case TestKind::kFillPolygon20EO : render_polygon(RenderOp::kFillEvenOdd, 20); break; 63 case TestKind::kFillPolygon40NZ : render_polygon(RenderOp::kFillNonZero, 40); break; 64 case TestKind::kFillPolygon40EO : render_polygon(RenderOp::kFillEvenOdd, 40); break; 65 case TestKind::kFillButterfly : BenchModule_shape_helper(this, RenderOp::kFillNonZero, ShapeKind::kButterfly); break; 66 case TestKind::kFillFish : BenchModule_shape_helper(this, RenderOp::kFillNonZero, ShapeKind::kFish); break; 67 case TestKind::kFillDragon : BenchModule_shape_helper(this, RenderOp::kFillNonZero, ShapeKind::kDragon); break; 68 case TestKind::kFillWorld : BenchModule_shape_helper(this, RenderOp::kFillNonZero, ShapeKind::kWorld); break; 69 70 case TestKind::kStrokeAlignedRect : render_rect_a(RenderOp::kStroke); break; 71 case TestKind::kStrokeSmoothRect : render_rect_f(RenderOp::kStroke); break; 72 case TestKind::kStrokeRotatedRect : render_rect_rotated(RenderOp::kStroke); break; 73 case TestKind::kStrokeSmoothRound : render_round_f(RenderOp::kStroke); break; 74 case TestKind::kStrokeRotatedRound: render_round_rotated(RenderOp::kStroke); break; 75 case TestKind::kStrokeTriangle : render_polygon(RenderOp::kStroke, 3); break; 76 case TestKind::kStrokePolygon10 : render_polygon(RenderOp::kStroke, 10); break; 77 case TestKind::kStrokePolygon20 : render_polygon(RenderOp::kStroke, 20); break; 78 case TestKind::kStrokePolygon40 : render_polygon(RenderOp::kStroke, 40); break; 79 case TestKind::kStrokeButterfly : BenchModule_shape_helper(this, RenderOp::kStroke, ShapeKind::kButterfly); break; 80 case TestKind::kStrokeFish : BenchModule_shape_helper(this, RenderOp::kStroke, ShapeKind::kFish); break; 81 case TestKind::kStrokeDragon : BenchModule_shape_helper(this, RenderOp::kStroke, ShapeKind::kDragon); break; 82 case TestKind::kStrokeWorld : BenchModule_shape_helper(this, RenderOp::kStroke, ShapeKind::kWorld); break; 83 } 84 85 flush(); 86 87 auto end = std::chrono::high_resolution_clock::now(); 88 std::chrono::duration<double> elapsed = end - start; 89 _duration = uint64_t(elapsed.count() * 1000000); 90 91 after_run(); 92 } 93 94 void Backend::serialize_info(JSONBuilder& json) const { (void)json; } 95 96 } // {blbench}