summaryrefslogtreecommitdiff
path: root/flowers-demo.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-02-02 11:33:08 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-02-05 00:07:17 +0000
commitc4a4ee2a4e9c1e5c38e6ee49fbda1ed954ed52f6 (patch)
treece3c4f999fbdbc1d1c460e2d8fc887ad0b095d40 /flowers-demo.c
parent5b4806de7cc4d75c8e78a7728258cd909deb9ae1 (diff)
Add a split-screen mode for showing backend performance side-by-side
And other amenities for demonstrating performance difference between backends simultaneously in a visual fashion.
Diffstat (limited to 'flowers-demo.c')
-rw-r--r--flowers-demo.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/flowers-demo.c b/flowers-demo.c
index c3dcd68..370ac63 100644
--- a/flowers-demo.c
+++ b/flowers-demo.c
@@ -349,6 +349,12 @@ flowers_update (int width, int height)
}
}
+static int done;
+static void signal_handler(int sig)
+{
+ done = sig;
+}
+
int main (int argc, char **argv)
{
struct device *device;
@@ -358,17 +364,21 @@ int main (int argc, char **argv)
int frame = 0;
int frames = 0;
int benchmark;
+ const char *version = NULL;
enum clip clip;
void (*draw) (cairo_t *, bool);
int naive, opaque;
int i;
device = device_open(argc, argv);
+ version = device_show_version(argc, argv);
clip = device_get_clip(argc, argv);
benchmark = device_get_benchmark(argc, argv);
if (benchmark == 0)
benchmark = 20;
+ signal(SIGHUP, signal_handler);
+
naive = opaque = 0;
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "--naive") == 0)
@@ -401,7 +411,7 @@ int main (int argc, char **argv)
gettimeofday(&now, NULL);
if (benchmark < 0 && last_fps.tv_sec)
- fps_draw(cr, device->name, &last_fps, &now);
+ fps_draw(cr, device->name, version, &last_fps, &now);
last_fps = now;
cairo_destroy(cr);
@@ -411,7 +421,7 @@ int main (int argc, char **argv)
flowers_update(device->width, device->height);
- if (benchmark < 0) {
+ if (benchmark < 0 && 0) {
delta = now.tv_sec - last_tty.tv_sec;
delta += (now.tv_usec - last_tty.tv_usec)*1e-6;
frames++;
@@ -431,7 +441,26 @@ int main (int argc, char **argv)
break;
}
}
- } while (1);
+ } while (!done);
+
+ if (benchmark < 0) {
+ struct framebuffer *fb = device->get_framebuffer (device);
+ cairo_t *cr = cairo_create(fb->surface);
+
+ cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+ cairo_paint (cr);
+ cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
+
+ device_apply_clip (device, cr, clip);
+ draw(cr, opaque);
+
+ cairo_destroy(cr);
+
+ fps_finish(fb, device->name, version);
+ fb->show (fb);
+ fb->destroy (fb);
+ pause();
+ }
return 0;
}