summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Rusin <zack@ppc64.localdomain>2006-03-17 00:25:27 -0500
committerZack Rusin <zack@ppc64.localdomain>2006-03-17 00:25:27 -0500
commitadcc63c9cf1d506293191c04a7d5b3414b4004e6 (patch)
tree6750480c07e7bfc20197d46b7ab1d2e862115f5e
parent2225a63f87bae9c2d49444b2bafc689f864b2009 (diff)
follow benh's suggestion and use common timing for all tests
-rw-r--r--main.cpp5
-rw-r--r--utils.cpp29
-rw-r--r--utils.h1
3 files changed, 24 insertions, 11 deletions
diff --git a/main.cpp b/main.cpp
index 873397a..2f4602d 100644
--- a/main.cpp
+++ b/main.cpp
@@ -6,13 +6,12 @@
#include <QString>
#include <X11/Xlib.h>
-#include <X11/Xutil.h>
#include <X11/extensions/Xrender.h>
-#include <X11/extensions/XShm.h>
#include <sys/time.h>
#include <time.h>
#include <stdio.h>
+#include <signal.h>
#include <stdlib.h>
#include "utils.h"
@@ -67,6 +66,7 @@ RenderOp all_render_ops[] = {
{NULL, 0, 0}
};
+
void
test_oper(int op, XRenderSurf *src, XRenderSurf *mask, XRenderSurf *dst)
{
@@ -149,6 +149,7 @@ main(int argc, char **argv)
fprintf(stderr, "Error: Cannot connect to display!\n");
exit(-1);
}
+ signal(SIGALRM, alarmhandler);
setup_window();
main_loop();
return 0;
diff --git a/utils.cpp b/utils.cpp
index 72da723..b83ac19 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -10,6 +10,7 @@
#include <sys/time.h>
#include <time.h>
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -33,26 +34,25 @@ get_time(void)
return (double)timev.tv_sec + (((double)timev.tv_usec) / 1000000);
}
+static int keep_running = 0;
+static int frame_cnt = 0;
void
time_test(char *description, void (*func) (int op, XRenderSurf *src, XRenderSurf *mask, XRenderSurf *dst),
RenderOp *op, XRenderSurf *src, XRenderSurf *mask, XRenderSurf *dst)
{
- double t1, t2, t;
- int i;
-
char buf[51];
snprintf(buf, 50, "%s%s", description, FILLER);
printf("\t\t %s", buf);
fflush(NULL);
- t1 = get_time();
- for (i = 0; i < REPS; ++i)
+ alarm(5);
+ keep_running = 1;
+ while (keep_running) {
func(op->op, src, mask, dst);
- XSync(QX11Info::display(), False);
- t2 = get_time();
- t = t2 - t1;
- printf(" Time: %3.3f sec.\n", t);
+ XSync(QX11Info::display(), 0);
+ ++frame_cnt;
+ }
}
void
@@ -101,3 +101,14 @@ setup_window(void)
XMapWindow(disp, win);
XSync(disp, False);
}
+
+void alarmhandler(int sig)
+{
+ if (sig == SIGALRM) {
+ printf ("%d frames in 5.0 seconds = %.3f FPS\n", frame_cnt,
+ frame_cnt / 5.0);
+ frame_cnt = 0;
+ keep_running = 0;
+ }
+ signal(SIGALRM, alarmhandler);
+}
diff --git a/utils.h b/utils.h
index 987beb8..3fd277f 100644
--- a/utils.h
+++ b/utils.h
@@ -22,5 +22,6 @@ void time_test(char *description, void (*func)(int op, XRenderSurf *src, XRend
RenderOp *op, XRenderSurf *src, XRenderSurf *mask, XRenderSurf *dst);
void populate_from_file(Display *disp, XRenderSurf *rs, const char *file);
void setup_window(void);
+void alarmhandler(int sig);
#endif