summaryrefslogtreecommitdiff
path: root/chart-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 /chart-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 'chart-demo.c')
-rw-r--r--chart-demo.c68
1 files changed, 49 insertions, 19 deletions
diff --git a/chart-demo.c b/chart-demo.c
index edbfa11..c2283ba 100644
--- a/chart-demo.c
+++ b/chart-demo.c
@@ -174,6 +174,33 @@ bg_draw (struct device *device, cairo_t *cr)
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
}
+static void chart_draw(struct device *device,
+ cairo_t *cr, cairo_antialias_t antialias, enum clip clip,
+ struct chart *c, int count)
+{
+ int n;
+
+ bg_draw(device, cr);
+ device_apply_clip(device, cr, clip);
+
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+ for (n = 0; n < count; n++)
+ chart_fill(device, cr, &c[n], n + 1 < count ? &c[n+1] : NULL);
+ cairo_set_line_width (cr, 3);
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+ cairo_set_antialias (cr, antialias);
+
+ for (n = 0; n < count; n++)
+ chart_stroke(device, cr, &c[n]);
+ cairo_reset_clip (cr);
+}
+
+static int done;
+static void signal_handler(int sig)
+{
+ done = sig;
+}
+
int main (int argc, char **argv)
{
struct device *device;
@@ -184,6 +211,7 @@ int main (int argc, char **argv)
int frames = 0;
int show_fps = 1;
int benchmark;
+ const char *version;
cairo_antialias_t antialias;
enum clip clip;
@@ -191,6 +219,7 @@ int main (int argc, char **argv)
int n;
device = device_open(argc, argv);
+ version = device_show_version(argc, argv);
antialias = device_get_antialias(argc, argv);
clip = device_get_clip(argc, argv);
benchmark = device_get_benchmark(argc, argv);
@@ -199,6 +228,8 @@ int main (int argc, char **argv)
if (benchmark > 0)
show_fps = 0;
+ signal(SIGHUP, signal_handler);
+
for (n = 1; n < argc; n++) {
if (strcmp (argv[n], "--hide-fps") == 0)
show_fps = 0;
@@ -211,27 +242,13 @@ int main (int argc, char **argv)
gettimeofday(&start, 0); now = last_tty = last_fps = start;
do {
struct framebuffer *fb = device->get_framebuffer (device);
- cairo_t *cr;
-
- cr = cairo_create(fb->surface);
+ cairo_t *cr = cairo_create(fb->surface);
- bg_draw(device, cr);
- device_apply_clip(device, cr, clip);
-
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
- for (n = 0; n < 5; n++)
- chart_fill(device, cr, &c[n], n + 1 < 5 ? &c[n+1] : NULL);
- cairo_set_line_width (cr, 3);
- cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
- cairo_set_antialias (cr, antialias);
-
- for (n = 0; n < 5; n++)
- chart_stroke(device, cr, &c[n]);
+ chart_draw(device, cr, antialias, clip, c, 5);
gettimeofday(&now, NULL);
if (show_fps && last_fps.tv_sec) {
- cairo_reset_clip (cr);
- fps_draw(cr, device->name, &last_fps, &now);
+ fps_draw(cr, device->name, version, &last_fps, &now);
}
last_fps = now;
@@ -243,7 +260,7 @@ int main (int argc, char **argv)
for (n = 0; n < 5; n++)
chart_update(&c[n]);
- 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++;
@@ -263,7 +280,20 @@ 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);
+
+ chart_draw(device, cr, antialias, clip, c, 5);
+ cairo_destroy(cr);
+
+ fps_finish(fb, device->name, version);
+ fb->show (fb);
+ fb->destroy (fb);
+ pause();
+ }
return 0;
}