Mercurial > sdl-ios-xcode
diff test/testblitspeed.c @ 1895:c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 10 Jul 2006 21:04:37 +0000 |
parents | cf59e7b91ed4 |
children | c785543d1843 |
line wrap: on
line diff
--- a/test/testblitspeed.c Thu Jul 06 18:01:37 2006 +0000 +++ b/test/testblitspeed.c Mon Jul 10 21:04:37 2006 +0000 @@ -15,27 +15,30 @@ static int testSeconds = 10; -static int percent(int val, int total) +static int +percent(int val, int total) { - return((int) ((((float) val) / ((float) total)) * 100.0f)); + return ((int) ((((float) val) / ((float) total)) * 100.0f)); } -static int randRange(int lo, int hi) +static int +randRange(int lo, int hi) { - return(lo + (int) (((double) hi)*rand()/(RAND_MAX+1.0))); + return (lo + (int) (((double) hi) * rand() / (RAND_MAX + 1.0))); } -static void copy_trunc_str(char *str, size_t strsize, const char *flagstr) +static void +copy_trunc_str(char *str, size_t strsize, const char *flagstr) { - if ( (strlen(str) + strlen(flagstr)) >= (strsize - 1) ) + if ((strlen(str) + strlen(flagstr)) >= (strsize - 1)) strcpy(str + (strsize - 5), " ..."); else strcat(str, flagstr); } -static void __append_sdl_surface_flag(SDL_Surface *_surface, char *str, - size_t strsize, Uint32 flag, - const char *flagstr) +static void +__append_sdl_surface_flag(SDL_Surface * _surface, char *str, + size_t strsize, Uint32 flag, const char *flagstr) { if (_surface->flags & flag) copy_trunc_str(str, strsize, flagstr); @@ -45,22 +48,28 @@ #define append_sdl_surface_flag(a, b, c, fl) __append_sdl_surface_flag(a, b, c, fl, " " #fl) #define print_tf_state(str, val) printf("%s: {%s}\n", str, (val) ? "true" : "false" ) -static void output_videoinfo_details(void) +static void +output_videoinfo_details(void) { const SDL_VideoInfo *info = SDL_GetVideoInfo(); printf("SDL_GetVideoInfo():\n"); if (info == NULL) printf(" (null.)\n"); - else - { + else { print_tf_state(" hardware surface available", info->hw_available); print_tf_state(" window manager available", info->wm_available); - print_tf_state(" accelerated hardware->hardware blits", info->blit_hw); - print_tf_state(" accelerated hardware->hardware colorkey blits", info->blit_hw_CC); - print_tf_state(" accelerated hardware->hardware alpha blits", info->blit_hw_A); - print_tf_state(" accelerated software->hardware blits", info->blit_sw); - print_tf_state(" accelerated software->hardware colorkey blits", info->blit_sw_CC); - print_tf_state(" accelerated software->hardware alpha blits", info->blit_sw_A); + print_tf_state(" accelerated hardware->hardware blits", + info->blit_hw); + print_tf_state(" accelerated hardware->hardware colorkey blits", + info->blit_hw_CC); + print_tf_state(" accelerated hardware->hardware alpha blits", + info->blit_hw_A); + print_tf_state(" accelerated software->hardware blits", + info->blit_sw); + print_tf_state(" accelerated software->hardware colorkey blits", + info->blit_sw_CC); + print_tf_state(" accelerated software->hardware alpha blits", + info->blit_sw_A); print_tf_state(" accelerated color fills", info->blit_fill); printf(" video memory: (%d)\n", info->video_mem); } @@ -68,63 +77,58 @@ printf("\n"); } -static void output_surface_details(const char *name, SDL_Surface *surface) +static void +output_surface_details(const char *name, SDL_Surface * surface) { printf("Details for %s:\n", name); - if (surface == NULL) - { + if (surface == NULL) { printf("-WARNING- You've got a NULL surface!"); - } - else - { + } else { char f[256]; printf(" width : %d\n", surface->w); printf(" height : %d\n", surface->h); - printf(" depth : %d bits per pixel\n", surface->format->BitsPerPixel); + printf(" depth : %d bits per pixel\n", + surface->format->BitsPerPixel); printf(" pitch : %d\n", (int) surface->pitch); printf(" alpha : %d\n", (int) surface->format->alpha); - printf(" colorkey : 0x%X\n", (unsigned int) surface->format->colorkey); + printf(" colorkey : 0x%X\n", + (unsigned int) surface->format->colorkey); printf(" red bits : 0x%08X mask, %d shift, %d loss\n", - (int) surface->format->Rmask, - (int) surface->format->Rshift, - (int) surface->format->Rloss); + (int) surface->format->Rmask, + (int) surface->format->Rshift, (int) surface->format->Rloss); printf(" green bits : 0x%08X mask, %d shift, %d loss\n", - (int) surface->format->Gmask, - (int) surface->format->Gshift, - (int) surface->format->Gloss); + (int) surface->format->Gmask, + (int) surface->format->Gshift, (int) surface->format->Gloss); printf(" blue bits : 0x%08X mask, %d shift, %d loss\n", - (int) surface->format->Bmask, - (int) surface->format->Bshift, - (int) surface->format->Bloss); + (int) surface->format->Bmask, + (int) surface->format->Bshift, (int) surface->format->Bloss); printf(" alpha bits : 0x%08X mask, %d shift, %d loss\n", - (int) surface->format->Amask, - (int) surface->format->Ashift, - (int) surface->format->Aloss); + (int) surface->format->Amask, + (int) surface->format->Ashift, (int) surface->format->Aloss); f[0] = '\0'; - /*append_sdl_surface_flag(surface, f, sizeof (f), SDL_SWSURFACE);*/ + /*append_sdl_surface_flag(surface, f, sizeof (f), SDL_SWSURFACE); */ if ((surface->flags & SDL_HWSURFACE) == 0) - copy_trunc_str(f, sizeof (f), " SDL_SWSURFACE"); + copy_trunc_str(f, sizeof(f), " SDL_SWSURFACE"); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_HWSURFACE); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_ASYNCBLIT); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_ANYFORMAT); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_HWPALETTE); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_DOUBLEBUF); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_FULLSCREEN); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_OPENGL); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_OPENGLBLIT); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_RESIZABLE); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_NOFRAME); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_HWACCEL); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_SRCCOLORKEY); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_RLEACCELOK); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_RLEACCEL); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_SRCALPHA); - append_sdl_surface_flag(surface, f, sizeof (f), SDL_PREALLOC); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_HWSURFACE); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_ASYNCBLIT); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_ANYFORMAT); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_HWPALETTE); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_DOUBLEBUF); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_FULLSCREEN); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_OPENGL); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_RESIZABLE); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_NOFRAME); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_HWACCEL); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_SRCCOLORKEY); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_RLEACCELOK); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_RLEACCEL); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_SRCALPHA); + append_sdl_surface_flag(surface, f, sizeof(f), SDL_PREALLOC); if (f[0] == '\0') strcpy(f, " (none)"); @@ -135,14 +139,16 @@ printf("\n"); } -static void output_details(void) +static void +output_details(void) { output_videoinfo_details(); output_surface_details("Source Surface", src); output_surface_details("Destination Surface", dest); } -static Uint32 blit(SDL_Surface *dst, SDL_Surface *src, int x, int y) +static Uint32 +blit(SDL_Surface * dst, SDL_Surface * src, int x, int y) { Uint32 start = 0; SDL_Rect srcRect; @@ -152,39 +158,41 @@ srcRect.y = 0; dstRect.x = x; dstRect.y = y; - dstRect.w = srcRect.w = src->w; /* SDL will clip as appropriate. */ + dstRect.w = srcRect.w = src->w; /* SDL will clip as appropriate. */ dstRect.h = srcRect.h = src->h; start = SDL_GetTicks(); SDL_BlitSurface(src, &srcRect, dst, &dstRect); - return(SDL_GetTicks() - start); + return (SDL_GetTicks() - start); } -static void blitCentered(SDL_Surface *dst, SDL_Surface *src) +static void +blitCentered(SDL_Surface * dst, SDL_Surface * src) { int x = (dst->w - src->w) / 2; int y = (dst->h - src->h) / 2; blit(dst, src, x, y); } -static int atoi_hex(const char *str) +static int +atoi_hex(const char *str) { if (str == NULL) return 0; - if (strlen(str) > 2) - { + if (strlen(str) > 2) { int retval = 0; if ((str[0] == '0') && (str[1] == 'x')) sscanf(str + 2, "%X", &retval); - return(retval); + return (retval); } - return(atoi(str)); + return (atoi(str)); } -static int setup_test(int argc, char **argv) +static int +setup_test(int argc, char **argv) { const char *dumpfile = NULL; SDL_Surface *bmp = NULL; @@ -213,8 +221,7 @@ int screenSurface = 0; int i = 0; - for (i = 1; i < argc; i++) - { + for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (strcmp(arg, "--dstbpp") == 0) @@ -256,63 +263,59 @@ else if (strcmp(arg, "--dumpfile") == 0) dumpfile = argv[++i]; /* !!! FIXME: set colorkey. */ - else if (0) /* !!! FIXME: we handle some commandlines elsewhere now */ - { + else if (0) { /* !!! FIXME: we handle some commandlines elsewhere now */ fprintf(stderr, "Unknown commandline option: %s\n", arg); - return(0); + return (0); } } - if (SDL_Init(SDL_INIT_VIDEO) == -1) - { + if (SDL_Init(SDL_INIT_VIDEO) == -1) { fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError()); - return(0); + return (0); } bmp = SDL_LoadBMP("sample.bmp"); - if (bmp == NULL) - { + if (bmp == NULL) { fprintf(stderr, "SDL_LoadBMP failed: %s\n", SDL_GetError()); SDL_Quit(); - return(0); + return (0); } - if ((dstflags & SDL_HWSURFACE) == 0) dstflags |= SDL_SWSURFACE; - if ((srcflags & SDL_HWSURFACE) == 0) srcflags |= SDL_SWSURFACE; + if ((dstflags & SDL_HWSURFACE) == 0) + dstflags |= SDL_SWSURFACE; + if ((srcflags & SDL_HWSURFACE) == 0) + srcflags |= SDL_SWSURFACE; if (screenSurface) dest = SDL_SetVideoMode(dstw, dsth, dstbpp, dstflags); - else - { + else { dest = SDL_CreateRGBSurface(dstflags, dstw, dsth, dstbpp, dstrmask, dstgmask, dstbmask, dstamask); } - if (dest == NULL) - { + if (dest == NULL) { fprintf(stderr, "dest surface creation failed: %s\n", SDL_GetError()); SDL_Quit(); - return(0); + return (0); } src = SDL_CreateRGBSurface(srcflags, srcw, srch, srcbpp, srcrmask, srcgmask, srcbmask, srcamask); - if (src == NULL) - { + if (src == NULL) { fprintf(stderr, "src surface creation failed: %s\n", SDL_GetError()); SDL_Quit(); - return(0); + return (0); } /* handle alpha settings... */ - srcalphaflags = (src->flags&SDL_SRCALPHA) | (src->flags&SDL_RLEACCEL); - dstalphaflags = (dest->flags&SDL_SRCALPHA) | (dest->flags&SDL_RLEACCEL); + srcalphaflags = (src->flags & SDL_SRCALPHA) | (src->flags & SDL_RLEACCEL); + dstalphaflags = + (dest->flags & SDL_SRCALPHA) | (dest->flags & SDL_RLEACCEL); origsrcalphaflags = srcalphaflags; origdstalphaflags = dstalphaflags; srcalpha = src->format->alpha; dstalpha = dest->format->alpha; - for (i = 1; i < argc; i++) - { + for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (strcmp(arg, "--srcalpha") == 0) @@ -336,9 +339,11 @@ else if (strcmp(arg, "--dstnorleaccel") == 0) dstalphaflags &= ~SDL_RLEACCEL; } - if ((dstalphaflags != origdstalphaflags) || (dstalpha != dest->format->alpha)) + if ((dstalphaflags != origdstalphaflags) + || (dstalpha != dest->format->alpha)) SDL_SetAlpha(dest, dstalphaflags, (Uint8) dstalpha); - if ((srcalphaflags != origsrcalphaflags) || (srcalpha != src->format->alpha)) + if ((srcalphaflags != origsrcalphaflags) + || (srcalpha != src->format->alpha)) SDL_SetAlpha(src, srcalphaflags, (Uint8) srcalpha); /* set some sane defaults so we can see if the blit code is broken... */ @@ -349,15 +354,16 @@ SDL_FreeSurface(bmp); if (dumpfile) - SDL_SaveBMP(src, dumpfile); /* make sure initial convert is sane. */ + SDL_SaveBMP(src, dumpfile); /* make sure initial convert is sane. */ output_details(); - return(1); + return (1); } -static void test_blit_speed(void) +static void +test_blit_speed(void) { Uint32 clearColor = SDL_MapRGB(dest->format, 0, 0, 0); Uint32 iterations = 0; @@ -376,45 +382,43 @@ now = SDL_GetTicks(); end = now + testms; - do - { + do { /* pump the event queue occasionally to keep OS happy... */ - if (now - last > 1000) - { + if (now - last > 1000) { last = now; - while (SDL_PollEvent(&event)) { /* no-op. */ } + while (SDL_PollEvent(&event)) { /* no-op. */ + } } iterations++; elasped += blit(dest, src, randRange(0, wmax), randRange(0, hmax)); - if (isScreen) - { - SDL_Flip(dest); /* show it! */ - SDL_FillRect(dest, NULL, clearColor); /* blank it for next time! */ + if (isScreen) { + SDL_Flip(dest); /* show it! */ + SDL_FillRect(dest, NULL, clearColor); /* blank it for next time! */ } now = SDL_GetTicks(); - } while (now < end); + } + while (now < end); printf("Non-blitting crap accounted for %d percent of this run.\n", - percent(testms - elasped, testms)); + percent(testms - elasped, testms)); printf("%d blits took %d ms (%d fps).\n", - (int) iterations, - (int) elasped, - (int) (((float)iterations) / (((float)elasped) / 1000.0f))); + (int) iterations, + (int) elasped, + (int) (((float) iterations) / (((float) elasped) / 1000.0f))); } -int main(int argc, char **argv) +int +main(int argc, char **argv) { int initialized = setup_test(argc, argv); - if (initialized) - { + if (initialized) { test_blit_speed(); SDL_Quit(); } - return(!initialized); + return (!initialized); } /* end of testblitspeed.c ... */ -