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