[cairo-announce] cairo snapshot 1.3.4 now available
Carl Worth
cworth at cworth.org
Wed Nov 22 19:33:23 PST 2006
[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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.freedesktop.org/archives/cairo-announce/attachments/20061122/a04ed587/attachment.pgp
More information about the cairo-announce
mailing list