diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-02 11:33:08 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-05 00:07:17 +0000 |
commit | c4a4ee2a4e9c1e5c38e6ee49fbda1ed954ed52f6 (patch) | |
tree | ce3c4f999fbdbc1d1c460e2d8fc887ad0b095d40 /flowers-demo.c | |
parent | 5b4806de7cc4d75c8e78a7728258cd909deb9ae1 (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.c | 35 |
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; } |