diff options
| author | Bryce Harrington <b.harrington@samsung.com> | 2013-12-18 16:57:46 -0800 |
|---|---|---|
| committer | Bryce Harrington <b.harrington@samsung.com> | 2013-12-18 17:00:46 -0800 |
| commit | 9317de0f84e1727bf785538ffbaec4a963c59a0e (patch) | |
| tree | a316bae969c402c3360a1c17bb4f2f69f8f908a7 /src/caskbench.cpp | |
| parent | 8b7ff278123e0137e973306cc3f982c30d8d6f27 (diff) | |
Move context init/destroy into their own routines
Diffstat (limited to 'src/caskbench.cpp')
| -rw-r--r-- | src/caskbench.cpp | 123 |
1 files changed, 70 insertions, 53 deletions
diff --git a/src/caskbench.cpp b/src/caskbench.cpp index 11e8b39..e11546c 100644 --- a/src/caskbench.cpp +++ b/src/caskbench.cpp @@ -231,6 +231,68 @@ randomize_color(cairo_t *cr) cairo_set_source_rgba (cr, red, green, blue, alpha); } +void +context_init(caskbench_context_t *context, int size, const char* surface_type) +{ + assert(context); + assert(size > 0); + + context->size = size; + context->canvas_width = 800; + context->canvas_height = 400; + context->skia_device = NULL; + context->skia_paint = new SkPaint; + + if (surface_type == NULL || !strncmp(surface_type, "image", 5)) { + context->setup_cairo = create_cairo_surface_image; + context->setup_skia = create_skia_device_image; + context->destroy_cairo = destroy_cairo_image; + context->destroy_skia = destroy_skia_image; + +#ifdef HAVE_CAIRO_GL_H + } else if (!strncmp(surface_type, "glx", 3)) { + context->setup_cairo = create_cairo_surface_glx; + context->setup_skia = create_skia_device_glx; + context->destroy_cairo = destroy_cairo_glx; + context->destroy_skia = destroy_skia_glx; +#endif + +#ifdef HAVE_GLES3_H + } else if (!strncmp(surface_type, "egl", 3)) { + context->setup_cairo = create_cairo_surface_egl; + context->setup_skia = create_skia_device_egl; + context->destroy_cairo = destroy_cairo_egl; + context->destroy_skia = destroy_skia_egl; +#endif + } + + context->cairo_surface = context->setup_cairo(context->canvas_width, + context->canvas_height); + context->skia_device = context->setup_skia(context->canvas_width, + context->canvas_height); + if (!context->cairo_surface) + errx(2, "Could not create a cairo surface\n"); + if (!context->skia_device) + errx(2, "Could not create a skia device\n"); + + context->cairo_cr = cairo_create(context->cairo_surface); + context->skia_canvas = new SkCanvas(context->skia_device); +} + +void +context_destroy(caskbench_context_t *context) +{ + if (!context) + return; + delete context->skia_paint; + delete context->skia_canvas; + delete context->skia_device; + cairo_destroy(context->cairo_cr); + cairo_surface_destroy(context->cairo_surface); + context->destroy_skia(); + context->destroy_cairo(); +} + int main (int argc, char *argv[]) { @@ -261,53 +323,8 @@ main (int argc, char *argv[]) caskbench_context_t context; caskbench_result_t result; - context.size = opt.size; - context.canvas_width = 800; - context.canvas_height = 400; - context.skia_device = NULL; - context.skia_paint = new SkPaint; - - if (opt.surface_type == NULL || !strncmp(opt.surface_type, "image", 5)) { - context.setup_cairo = create_cairo_surface_image; - context.setup_skia = create_skia_device_image; - context.destroy_cairo = destroy_cairo_image; - context.destroy_skia = destroy_skia_image; - -#ifdef HAVE_CAIRO_GL_H - } else if (!strncmp(opt.surface_type, "glx", 3)) { - context.setup_cairo = create_cairo_surface_glx; - context.setup_skia = create_skia_device_glx; - context.destroy_cairo = destroy_cairo_glx; - context.destroy_skia = destroy_skia_glx; -#endif - -#ifdef HAVE_GLES3_H - } else if (!strncmp(opt.surface_type, "egl", 3)) { - context.setup_cairo = create_cairo_surface_egl; - context.setup_skia = create_skia_device_egl; - context.destroy_cairo = destroy_cairo_egl; - context.destroy_skia = destroy_skia_egl; -#endif - } - - context.cairo_surface = context.setup_cairo(context.canvas_width, - context.canvas_height); - context.skia_device = context.setup_skia(context.canvas_width, - context.canvas_height); - if (!context.cairo_surface) - errx(2, "Could not create a cairo surface\n"); - if (!context.skia_device) - errx(2, "Could not create a skia device\n"); - - // If dry run, just list the test cases - if (opt.dry_run) { - printf("%s\n", perf_tests[c].name); - continue; - } - srand(0xdeadbeef); - context.cairo_cr = cairo_create(context.cairo_surface); - context.skia_canvas = new SkCanvas(context.skia_device); + context_init(&context, opt.size, opt.surface_type); result.test_case_name = perf_tests[c].name; result.size = 0; @@ -320,6 +337,12 @@ main (int argc, char *argv[]) goto FINAL; } + // If dry run, just list the test cases + if (opt.dry_run) { + printf("%s\n", perf_tests[c].name); + continue; + } + // Run once to warm caches and calibrate perf_tests[c].test_case(&context); @@ -395,13 +418,7 @@ main (int argc, char *argv[]) if (perf_tests[c].teardown != NULL) perf_tests[c].teardown(); - delete context.skia_paint; - delete context.skia_canvas; - delete context.skia_device; - cairo_destroy(context.cairo_cr); - cairo_surface_destroy(context.cairo_surface); - context.destroy_skia(); - context.destroy_cairo(); + context_destroy(&context); } if (opt.output_file) { |