[If you're not familiar with cairo at all, skip down to the final paragraphs explaining "What is cairo"] A new cairo snapshot 1.3.4 is now available from: http://cairographics.org/snapshots/cairo-1.3.4.tar.gz which can be verified with: http://cairographics.org/snapshots/cairo-1.3.4.tar.gz.sha1 0c412d56c01ea5fcbcfeafdfc6f23b3772a9711e cairo-1.3.4.tar.gz http://cairographics.org/snapshots/cairo-1.3.4.tar.gz.sha1.asc (signed by Carl Worth) Additionally, a git clone of the source tree: git clone git://git.cairographics.org/git/cairo will include a signed 1.3.4 tag which points to a commit named: 143c56cb12ee5d0b0fbc5e4039dd4fc88764254d which can be verified with: git verify-tag 1.3.4 and can be checked out with a command such as: git checkout -b build 1.3.4 What's new since 1.3.2? ======================= This is the second development snapshot in the 1.3 series. It comes one week after the 1.3.2 snapshot. This snapshot has a couple of significant performance improvements, and also adds new support for producing multi-page SVG output, (when targeting SVG 1.2)---thanks to Emmanuel Pacaud. The details of the performance improvements are as follows: 1. The long-awaited "new tessellator". The credit for this being an improvement goes to Joonas Pihlaja. He took my really slow code and really put it through its paces to get the dramatic performance improvement seen below (up to 38x faster on realistic cases, and more than 10x faster for the zrusin_another test). His own writeup of the work he did is quite thorough, but more than can be quoted here. Please see his post for the interesting details: http://lists.freedesktop.org/archives/cairo/2006-November/008483.html (Though note that this snapshot also includes some additional, significant improvements that were only sketched out in that email---see "Generating fewer trapezoids"). 2. More floating-point improvements Daniel Amelang continues to work the magic he began in the 1.3.2 snapshot. This time he short-circuits floating-point transformations by identity matrices and applies the earlier floating-to-fixed-point technique to the problem of rounding. The improvements here will primarily benefit text performance, and will benefit platforms without hardware floating-point more than those that have it, (some text tests show 20% improvement on an x86 machine and closer to 80% improvement on arm). The performance chart comparing 1.3.2 to 1.3.4 really speaks for itself, (this is on an x86 laptop). This is quite a lot of progress for one week: xlib-rgb stroke_similar_rgba_over-256 74.99 1.45% -> 2.03 68.38%: 36.86x speedup ███████████████████████████████████▉ xlib-rgb stroke_similar_rgba_source-256 78.23 1.43% -> 3.30 67.05%: 23.71x speedup ██████████████████████▊ xlib-rgba tessellate-256-100 820.42 0.15% -> 35.06 2.84%: 23.40x speedup ██████████████████████▍ image-rgba tessellate-256-100 819.55 0.32% -> 35.04 3.56%: 23.39x speedup ██████████████████████▍ xlib-rgb stroke_image_rgba_over-256 78.10 1.43% -> 4.33 65.56%: 18.04x speedup █████████████████ xlib-rgb stroke_image_rgba_source-256 80.11 1.63% -> 5.75 63.99%: 13.94x speedup █████████████ xlib-rgba zrusin_another_tessellate-415 89.22 0.35% -> 8.38 5.23%: 10.65x speedup █████████▋ image-rgba zrusin_another_tessellate-415 87.38 0.89% -> 8.37 5.22%: 10.44x speedup █████████▍ image-rgba zrusin_another_fill-415 117.67 1.34% -> 12.88 2.77%: 9.14x speedup ████████▏ xlib-rgba zrusin_another_fill-415 140.52 1.57% -> 15.79 2.88%: 8.90x speedup ███████▉ image-rgba tessellate-64-100 9.68 3.42% -> 1.42 0.60%: 6.82x speedup █████▉ xlib-rgba tessellate-64-100 9.78 4.35% -> 1.45 0.83%: 6.72x speedup █████▊ xlib-rgb stroke_linear_rgba_over-256 46.01 2.44% -> 7.74 54.51%: 5.94x speedup █████ xlib-rgb stroke_linear_rgba_source-256 48.09 2.15% -> 9.14 53.00%: 5.26x speedup ████▎ xlib-rgb stroke_radial_rgba_over-256 50.96 2.34% -> 12.46 47.99%: 4.09x speedup ███▏ xlib-rgb stroke_radial_rgba_source-256 53.06 1.57% -> 13.96 46.57%: 3.80x speedup ██▊ image-rgba paint_similar_rgba_source-256 0.12 1.57% -> 0.08 9.92%: 1.42x speedup ▍ image-rgba paint_image_rgba_source-256 0.12 2.49% -> 0.08 10.70%: 1.41x speedup ▍ image-rgba world_map-800 356.28 0.46% -> 275.72 1.15%: 1.29x speedup ▎ xlib-rgba world_map-800 456.81 0.39% -> 357.95 1.39%: 1.28x speedup ▎ image-rgb tessellate-16-100 0.09 0.57% -> 0.07 3.43%: 1.23x speedup ▎ image-rgba tessellate-16-100 0.09 0.06% -> 0.07 2.46%: 1.23x speedup ▎ image-rgba text_solid_rgb_over-256 5.39 4.01% -> 4.47 0.70%: 1.21x speedup ▎ image-rgba text_solid_rgba_over-256 5.37 0.82% -> 4.45 0.75%: 1.21x speedup ▎ image-rgba text_image_rgb_over-64 0.78 0.10% -> 0.65 0.74%: 1.20x speedup ▎ image-rgba text_image_rgba_over-64 0.78 0.29% -> 0.65 0.68%: 1.19x speedup ▎ image-rgb text_solid_rgb_over-64 0.76 2.45% -> 0.63 0.81%: 1.19x speedup ▎ image-rgba text_solid_rgba_over-64 0.76 0.33% -> 0.64 0.66%: 1.19x speedup ▎ image-rgba text_similar_rgba_over-256 5.99 4.72% -> 5.04 1.09%: 1.19x speedup ▎ We should point out that there is some potential for slowdown in this snapshot. The following are the worst slowdowns reported by the cairo performance suite when comparing 1.3.2 to 1.3.4: image-rgba subimage_copy-256 0.01 0.87% -> 0.01 3.61%: 1.45x slowdown ▌ xlib-rgb paint_solid_rgb_over-256 0.31 10.23% -> 0.38 0.33%: 1.26x slowdown ▎ image-rgba box-outline-fill-100 0.01 0.30% -> 0.01 2.52%: 1.21x slowdown ▎ image-rgba fill_solid_rgb_over-64 0.20 1.22% -> 0.22 1.59%: 1.12x slowdown ▏ image-rgb fill_similar_rgb_over-64 0.21 1.04% -> 0.24 1.06%: 1.11x slowdown ▏ image-rgba fill_image_rgb_over-64 0.21 1.19% -> 0.24 0.72%: 1.11x slowdown ▏ image-rgba fill_similar_rgb_over-64 0.21 0.18% -> 0.24 0.30%: 1.11x slowdown ▏ image-rgb fill_solid_rgba_over-64 0.22 1.66% -> 0.24 1.15%: 1.11x slowdown ▏ image-rgb fill_image_rgb_over-64 0.21 0.14% -> 0.24 0.80%: 1.11x slowdown ▏ image-rgba fill_image_rgba_over-64 0.22 1.34% -> 0.25 0.20%: 1.11x slowdown ▏ image-rgba fill_solid_rgba_over-64 0.22 1.48% -> 0.24 0.95%: 1.11x slowdown ▏ image-rgb fill_similar_rgba_over-64 0.22 1.13% -> 0.25 1.25%: 1.10x slowdown ▏ The 45% slowdown for subimage_copy is an extreme case. It's unlikely to hit many applications unless they often use cairo_rectangle; cairo_fill to copy a single pixel at a time. In any case, it shows a worst-case impact of the overhead of the new tessellator. The other slowdowns (~ 10%) are probably more realistic, and still very concerning. We will work to ensure that performance regressions like these are not present from one major release of cairo to the next, (for example, from 1.2 to 1.4). But we're putting this 1.3.4 snapshot out there now, even with this potential slowdown so that people can experiment with it. If you've got complex geometry, we hope you will see some benefit from the new tessellator. If you've got primarily simple geometry, we hope things won't slowdown too much, but please let us know what slowdown you see, if any, so we can calibrate our performance suite against real-world impacts. Log of changes from 1.3.2 to 1.3.4 ================================== Behdad Esfahbod (4): [SVG] Define enum _cairo_svg_version. [PS] Eliminate compiler warnings about unoptimizable loops [PS] Rename n_glyphs to num_glyphs_unsigned [SVG] Fix compiler warning Carl Worth (18): Increment cairo version to 1.3.3 after 1.3.2 snapshot ROADMAP: Set cairo 1.4 to early January for sake of Gnome 2.18 cairo-perf: When iteration count is given on command-line, never execute fewer perf: Add box_outline test case. Add const qualifier to cairo_path_t* parameter of cairo_append_path Require librsvg 2.15.0 (was 2.14.0) for testing of SVG backend. test/clip-operator: Use round to pass only integers to cairo_show_glyphs test: Use round to pass only integers to cairo_show_glyphs (in 3 more tests) give the big-trap test the XFAIL treatment. Add skip list implementation (many thanks to Keith Packard) Add new tessellator (unused) in cairo-bentley-ottmann.c Adapt new tessellator to match the interface provided by the old tessellator. Switch from old tessellator to new tessellator Make event_queue_insert ignore duplicate intersection events (not duplicate start/stop events) Add some missing cairo_private decorators Add Daniel Amelang and Joonas Pihlaja to the AUTHORS file NEWS: Add notes for 1.3.4 snapshot Increment cairo version to 1.3.4 Dan Amelang (5): Add _cairo_matrix_is_translation Refactor _cairo_matrix_is_integer_translation Add and incorporate _cairo_gstate_transform_glyphs_to_backend Optimize _cairo_matrix_to_pixman_matrix for the common case of an identity matrix Change _cairo_matrix_to_pixman_matrix to use a pixman_transform_t as the template, thus avoiding a forced memcpy Daniel Amelang (2): Add _cairo_lround for much faster rounding Replace existing rounding code with _cairo_lround Emmanuel Pacaud (5): Add SVGPrint support. Use SVG multipage capability. test/pixman-rotate.c: Don't issue a show_page, it's already done in cairo-test.c Merge branch 'svgprint' SVG: plug a memory leak Joonas Pihlaja (11): A 96 by 64 bit divrem that produces a 32 bit quotient and 64 bit remainder. Replace the 128 bit divrem by a 96/64 bit one. Use an LFSR instead of random(). Special cases for skip list comparators. Avoid a skip-list lookup when deactivating edges. Separate start and stop events from intersections (first try.) Tweak comparators. Malloc less using a free list of nodes. Make the skip list check for uniqueness. Sort pointers instead of cairo_bo_events in the tessellator. perf: new-tessellator: Deferred trapezoid generation (first try) Vladimir Vukicevic (1): [test] add big-trap test What is cairo ============= Cairo is a 2D graphics library with support for multiple output devices. Currently supported output targets include the X Window System, win32, and image buffers, as well as PDF, PostScript, and SVG file output. Experimental backends include OpenGL (through glitz), Quartz, XCB, BeOS, and DirectFB. Cairo is designed to produce consistent output on all output media while taking advantage of display hardware acceleration when available (for example, through the X Render Extension). The cairo API provides operations similar to the drawing operators of PostScript and PDF. Operations in cairo including stroking and filling cubic Bézier splines, transforming and compositing translucent images, and antialiased text rendering. All drawing operations can be transformed by any affine transformation (scale, rotation, shear, etc.). Cairo has been designed to let you draw anything you want in a modern 2D graphical user interface. At the same time, the cairo API has been designed to be as fun and easy to learn as possible. If you're not having fun while programming with cairo, then we have failed somewhere---let us know and we'll try to fix it next time around. Cairo is free software and is available to be redistributed and/or modified under the terms of either the GNU Lesser General Public License (LGPL) version 2.1 or the Mozilla Public License (MPL) version 1.1. Where to get more information about cairo ========================================= The primary source of information about cairo is: http://cairographics.org/ The latest releases of cairo can be found at: http://cairographics.org/releases Snapshots of in-development versions of cairo: http://cairographics.org/snapshots The programming manual for using cairo: http://cairographics.org/manual Mailing lists for contacting cairo users and developers: http://cairographics.org/lists Answers to some frequently asked questions about cairo: http://cairographics.org/FAQ
Attachment:
pgpSQFEMaeiuJ.pgp
Description: PGP signature