Added testfill to test raw fill performance
authorSam Lantinga <slouken@libsdl.org>
Wed, 16 Dec 2009 02:08:59 +0000
changeset 3576 5ea08f1c29d0
parent 3575 239ae83fc2f6
child 3577 72024425b437
Added testfill to test raw fill performance
test/Makefile.in
test/testfill.c
--- a/test/Makefile.in	Wed Dec 16 01:19:58 2009 +0000
+++ b/test/Makefile.in	Wed Dec 16 02:08:59 2009 +0000
@@ -7,7 +7,7 @@
 CFLAGS  = @CFLAGS@
 LIBS	= @LIBS@
 
-TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testalpha$(EXE) testatomic$(EXE) testaudioinfo$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcursor$(EXE) testdraw2$(EXE) testdyngles$(EXE) testdyngl$(EXE) testerror$(EXE) testfile$(EXE) testgamma$(EXE) testgl2$(EXE) testgles$(EXE) testgl$(EXE) testhaptic$(EXE) testhread$(EXE) testiconv$(EXE) testime$(EXE) testintersections$(EXE) testjoystick$(EXE) testkeys$(EXE) testloadso$(EXE) testlock$(EXE) testmmousetablet$(EXE) testmultiaudio$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testpower$(EXE) testresample$(EXE) testsem$(EXE) testsprite2$(EXE) testsprite$(EXE) testspriteminimal$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm2$(EXE) testwm$(EXE) threadwin$(EXE) torturethread$(EXE)
+TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testalpha$(EXE) testatomic$(EXE) testaudioinfo$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcursor$(EXE) testdraw2$(EXE) testdyngles$(EXE) testdyngl$(EXE) testerror$(EXE) testfile$(EXE) testfill$(EXE) testgamma$(EXE) testgl2$(EXE) testgles$(EXE) testgl$(EXE) testhaptic$(EXE) testhread$(EXE) testiconv$(EXE) testime$(EXE) testintersections$(EXE) testjoystick$(EXE) testkeys$(EXE) testloadso$(EXE) testlock$(EXE) testmmousetablet$(EXE) testmultiaudio$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testpower$(EXE) testresample$(EXE) testsem$(EXE) testsprite2$(EXE) testsprite$(EXE) testspriteminimal$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm2$(EXE) testwm$(EXE) threadwin$(EXE) torturethread$(EXE)
 
 all: Makefile $(TARGETS)
 
@@ -65,6 +65,9 @@
 testfile$(EXE): $(srcdir)/testfile.c
 	$(CC) -o $@ $? $(CFLAGS) $(LIBS)
 
+testfill$(EXE): $(srcdir)/testfill.c
+	$(CC) -o $@ $? $(CFLAGS) $(LIBS)
+
 testgamma$(EXE): $(srcdir)/testgamma.c
 	$(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/testfill.c	Wed Dec 16 02:08:59 2009 +0000
@@ -0,0 +1,107 @@
+/* Simple program:  Fill the screen with colors as fast as possible */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#include "SDL.h"
+
+/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
+static void
+quit(int rc)
+{
+    SDL_Quit();
+    exit(rc);
+}
+
+int
+main(int argc, char *argv[])
+{
+    SDL_Surface *screen;
+    int width, height;
+    Uint8 video_bpp;
+    Uint32 videoflags;
+    Uint32 colors[3];
+    int i, done;
+    SDL_Event event;
+    Uint32 then, now, frames;
+
+    /* Initialize SDL */
+    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
+        fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
+        return (1);
+    }
+
+    width = 640;
+    height = 480;
+    video_bpp = 8;
+    videoflags = 0;
+    while (argc > 1) {
+        --argc;
+        if (strcmp(argv[argc - 1], "-width") == 0) {
+            width = atoi(argv[argc]);
+            --argc;
+        } else if (strcmp(argv[argc - 1], "-height") == 0) {
+            height = atoi(argv[argc]);
+            --argc;
+        } else if (strcmp(argv[argc - 1], "-bpp") == 0) {
+            video_bpp = atoi(argv[argc]);
+            --argc;
+        } else if (strcmp(argv[argc], "-fullscreen") == 0) {
+            videoflags ^= SDL_FULLSCREEN;
+        } else {
+            fprintf(stderr,
+                    "Usage: %s [-width N] [-height N] [-bpp N] [-fullscreen]\n",
+                    argv[0]);
+            quit(1);
+        }
+    }
+
+    /* Set video mode */
+    screen = SDL_SetVideoMode(width, height, video_bpp, 0);
+    if (!screen) {
+        fprintf(stderr, "Couldn't set %dx%d video mode: %s\n",
+                width, height, SDL_GetError());
+        quit(2);
+    }
+
+    /* Get the colors */
+    colors[0] = SDL_MapRGB(screen->format, 0xFF, 0x00, 0x00);
+    colors[1] = SDL_MapRGB(screen->format, 0x00, 0xFF, 0x00);
+    colors[2] = SDL_MapRGB(screen->format, 0x00, 0x00, 0xFF);
+
+    /* Loop, filling and waiting for a keystroke */
+    frames = 0;
+    then = SDL_GetTicks();
+    done = 0;
+    while (!done) {
+        /* Check for events */
+        ++frames;
+        while (SDL_PollEvent(&event)) {
+            switch (event.type) {
+            case SDL_MOUSEBUTTONDOWN:
+                SDL_WarpMouse(screen->w / 2, screen->h / 2);
+                break;
+            case SDL_KEYDOWN:
+                /* Any keypress quits the app... */
+            case SDL_QUIT:
+                done = 1;
+                break;
+            default:
+                break;
+            }
+        }
+        SDL_FillRect(screen, NULL, colors[frames%3]);
+        SDL_Flip(screen);
+    }
+
+    /* Print out some timing information */
+    now = SDL_GetTicks();
+    if (now > then) {
+        double fps = ((double) frames * 1000) / (now - then);
+        printf("%2.2f frames per second\n", fps);
+    }
+    SDL_Quit();
+    return (0);
+}