diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-09-12 13:18:29 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-09-12 15:44:46 +0100 |
commit | 0f26f75eda317efc9e448c875110b846b224d463 (patch) | |
tree | 80fd31a552f2527888fbb0166442a1e7c6525ff5 | |
parent | 7b6586a7385a529d7bfaa463541715f74f4a904d (diff) |
perf/micro: Add measurement of setting the pixel directly using pixman
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | perf/micro/pixel.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/perf/micro/pixel.c b/perf/micro/pixel.c index 12b8f47b..dd3ba526 100644 --- a/perf/micro/pixel.c +++ b/perf/micro/pixel.c @@ -28,6 +28,43 @@ #include "cairo-perf.h" +#include <pixman.h> + +static cairo_time_t +pixel_direct (cairo_t *cr, int width, int height, int loops) +{ + cairo_surface_t *surface, *image; + uint32_t *data; + int stride, bpp; + + surface = cairo_get_target (cr); + image = cairo_surface_map_to_image (surface, NULL); + data = (uint32_t *) cairo_image_surface_get_data (image); + stride = cairo_image_surface_get_stride (image) / sizeof (uint32_t); + + switch (cairo_image_surface_get_format (image)) { + default: + case CAIRO_FORMAT_INVALID: + case CAIRO_FORMAT_A1: bpp = 0; break; + case CAIRO_FORMAT_A8: bpp = 8; break; + case CAIRO_FORMAT_RGB16_565: bpp = 16; break; + case CAIRO_FORMAT_RGB24: + case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_ARGB32: bpp = 32; break; + } + + cairo_perf_timer_start (); + + while (loops--) + pixman_fill (data, stride, bpp, 0, 0, 1, 1, -1); + + cairo_perf_timer_stop (); + + cairo_surface_unmap_image (surface, image); + + return cairo_perf_timer_elapsed (); +} + static cairo_time_t pixel_paint (cairo_t *cr, int width, int height, int loops) { @@ -167,6 +204,7 @@ pixel (cairo_perf_t *perf, cairo_t *cr, int width, int height) { cairo_set_source_rgb (cr, 1., 1., 1.); + cairo_perf_run (perf, "pixel-direct", pixel_direct, NULL); cairo_perf_run (perf, "pixel-paint", pixel_paint, NULL); cairo_perf_run (perf, "pixel-mask", pixel_mask, NULL); cairo_perf_run (perf, "pixel-rectangle", pixel_rectangle, NULL); |