diff options
Diffstat (limited to 'gfx/cairo/quartz-get-image-performance.patch')
-rw-r--r-- | gfx/cairo/quartz-get-image-performance.patch | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/gfx/cairo/quartz-get-image-performance.patch b/gfx/cairo/quartz-get-image-performance.patch new file mode 100644 index 0000000000..ff3618cf86 --- /dev/null +++ b/gfx/cairo/quartz-get-image-performance.patch @@ -0,0 +1,43 @@ +# HG changeset patch +# User Matt Woodrow <mwoodrow@mozilla.com> +# Date 1314162877 -43200 +# Node ID 87458c4670dcd16be5a5715d741ee2ca4cf18d0f +# Parent 95eb700a64591cda694c284a9f8ad08c11e3dd97 +Bug 675837 - Only flush Quartz surfaces on the success paths during cairo_quartz_get_image. r=roc + +diff --git a/gfx/cairo/cairo/src/cairo-quartz-surface.c b/gfx/cairo/cairo/src/cairo-quartz-surface.c +--- a/gfx/cairo/cairo/src/cairo-quartz-surface.c ++++ b/gfx/cairo/cairo/src/cairo-quartz-surface.c +@@ -1909,30 +1909,30 @@ _cairo_quartz_get_image (cairo_quartz_su + unsigned char *imageData; + cairo_image_surface_t *isurf; + + if (IS_EMPTY(surface)) { + *image_out = (cairo_image_surface_t*) cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 0, 0); + return CAIRO_STATUS_SUCCESS; + } + +- CGContextFlush(surface->cgContext); +- + if (surface->imageSurfaceEquiv) { ++ CGContextFlush(surface->cgContext); + *image_out = (cairo_image_surface_t*) cairo_surface_reference(surface->imageSurfaceEquiv); + return CAIRO_STATUS_SUCCESS; + } + + if (_cairo_quartz_is_cgcontext_bitmap_context(surface->cgContext)) { + unsigned int stride; + unsigned int bitinfo; + unsigned int bpc, bpp; + CGColorSpaceRef colorspace; + unsigned int color_comps; + ++ CGContextFlush(surface->cgContext); + imageData = (unsigned char *) CGBitmapContextGetData(surface->cgContext); + + #ifdef USE_10_3_WORKAROUNDS + bitinfo = CGBitmapContextGetAlphaInfo (surface->cgContext); + #else + bitinfo = CGBitmapContextGetBitmapInfo (surface->cgContext); + #endif + stride = CGBitmapContextGetBytesPerRow (surface->cgContext); |