diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2009-07-28 08:05:22 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2009-07-28 08:41:50 +0100 |
commit | 24b5ac6377f0e4b76b73460a497b9861fc01a889 (patch) | |
tree | d0e65b1b24c35e7856c98b6336e64c163cc35aa5 /test/cairo-test.c | |
parent | dacc380dd9ea23fe060d0397104ecd4b2a6d0eae (diff) | |
download | cairo-24b5ac6377f0e4b76b73460a497b9861fc01a889.tar.gz |
[test] Add timeouts around finishing and converting surfaces to images.
In order to catch infinite loops whilst replaying and converting vector
surfaces to images (via external renderers) we need to also install
alarms around the calls to finish() and get_image().
Diffstat (limited to 'test/cairo-test.c')
-rw-r--r-- | test/cairo-test.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/test/cairo-test.c b/test/cairo-test.c index 430acc17c..67323b5cf 100644 --- a/test/cairo-test.c +++ b/test/cairo-test.c @@ -90,6 +90,10 @@ #define ARRAY_SIZE(A) (sizeof(A) / sizeof (A[0])) #endif +#if ! HAVE_ALARM +#define alarm(X); +#endif + static const cairo_user_data_key_t _cairo_test_context_key; static void @@ -955,13 +959,9 @@ REPEAT: cairo_font_options_destroy (font_options); cairo_save (cr); -#if HAVE_ALARM alarm (ctx->timeout); -#endif status = (ctx->test->draw) (cr, ctx->test->width, ctx->test->height); -#if HAVE_ALARM alarm (0); -#endif cairo_restore (cr); if (similar) { @@ -1040,7 +1040,10 @@ REPEAT: MEMFAULT_ENABLE_FAULTS (); #endif + /* also check for infinite loops whilst replaying */ + alarm (ctx->timeout); diff_status = target->finish_surface (surface); + alarm (0); #if HAVE_MEMFAULT MEMFAULT_DISABLE_FAULTS (); @@ -1081,9 +1084,12 @@ REPEAT: /* we may be running this test to generate reference images */ _xunlink (ctx, out_png_path); + /* be more generous as we may need to use external renderers */ + alarm (4 * ctx->timeout); test_image = target->get_image_surface (surface, 0, ctx->test->width, ctx->test->height); + alarm (0); diff_status = cairo_surface_write_to_png (test_image, out_png_path); cairo_surface_destroy (test_image); if (diff_status) { |