[cairo-commit] 5 commits - AUTHORS configure.in NEWS src/cairo-freelist-private.h src/cairoint.h src/cairo-skiplist-private.h

Carl Worth cworth at kemper.freedesktop.org
Wed Nov 22 19:32:48 PST 2006


 AUTHORS                      |    2 
 NEWS                         |  152 +++++++++++++++++++++++++++++++++++++++++++
 configure.in                 |    2 
 src/cairo-freelist-private.h |   12 +--
 src/cairo-skiplist-private.h |   14 ++-
 src/cairoint.h               |    4 -
 6 files changed, 172 insertions(+), 14 deletions(-)

New commits:
diff-tree 9c3b161c7067d8eda7f8d1cfb36ca285e4e7fa35 (from 143c56cb12ee5d0b0fbc5e4039dd4fc88764254d)
Author: Carl Worth <cworth at cworth.org>
Date:   Wed Nov 22 19:31:56 2006 -0800

    Bump version to 1.3.5 after making 1.3.4 snapshot

diff --git a/configure.in b/configure.in
index bdd5542..a825b98 100644
--- a/configure.in
+++ b/configure.in
@@ -5,7 +5,7 @@ dnl An odd micro number indicates in-pro
 dnl An even micro number indicates a released version.
 m4_define(cairo_version_major, 1)
 m4_define(cairo_version_minor, 3)
-m4_define(cairo_version_micro, 4)
+m4_define(cairo_version_micro, 5)
 
 AC_INIT([cairo],
       cairo_version_major.cairo_version_minor.cairo_version_micro,
diff-tree 143c56cb12ee5d0b0fbc5e4039dd4fc88764254d (from e9dd52a337082cebbab2224e3a09702ada8f8e87)
Author: Carl Worth <cworth at cworth.org>
Date:   Wed Nov 22 19:15:31 2006 -0800

    Increment cairo version to 1.3.4

diff --git a/configure.in b/configure.in
index 70bfa56..bdd5542 100644
--- a/configure.in
+++ b/configure.in
@@ -5,7 +5,7 @@ dnl An odd micro number indicates in-pro
 dnl An even micro number indicates a released version.
 m4_define(cairo_version_major, 1)
 m4_define(cairo_version_minor, 3)
-m4_define(cairo_version_micro, 3)
+m4_define(cairo_version_micro, 4)
 
 AC_INIT([cairo],
       cairo_version_major.cairo_version_minor.cairo_version_micro,
diff-tree e9dd52a337082cebbab2224e3a09702ada8f8e87 (from 3329abba391ebd502ba74b00ff02b7902a39945a)
Author: Carl Worth <cworth at cworth.org>
Date:   Wed Nov 22 19:15:00 2006 -0800

    NEWS: Add notes for 1.3.4 snapshot

diff --git a/NEWS b/NEWS
index 01333f1..29ee46c 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,155 @@
+Snapshot 1.3.4 (2006-11-22 Carl Worth <cworth at cworth.org>)
+==========================================================
+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.
+
+Thanks, and have fun with cairo!
+
 Snapshot 1.3.2 (2006-11-14 Carl Worth <cworth at cworth.org>)
 ==========================================================
 This is the first development snapshot since the 1.2 stable series
diff-tree 3329abba391ebd502ba74b00ff02b7902a39945a (from a8f6d27fba582cc8e935676d26c703fa7b253822)
Author: Carl Worth <cworth at cworth.org>
Date:   Wed Nov 22 19:11:51 2006 -0800

    Add Daniel Amelang and Joonas Pihlaja to the AUTHORS file

diff --git a/AUTHORS b/AUTHORS
index ad0b97c..1322c7f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,4 +1,5 @@
 Josh Aas <joshmoz at gmail.com> Memory leak fix for quartz backend
+Daniel Amelang <dan at amelang.net> Many (magic) floating-point optimizations
 Shawn T. Amundson <amundson at gtk.org> Build fix
 Olivier Andrieu <oliv__a at users.sourceforge.net> PNG backend
 Peter Dennis Bartok <peter at novonyx.com> Bug fix for clipping
@@ -38,6 +39,7 @@ Mike Owens <etc at filespanker.com> Bug fix
 Keith Packard <keithp at keithp.com> Original concept, polygon tessellation, dashing, font metrics rewrite
 Stuart Parmenter <pavlov at pavlov.net> Original GDI+ backend, win32 fixes
 Christof Petig <christof at petig-baender.de> Build fixes related to freetype
+Joonas Pihlaja <jpihlaja at cc.helsinki.fi> Huge improvements to the tessellator performance
 David Reveman <davidr at novell.com> New pattern API, glitz backend
 Calum Robinson <calumr at mac.com> Quartz backend
 Tim Rowley <tim.rowley at gmail.com> Quartz/ATSUI fixes, X server workarounds, win32 glyph path support
diff-tree a8f6d27fba582cc8e935676d26c703fa7b253822 (from fac3684e686a259658151dac13907fa69f43f727)
Author: Carl Worth <cworth at cworth.org>
Date:   Wed Nov 22 18:42:48 2006 -0800

    Add some missing cairo_private decorators

diff --git a/src/cairo-freelist-private.h b/src/cairo-freelist-private.h
index 7a225ff..41855f7 100644
--- a/src/cairo-freelist-private.h
+++ b/src/cairo-freelist-private.h
@@ -21,6 +21,8 @@
  */
 #ifndef CAIRO_FREELIST_H
 #define CAIRO_FREELIST_H
+
+#include "cairoint.h"
 #include <stddef.h>
 
 /* Opaque implementation types. */
@@ -41,31 +43,31 @@ struct _cairo_freelist {
 
 /* Initialise a freelist that will be responsible for allocating
  * nodes of size nodesize. */
-void
+cairo_private void
 _cairo_freelist_init (cairo_freelist_t *freelist, unsigned nodesize);
 
 /* Deallocate any nodes in the freelist. */
-void
+cairo_private void
 _cairo_freelist_fini (cairo_freelist_t *freelist);
 
 /* Allocate a new node from the freelist.  If the freelist contains no
  * nodes, a new one will be allocated using malloc().  The caller is
  * responsible for calling _cairo_freelist_free() or free() on the
  * returned node.  Returns NULL on memory allocation error. */
-void *
+cairo_private void *
 _cairo_freelist_alloc (cairo_freelist_t *freelist);
 
 /* Allocate a new node from the freelist.  If the freelist contains no
  * nodes, a new one will be allocated using calloc().  The caller is
  * responsible for calling _cairo_freelist_free() or free() on the
  * returned node.  Returns NULL on memory allocation error. */
-void *
+cairo_private void *
 _cairo_freelist_calloc (cairo_freelist_t *freelist);
 
 /* Return a node to the freelist. This does not deallocate the memory,
  * but makes it available for later reuse by
  * _cairo_freelist_alloc(). */
-void
+cairo_private void
 _cairo_freelist_free (cairo_freelist_t *freelist, void *node);
 
 #endif /* CAIRO_FREELIST_H */
diff --git a/src/cairo-skiplist-private.h b/src/cairo-skiplist-private.h
index d433398..d776ad6 100644
--- a/src/cairo-skiplist-private.h
+++ b/src/cairo-skiplist-private.h
@@ -24,6 +24,8 @@
 #ifndef SKIPLIST_H
 #define SKIPLIST_H
 
+#include "cairoint.h"
+
 #define MAX_LEVEL   31
 
 /*
@@ -62,7 +64,7 @@ typedef struct _skip_list {
  * sizeof) is passed for elt_size. Note that the structure used for
  * list elements must have as its final member a skip_elt_t
  */
-void
+cairo_private void
 skip_list_init (skip_list_t		*list,
 		skip_list_compare_t	 compare,
 		size_t			 elt_size);
@@ -71,7 +73,7 @@ skip_list_init (skip_list_t		*list,
 /* Deallocate resources associated with a skip list and all elements
  * in it. (XXX: currently this simply deletes all elements.)
  */
-void
+cairo_private void
 skip_list_fini (skip_list_t		*list);
 
 /* Insert a new element into the list at the correct sort order as
@@ -79,19 +81,19 @@ skip_list_fini (skip_list_t		*list);
  * are ignored and the already inserted element is returned.
  * Otherwise data will be copied (elt_size bytes from <data> via
  * memcpy) and the new element is returned. */
-void *
+cairo_private void *
 skip_list_insert (skip_list_t *list, void *data, int unique);
 
 /* Find an element which compare considers equal to <data> */
-void *
+cairo_private void *
 skip_list_find (skip_list_t *list, void *data);
 
 /* Delete an element which compare considers equal to <data> */
-void
+cairo_private void
 skip_list_delete (skip_list_t *list, void *data);
 
 /* Delete the given element from the list. */
-void
+cairo_private void
 skip_list_delete_given (skip_list_t *list, skip_elt_t *given);
 
 #endif
diff --git a/src/cairoint.h b/src/cairoint.h
index aa17467..1f74d62 100755
--- a/src/cairoint.h
+++ b/src/cairoint.h
@@ -2236,12 +2236,12 @@ _cairo_traps_tessellate_polygon (cairo_t
 				 cairo_polygon_t *poly,
 				 cairo_fill_rule_t fill_rule);
 
-cairo_status_t
+cairo_private cairo_status_t
 _cairo_traps_add_trap_from_points (cairo_traps_t *traps, cairo_fixed_t top, cairo_fixed_t bottom,
 				   cairo_point_t left_p1, cairo_point_t left_p2,
 				   cairo_point_t right_p1, cairo_point_t right_p2);
 
-cairo_status_t
+cairo_private cairo_status_t
 _cairo_bentley_ottmann_tessellate_polygon (cairo_traps_t      *traps,
 					   cairo_polygon_t      *polygon,
 					   cairo_fill_rule_t     fill_rule);


More information about the cairo-commit mailing list