From 55694af091d01efc65c27df4ae7bbbe8444818da Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 3 Jun 2017 23:31:14 +0300 Subject: Add test for custom blitter vs sdl_gfx. Result: custom is 3x faster. --- src/test/testlauncher.cpp | 94 +++++++++++++++++++++++++++++++++++++++++++---- src/test/testlauncher.h | 2 + 2 files changed, 88 insertions(+), 8 deletions(-) (limited to 'src/test') diff --git a/src/test/testlauncher.cpp b/src/test/testlauncher.cpp index 27516417b..b44726a97 100644 --- a/src/test/testlauncher.cpp +++ b/src/test/testlauncher.cpp @@ -54,6 +54,9 @@ #include "resources/image/image.h" + +#include + #include #ifdef WIN32 @@ -63,6 +66,18 @@ #include +#include "localconsts.h" + +#ifndef SDL_BIG_ENDIAN +#error missing SDL_endian.h +#endif // SDL_BYTEORDER + +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#ifndef USE_SDL2 +#include "resources/sdlgfxblitfunc.h" +#endif // USE_SDL2 +#endif // SDL_BYTEORDER == SDL_LIL_ENDIAN + #include "debug.h" extern Font *boldFont; @@ -112,6 +127,8 @@ int TestLauncher::exec() return testStackSpeed(); else if (mTest == "107") return testDyeASpeed(); + else if (mTest == "108") + return testBlitSpeed(); return -1; } @@ -485,14 +502,6 @@ int TestLauncher::testDye() } #if defined __linux__ || defined __linux -#ifdef SIMD_SUPPORTED -static void initBuffer(uint32_t *const buf, - const int sz) -{ - for (int f = 0; f < sz; f ++) - buf[f] = f; -} - static void calcTime(const char *const msg1, const char *const msg2, const timespec &time1, @@ -508,6 +517,14 @@ static void calcTime(const char *const msg1, printf("%s: %011ld\n", msg2, diff); } +#ifdef SIMD_SUPPORTED +static void initBuffer(uint32_t *const buf, + const int sz) +{ + for (int f = 0; f < sz; f ++) + buf[f] = f; +} + #define runDyeTest(msg1, msg2, func) \ initBuffer(buf, sz); \ pal.func(buf, sz); \ @@ -560,6 +577,67 @@ int TestLauncher::testDyeASpeed() return 0; } +int TestLauncher::testBlitSpeed() +{ +#if defined __linux__ || defined __linux +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#ifndef USE_SDL2 + + timespec time1; + timespec time2; + const int cnt1 = 10000; + const int cnt2 = 10; + + SDL_Surface *const srcSurface = imageHelper->create32BitSurface( + 64, 64); + SDL_Surface *const dstSurface = imageHelper->create32BitSurface( + 512, 512); + for (int f = 0; f < 64 * 64; f ++) + static_cast(srcSurface->pixels)[f] = 0x11223344; + clock_gettime(CLOCK_MONOTONIC, &time1); + for (int d = 0; d < cnt2; d ++) + { + for (int f = 0; f < 512 * 512; f ++) + static_cast(dstSurface->pixels)[f] = 0x55667788; + for (int f = 0; f < cnt1; f ++) + { + SDLgfxBlitRGBA(srcSurface, + nullptr, + dstSurface, + nullptr); + } + } + calcTime("blit test", + "custom time", + time1, + time2, + static_cast(dstSurface->pixels)); + + clock_gettime(CLOCK_MONOTONIC, &time1); + for (int d = 0; d < cnt2; d ++) + { + for (int f = 0; f < 512 * 512; f ++) + static_cast(dstSurface->pixels)[f] = 0x55667788; + for (int f = 0; f < cnt1; f ++) + { + SDL_gfxBlitRGBA(srcSurface, + nullptr, + dstSurface, + nullptr); + } + } + calcTime("blit test", + "SDL_gfx time", + time1, + time2, + static_cast(dstSurface->pixels)); + +#endif // USE_SDL2 +#endif // SDL_BYTEORDER == SDL_LIL_ENDIAN +#endif // defined __linux__ || defined __linux + return 0; +} + int TestLauncher::testStackSpeed() { /* diff --git a/src/test/testlauncher.h b/src/test/testlauncher.h index 136dc0250..efd0eea2b 100644 --- a/src/test/testlauncher.h +++ b/src/test/testlauncher.h @@ -80,6 +80,8 @@ class TestLauncher final int testStackSpeed(); + int testBlitSpeed(); + private: std::string mTest; -- cgit v1.2.3-60-g2f50