| 18 | static fl::u32 nsPerCall(fl::u32 us) { return (us * 1000) / kIters; } |
| 19 | |
| 20 | FL_TEST_FILE(FL_FILEPATH) { |
| 21 | |
| 22 | FL_TEST_CASE("Graphics performance - drawDisc") { |
| 23 | CRGB buffer[1024] = {}; |
| 24 | fl::CanvasRGB canvas(buffer, 32, 32); |
| 25 | fl::s16x16 cx = fl::s16x16(16), cy = fl::s16x16(16); |
| 26 | canvas.drawDisc(CRGB(255, 0, 0), cx, cy, fl::s16x16(8)); |
| 27 | |
| 28 | auto start = fl::chrono::steady_clock::now(); |
| 29 | for (fl::u16 i = 0; i < kIters; ++i) { |
| 30 | fl::s16x16 r = fl::s16x16(2) + fl::s16x16::from_raw((fl::i32)(i % 10) * (fl::s16x16::SCALE / 2)); |
| 31 | canvas.drawDisc(CRGB(255, 0, 0), cx, cy, r); |
| 32 | } |
| 33 | auto end = fl::chrono::steady_clock::now(); |
| 34 | fl::u32 us = (fl::u32)fl::chrono::duration_cast<fl::chrono::microseconds>(end - start).count(); |
| 35 | fl::printf(" drawDisc: %u us total, %u ns/call\n", (unsigned)us, (unsigned)nsPerCall(us)); |
| 36 | FL_CHECK(us < 100000); |
| 37 | } |
| 38 | |
| 39 | FL_TEST_CASE("Graphics performance - drawDisc large") { |
| 40 | CRGB buffer[4096] = {}; |
| 41 | fl::CanvasRGB canvas(buffer, 64, 64); |
| 42 | fl::s16x16 cx = fl::s16x16(32), cy = fl::s16x16(32); |
| 43 | canvas.drawDisc(CRGB(255, 0, 0), cx, cy, fl::s16x16(20)); |
| 44 | |
| 45 | auto start = fl::chrono::steady_clock::now(); |
| 46 | for (fl::u16 i = 0; i < kIters; ++i) { |
| 47 | fl::s16x16 r = fl::s16x16(8) + fl::s16x16::from_raw((fl::i32)(i % 20) * (fl::s16x16::SCALE / 2)); |
| 48 | canvas.drawDisc(CRGB(255, 0, 0), cx, cy, r); |
| 49 | } |
| 50 | auto end = fl::chrono::steady_clock::now(); |
| 51 | fl::u32 us = (fl::u32)fl::chrono::duration_cast<fl::chrono::microseconds>(end - start).count(); |
| 52 | fl::printf(" drawDisc(large): %u us total, %u ns/call\n", (unsigned)us, (unsigned)nsPerCall(us)); |
| 53 | FL_CHECK(us < 200000); |
| 54 | } |
| 55 | |
| 56 | FL_TEST_CASE("Graphics performance - drawRing") { |
| 57 | CRGB buffer[1024] = {}; |
| 58 | fl::CanvasRGB canvas(buffer, 32, 32); |
| 59 | fl::s16x16 cx = fl::s16x16(16), cy = fl::s16x16(16); |
| 60 | canvas.drawRing(CRGB(0, 255, 0), cx, cy, fl::s16x16(6), fl::s16x16(2)); |
| 61 | |
| 62 | auto start = fl::chrono::steady_clock::now(); |
| 63 | for (fl::u16 i = 0; i < kIters; ++i) { |
| 64 | fl::s16x16 r = fl::s16x16(2) + fl::s16x16::from_raw((fl::i32)(i % 8) * (fl::s16x16::SCALE / 2)); |
| 65 | fl::s16x16 t = fl::s16x16(1) + fl::s16x16::from_raw((fl::i32)(i % 4) * (fl::s16x16::SCALE / 4)); |
| 66 | canvas.drawRing(CRGB(0, 255, 0), cx, cy, r, t); |
| 67 | } |
| 68 | auto end = fl::chrono::steady_clock::now(); |
| 69 | fl::u32 us = (fl::u32)fl::chrono::duration_cast<fl::chrono::microseconds>(end - start).count(); |
| 70 | fl::printf(" drawRing: %u us total, %u ns/call\n", (unsigned)us, (unsigned)nsPerCall(us)); |
| 71 | FL_CHECK(us < 150000); |
| 72 | } |
| 73 | |
| 74 | FL_TEST_CASE("Graphics performance - drawLine") { |
| 75 | CRGB buffer[1024] = {}; |
| 76 | fl::CanvasRGB canvas(buffer, 32, 32); |
| 77 | canvas.drawLine(CRGB(0, 0, 255), fl::s16x16(0), fl::s16x16(0), fl::s16x16(31), fl::s16x16(31)); |