Files
retrobsd/share/examples/gpanel/speed.c
2015-10-09 17:44:46 -07:00

137 lines
2.9 KiB
C

/*
* Test the gpanel functions for speed.
*/
#include <stdio.h>
#include <sys/gpanel.h>
#include <sys/time.h>
#define NPIXELS 100000
#define NLINES 3000
#define NRECT 1000
#define NCIRCLES 1000
#define NCHARS 10000
extern const struct gpanel_font_t font_lucidasans15;
int xsize, ysize;
/*
* Get current time in milliseconds.
*/
unsigned current_msec()
{
struct timeval t;
gettimeofday(&t, 0);
return t.tv_sec * 1000 + t.tv_usec / 1000;
}
/*
* Compute elapsed time in milliseconds.
*/
unsigned elapsed_msec(unsigned t0)
{
struct timeval t1;
unsigned msec;
gettimeofday (&t1, 0);
msec = t1.tv_sec * 1000 + t1.tv_usec / 1000;
msec -= t0;
if (msec < 1)
msec = 1;
return msec;
}
int main()
{
char *devname = "/dev/tft0";
int x, y, x1, y1, color, i, r, sym;
unsigned t0, msec;
if (gpanel_open(devname) < 0) {
printf("Cannot open %s\n", devname);
exit(-1);
}
gpanel_clear(0, &xsize, &ysize);
printf("Screen size %u x %u.\n", xsize, ysize);
/* Use fixed seed, for repeatability. */
srand(1);
printf("Graphics speed:\n");
sync();
usleep(500000);
/*
* Pixels.
*/
t0 = current_msec();
for (i=0; i<NPIXELS; i++) {
x = rand() % xsize;
y = rand() % ysize;
color = rand() << 1;
gpanel_pixel(color, x, y);
}
msec = elapsed_msec(t0);
printf (" %u pixels/second\n", NPIXELS*1000U / msec);
/*
* Lines.
*/
t0 = current_msec();
for (i=0; i<NLINES; i++) {
x = rand() % xsize;
y = rand() % ysize;
x1 = rand() % xsize;
y1 = rand() % ysize;
color = rand() << 1;
gpanel_line(color, x, y, x1, y1);
}
msec = elapsed_msec(t0);
printf (" %u lines/second\n", NLINES*1000U / msec);
/*
* Filled rectangles.
*/
t0 = current_msec();
for (i=0; i<NRECT; i++) {
x = rand() % xsize;
y = rand() % ysize;
x1 = rand() % xsize;
y1 = rand() % ysize;
color = rand() << 1;
gpanel_fill(color, x, y, x1, y1);
}
msec = elapsed_msec(t0);
printf (" %u rectangles/second\n", NRECT*1000U / msec);
/*
* Circles.
*/
t0 = current_msec();
for (i=0; i<NCIRCLES; i++) {
x = rand() % xsize;
y = rand() % ysize;
r = rand() % ysize;
color = rand() << 1;
gpanel_circle(color, x, y, r);
}
msec = elapsed_msec(t0);
printf (" %u circles/second\n", NCIRCLES*1000U / msec);
/*
* Characters.
*/
t0 = current_msec();
for (i=0; i<NCHARS; i++) {
x = rand() % xsize;
y = rand() % ysize;
sym = '!' + rand() % ('~' - ' ');
color = rand() << 1;
gpanel_char(&font_lucidasans15, color, -1, x, y, sym);
}
msec = elapsed_msec(t0);
printf (" %u characters/second\n", NCHARS*1000U / msec);
return 0;
}