[cairo] Patches for speeding up _cairo_fixed_from_double

Daniel Amelang daniel.amelang at gmail.com
Wed Nov 1 22:53:33 PST 2006


Attached are patches resulting from the discussion here:

http://lists.freedesktop.org/archives/cairo/2006-October/008285.html

First one defines an autoconf macro AX_C_FLOAT_WORDS_BIGENDIAN that
uses a similar technique as AC_C_BIGENDIAN to avoid having to actually
run code to determine the endianness (thanks again to Owen for the
tip).

Then there's the new _cairo_fixed_from_double that uses
FLOAT_WORDS_BIGENDIAN to pull off the magic number trick in a portable
manner.

Finally, I put together a new performance test to show off the new
speedup. This was necessary as no current tests really exercise the
API calls where conversion takes place. I don't really recommend that
this make it into the main performance suite, as it's pretty specific
to this particular case, but I'm including it here for posterity.

Both the autoconf macro and _cairo_fixed_from_double code are perhaps
overly documented, but they both use pretty unusual techniques, so I
figured they could use the extra attention.

Speedup (detailed diffs attached):

On my Pentium M (1.8GHz) I saw 2.5-3x speeup on my new
pattern_create_radial test. Several of the text_* tests saw a 1.2-1.4x
speedup.

On the same box, I changed over to use software floating point (long
story, hollar if you want details) and also saw a ~3x speedup on the
pattern_create_radial test (the actual magnitudes  were quite
different, of course). Again, moderate speedups with the text tests,
but here we see a 1.5x speedup on the tessellate tests (still using
the old tessellator, though). Although the exact amount of speedup
seen on the Nokia 770 will likely be different, I think it will be in
the same ballpark. Anyone with one willing to test?

On a side note, I tried inlining the function to see what would
happen, and I got a 471x slowdown. Pretty bizarre; I'll have to look
into that later.

Dan Amelang
-------------- next part --------------
From nobody Mon Sep 17 00:00:00 2001
From: Dan Amelang <dan at amelang.net>
Date: Sun Oct 29 21:30:08 2006 -0800
Subject: [PATCH] Add autoconf macro AX_C_FLOAT_WORDS_BIGENDIAN

The symbol that this macro defines (FLOAT_WORDS_BIGENDIAN) can be used
to make double arithmetic tricks portable.

---

 acinclude.m4 |   65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 configure.in |    1 +
 2 files changed, 66 insertions(+), 0 deletions(-)

3231d91b59a6c2e1c40bbaa8b143694b6c693662
diff --git a/acinclude.m4 b/acinclude.m4
index af73800..a0eb13a 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -51,3 +51,68 @@ ifelse([$1],[],,
   AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
   AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test -n "$LIBTOOL")
 ])
+
+# AX_C_FLOAT_WORDS_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE],
+#                             [ACTION-IF-UNKNOWN])
+#
+# Checks the ordering of words within a multi-word float. This check
+# is necessary because on some systems (e.g. certain ARM systems), the
+# float word ordering can be different from the byte ordering. In a
+# multi-word float context, "big-endian" implies that the word containing
+# the sign bit is found in the memory location with the lowest address.
+# This implemenation was inspired by the AC_C_BIGENDIAN macro in autoconf.
+# -------------------------------------------------------------------------
+AC_DEFUN([AX_C_FLOAT_WORDS_BIGENDIAN],
+  [AC_CACHE_CHECK(whether float word ordering is bigendian,
+                  ax_cv_c_float_words_bigendian, [
+
+# The endianess is detected by first compiling C code that contains a special
+# double float value, then grepping the resulting object file for certain
+# strings of ascii values. The double is specially crafted to have a
+# binary representation that corresponds with a simple string. In this
+# implementation, the string "noonsees" was selected because the individual
+# word values ("noon" and "sees") are palindromes, thus making this test
+# byte-order agnostic. If grep finds the string "noonsees" in the object
+# file, the target platform stores float words in big-endian order. If grep
+# finds "seesnoon", float words are in little-endian order. If neither value
+# is found, the user is instructed to specify the ordering.
+
+ax_cv_c_float_words_bigendian=unknown
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+
+double d = 90904234967036810337470478905505011476211692735615632014797120844053488865816695273723469097858056257517020191247487429516932130503560650002327564517570778480236724525140520121371739201496540132640109977779420565776568942592.0;
+
+]])], [
+
+if grep noonsees conftest.$ac_objext >/dev/null ; then
+  ax_cv_c_float_words_bigendian=yes
+fi
+if grep seesnoon conftest.$ac_objext >/dev/null ; then
+  if test "$ax_cv_c_float_words_bigendian" = unknown; then
+    ax_cv_c_float_words_bigendian=no
+  else
+    ax_cv_c_float_words_bigendian=unknown
+  fi
+fi
+
+])])
+
+case $ax_cv_c_float_words_bigendian in
+  yes)
+    m4_default([$1],
+      [AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
+                 [Define to 1 if your system stores words within floats
+                  with the most significant word first])]) ;;
+  no)
+    $2 ;;
+  *)
+    m4_default([$3],
+      [AC_MSG_ERROR([
+
+Unknown float word ordering. You need to manually preset
+ax_cv_c_float_words_bigendian=no (or yes) according to your system.
+
+    ])]) ;;
+esac
+
+])# AX_C_FLOAT_WORDS_BIGENDIAN
diff --git a/configure.in b/configure.in
index 2d2bf9f..797c7ce 100644
--- a/configure.in
+++ b/configure.in
@@ -55,6 +55,7 @@ AC_PROG_CPP
 AC_PROG_LIBTOOL dnl required version (1.4) DON'T REMOVE!
 AC_STDC_HEADERS
 AC_C_BIGENDIAN
+AX_C_FLOAT_WORDS_BIGENDIAN
 
 dnl ===========================================================================
 dnl === Local macros
-- 
1.2.6
-------------- next part --------------
From nobody Mon Sep 17 00:00:00 2001
From: Dan Amelang <dan at amelang.net>
Date: Sun Oct 29 21:31:23 2006 -0800
Subject: [PATCH] Change _cairo_fixed_from_double to use the "magic number" technique

See long thread here:
http://lists.freedesktop.org/archives/cairo/2006-October/008285.html 

---

 src/cairo-fixed.c |   48 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 47 insertions(+), 1 deletions(-)

d88acddcabe770e17664b34a2d5f74d3926e1642
diff --git a/src/cairo-fixed.c b/src/cairo-fixed.c
index 604c9e7..fe6c2dc 100644
--- a/src/cairo-fixed.c
+++ b/src/cairo-fixed.c
@@ -42,10 +42,56 @@ _cairo_fixed_from_int (int i)
     return i << 16;
 }
 
+/* This is the "magic number" approach to converting a double into fixed
+ * point as described here:
+ *
+ * http://www.stereopsis.com/sree/fpu2006.html (an overview)
+ * http://www.d6.com/users/checker/pdfs/gdmfp.pdf (in detail)
+ *
+ * The basic idea is to add a large enough number to the double that the
+ * literal floating point is moved up to the extent that it forces the
+ * double's value to be shifted down to the bottom of the mantissa (to make
+ * room for the large number being added in). Since the mantissa is, at a
+ * given moment in time, a fixed point integer itself, one can convert a
+ * float to various fixed point representations by moving around the point
+ * of a floating point number through arithmetic operations. This behavior
+ * is reliable on most modern platforms as it is mandated by the IEEE-754
+ * standard for floating point arithmetic.
+ *
+ * For our purposes, a "magic number" must be carefully selected that is
+ * both large enough to produce the desired point-shifting effect, and also
+ * has no lower bits in its representation that would interfere with our
+ * value at the bottom of the mantissa. The magic number is calculated as
+ * follows:
+ *
+ *          (2 ^ (MANTISSA_SIZE - FRACTIONAL_SIZE)) * 1.5
+ *
+ * where in our case:
+ *  - MANTISSA_SIZE for 64-bit doubles is 52
+ *  - FRACTIONAL_SIZE for 16.16 fixed point is 16
+ *
+ * Although this approach provides a very large speedup of this function
+ * on a wide-array of systems, it does come with two caveats:
+ *
+ * 1) It uses banker's rounding as opposed to arithmetic rounding.
+ * 2) It doesn't function properly if the FPU is in single-precision
+ *    mode.
+ */
+#define CAIRO_MAGIC_NUMBER_FIXED_16_16 (103079215104.0)
 cairo_fixed_t
 _cairo_fixed_from_double (double d)
 {
-    return (cairo_fixed_t) floor (d * 65536 + 0.5);
+    union {
+        double d;
+        int32_t i[2];
+    } u;
+
+    u.d = d + CAIRO_MAGIC_NUMBER_FIXED_16_16;
+#ifdef FLOAT_WORDS_BIGENDIAN
+    return u.i[1];
+#else
+    return u.i[0];
+#endif
 }
 
 cairo_fixed_t
-- 
1.2.6
-------------- next part --------------
From nobody Mon Sep 17 00:00:00 2001
From: Dan Amelang <dan at amelang.net>
Date: Tue Oct 31 23:47:35 2006 -0800
Subject: [PATCH] Add new perf test "pattern_create_radial"

This test is really just for hammering the double to fixed-point conversion
(in _cairo_fixed_from_double) that happens as doubles from API calls gets
translated into internal cairo fixed-point numbers.

Because it's not generally useful, I don't recommend that it become part of
the main cairo performance test. But hey, it might come in handy for someone
else.

---

 perf/Makefile.am             |    1 
 perf/cairo-perf.c            |    1 
 perf/cairo-perf.h            |    1 
 perf/pattern_create_radial.c |   98 ++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 101 insertions(+), 0 deletions(-)
 create mode 100644 perf/pattern_create_radial.c

977383b86c68d0523c899efcba3cf8d36e94d2a7
diff --git a/perf/Makefile.am b/perf/Makefile.am
index 419a998..e1cfdc7 100644
--- a/perf/Makefile.am
+++ b/perf/Makefile.am
@@ -21,6 +21,7 @@ cairo_perf_SOURCES =		\
 	stroke.c		\
 	subimage_copy.c		\
 	tessellate.c		\
+	pattern_create_radial.c \
 	text.c
 
 if CAIRO_HAS_WIN32_SURFACE
diff --git a/perf/cairo-perf.c b/perf/cairo-perf.c
index d9734c4..0707433 100644
--- a/perf/cairo-perf.c
+++ b/perf/cairo-perf.c
@@ -256,5 +256,6 @@ cairo_perf_case_t perf_cases[] = {
     { text,   64, 256},
     { tessellate, 100, 100},
     { subimage_copy, 16, 512},
+    { pattern_create_radial, 16, 16},
     { NULL }
 };
diff --git a/perf/cairo-perf.h b/perf/cairo-perf.h
index 560ba64..faacff9 100644
--- a/perf/cairo-perf.h
+++ b/perf/cairo-perf.h
@@ -88,5 +88,6 @@ CAIRO_PERF_DECL (stroke);
 CAIRO_PERF_DECL (subimage_copy);
 CAIRO_PERF_DECL (tessellate);
 CAIRO_PERF_DECL (text);
+CAIRO_PERF_DECL (pattern_create_radial);
 
 #endif
diff --git a/perf/pattern_create_radial.c b/perf/pattern_create_radial.c
new file mode 100644
index 0000000..d793b7d
--- /dev/null
+++ b/perf/pattern_create_radial.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright ?? 2006 Dan Amelang
+ *
+ * Permission to use, copy, modify, distribute, and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of
+ * the authors not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. The authors make no representations about the
+ * suitability of this software for any purpose.  It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+ * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors: Dan Amelang <dan at amelang.net>
+ *
+ * This test was originally created to test _cairo_fixed_from_double.
+ * cairo_pattern_create_radial was selected as the entry point into
+ * cairo as it makes several calls to _cairo_fixed_from_double and
+ * presents a somewhat realistic use-case (although the RADIALS_COUNT
+ * isn't very realistic).
+ */
+#include <time.h>
+#include "cairo-perf.h"
+
+#define RADIALS_COUNT (100000)
+
+static struct
+{
+    double cx0;
+    double cy0;
+    double radius0;
+    double cx1;
+    double cy1;
+    double radius1;
+} radials[RADIALS_COUNT];
+
+static double
+generate_double_in_range (double min, double max)
+{
+    double d;
+
+    d = rand () / (double) RAND_MAX;
+    d *= max - min;
+    d += min;
+
+    return d;
+}
+
+static cairo_perf_ticks_t
+do_pattern_create_radial (cairo_t *cr, int width, int height)
+{
+    int i;
+    cairo_pattern_t *pattern;
+
+    cairo_perf_timer_start ();
+
+    for (i = 0; i < RADIALS_COUNT; i++)
+    {
+        pattern = cairo_pattern_create_radial (radials[i].cx0, radials[i].cy0,
+                                               radials[i].radius0,
+                                               radials[i].cx1, radials[i].cy1,
+                                               radials[i].radius1);
+        cairo_pattern_destroy (pattern);
+    }
+
+    cairo_perf_timer_stop ();
+
+    return cairo_perf_timer_elapsed ();
+}
+
+void
+pattern_create_radial (cairo_perf_t *perf, cairo_t *cr, int width, int height)
+{
+    int i;
+
+    srand (time (0));
+    for (i = 0; i < RADIALS_COUNT; i++)
+    {
+        radials[i].cx0 = generate_double_in_range (-50000.0, 50000.0);
+        radials[i].cy0 = generate_double_in_range (-50000.0, 50000.0);
+        radials[i].radius0 = generate_double_in_range (0.0, 1000.0);
+        radials[i].cx1 = generate_double_in_range (-50000.0, 50000.0);
+        radials[i].cy1 = generate_double_in_range (-50000.0, 50000.0);
+        radials[i].radius1 = generate_double_in_range (0.0, 1000.0);
+    }
+
+    cairo_perf_run (perf, "pattern_create_radial",
+                          do_pattern_create_radial);
+}
-- 
1.2.6
-------------- next part --------------
Speedups
========
image-rgb       pattern_create_radial-16    83.77 0.16% ->  27.20 0.64%:  3.08x speedup
?????????
image-rgba      pattern_create_radial-16    83.76 0.25% ->  27.21 0.79%:  3.08x speedup
?????????
 xlib-rgba      pattern_create_radial-16    90.05 0.33% ->  33.80 0.34%:  2.66x speedup
??????
 xlib-rgb       pattern_create_radial-16    90.85 0.57% ->  34.80 0.47%:  2.61x speedup
??????
image-rgba        text_solid_rgb_over-64     0.99 1.06% ->   0.69 0.32%:  1.44x speedup
???
image-rgba       text_solid_rgba_over-64     0.99 0.46% ->   0.69 0.44%:  1.43x speedup
???
image-rgba      text_similar_rgb_over-64     1.02 1.54% ->   0.72 0.26%:  1.42x speedup
???
image-rgb        text_solid_rgba_over-64     0.99 0.74% ->   0.69 0.20%:  1.42x speedup
???
image-rgba       text_image_rgba_over-64     1.02 0.33% ->   0.72 0.06%:  1.42x speedup
???
image-rgb         text_image_rgb_over-64     1.01 0.36% ->   0.72 0.08%:  1.41x speedup
???
image-rgb      text_similar_rgba_over-64     1.03 1.16% ->   0.73 1.55%:  1.41x speedup
???
image-rgba        text_solid_rgb_over-256    6.82 1.50% ->   4.84 0.71%:  1.41x speedup
???
image-rgb       text_similar_rgb_over-64     1.02 0.21% ->   0.73 0.45%:  1.40x speedup
???
image-rgba        text_image_rgb_over-64     1.02 0.35% ->   0.73 1.62%:  1.40x speedup
???
image-rgb         text_solid_rgb_over-64     0.99 1.64% ->   0.71 2.56%:  1.40x speedup
???
image-rgb        text_image_rgba_over-64     1.02 0.31% ->   0.73 0.25%:  1.40x speedup
???
image-rgba     text_similar_rgba_over-64     1.02 0.47% ->   0.73 0.80%:  1.40x speedup
???
image-rgba       text_solid_rgba_over-128    1.72 0.92% ->   1.24 0.34%:  1.39x speedup
???
image-rgba        text_solid_rgb_over-128    1.72 0.64% ->   1.24 0.33%:  1.39x speedup
???
image-rgba       text_solid_rgba_over-256    6.68 0.70% ->   4.84 0.65%:  1.38x speedup
???
image-rgb         text_solid_rgb_over-128    1.72 0.87% ->   1.24 0.32%:  1.38x speedup
???
image-rgb        text_solid_rgba_over-256    6.70 0.49% ->   4.86 0.41%:  1.38x speedup
???
image-rgb         text_solid_rgb_over-256    6.68 0.75% ->   4.85 0.74%:  1.38x speedup
???
image-rgb        text_solid_rgba_over-128    1.72 0.95% ->   1.25 1.27%:  1.37x speedup
???
image-rgba       text_linear_rgb_over-64     1.15 0.97% ->   0.85 0.35%:  1.36x speedup
???
image-rgb      text_similar_rgba_over-128    1.92 1.28% ->   1.42 0.66%:  1.35x speedup
???
image-rgba        text_image_rgb_over-128    1.90 0.73% ->   1.41 0.19%:  1.35x speedup
???
image-rgba        text_image_rgb_over-256    7.42 0.14% ->   5.50 0.32%:  1.35x speedup
???
image-rgba     text_similar_rgba_over-128    1.90 0.83% ->   1.41 0.25%:  1.35x speedup
???
image-rgb       text_similar_rgb_over-256    7.43 1.06% ->   5.51 0.55%:  1.35x speedup
???
image-rgba      text_linear_rgba_over-64     1.15 0.29% ->   0.85 0.62%:  1.35x speedup
???
image-rgb       text_linear_rgba_over-64     1.14 0.26% ->   0.85 0.22%:  1.35x speedup
???
image-rgba      text_similar_rgb_over-128    1.90 0.99% ->   1.41 0.85%:  1.35x speedup
???
image-rgba     text_similar_rgba_over-256    7.42 0.58% ->   5.52 0.26%:  1.34x speedup
???
image-rgb       text_similar_rgb_over-128    1.90 0.94% ->   1.41 0.51%:  1.34x speedup
???
image-rgba       text_image_rgba_over-128    1.90 0.43% ->   1.41 0.29%:  1.34x speedup
???
image-rgb        text_image_rgba_over-256    7.41 0.70% ->   5.53 0.30%:  1.34x speedup
???
image-rgba      text_similar_rgb_over-256    7.39 0.50% ->   5.52 0.50%:  1.34x speedup
???
image-rgb        text_linear_rgb_over-64     1.14 0.31% ->   0.85 0.46%:  1.34x speedup
???
image-rgb        text_image_rgba_over-128    1.91 0.97% ->   1.42 0.79%:  1.34x speedup
???
image-rgba       text_image_rgba_over-256    7.41 0.27% ->   5.54 0.42%:  1.34x speedup
???
image-rgb      text_similar_rgba_over-256    7.40 0.42% ->   5.53 0.51%:  1.34x speedup
???
image-rgb         text_image_rgb_over-256    7.38 0.40% ->   5.52 0.55%:  1.34x speedup
???
image-rgb         text_image_rgb_over-128    1.89 0.59% ->   1.42 1.94%:  1.33x speedup
???
image-rgba      text_radial_rgba_over-64     1.24 0.28% ->   0.95 1.05%:  1.31x speedup
???
image-rgba       text_radial_rgb_over-64     1.25 0.60% ->   0.96 1.53%:  1.30x speedup
???
image-rgb        text_radial_rgb_over-64     1.24 0.29% ->   0.95 0.38%:  1.30x speedup
???
image-rgb       text_radial_rgba_over-64     1.24 0.43% ->   0.97 2.62%:  1.28x speedup
???
 xlib-rgba       paint_solid_rgb_over-512    0.30 2.48% ->   0.24 2.04%:  1.28x speedup
???
 xlib-rgba     paint_solid_rgb_source-512    0.30 0.66% ->   0.23 0.61%:  1.27x speedup
???
image-rgba      text_linear_rgba_over-128    2.39 0.86% ->   1.90 0.63%:  1.26x speedup
???
image-rgb        text_linear_rgb_over-128    2.39 1.02% ->   1.90 0.67%:  1.26x speedup
???
 xlib-rgba    paint_solid_rgba_source-512    0.30 0.21% ->   0.24 1.70%:  1.26x speedup
???
image-rgba       text_linear_rgb_over-256    9.42 0.30% ->   7.53 0.73%:  1.25x speedup
???
 xlib-rgba      text_similar_rgb_over-256    9.59 1.14% ->   7.68 0.48%:  1.25x speedup
???
 xlib-rgba      text_similar_rgb_over-128    2.50 0.57% ->   2.01 0.32%:  1.25x speedup
???
image-rgb       text_linear_rgba_over-256    9.40 0.95% ->   7.55 0.95%:  1.25x speedup
???
image-rgb        text_linear_rgb_over-256    9.36 0.27% ->   7.52 0.27%:  1.24x speedup
???
image-rgb       text_linear_rgba_over-128    2.38 0.57% ->   1.91 1.50%:  1.24x speedup
???
 xlib-rgba     text_similar_rgba_over-256    9.55 0.34% ->   7.69 0.56%:  1.24x speedup
???
 xlib-rgba     text_similar_rgba_over-128    2.50 0.41% ->   2.01 0.84%:  1.24x speedup
???
image-rgba       text_linear_rgb_over-128    2.40 0.71% ->   1.93 2.32%:  1.24x speedup
???
image-rgba      text_linear_rgba_over-256    9.38 0.37% ->   7.58 0.68%:  1.24x speedup
???
 xlib-rgba        text_solid_rgb_over-256    9.99 0.76% ->   8.08 0.32%:  1.24x speedup
???
 xlib-rgba        text_solid_rgb_over-128    2.64 0.77% ->   2.14 0.65%:  1.24x speedup
???
 xlib-rgba       text_solid_rgba_over-256    9.89 0.23% ->   8.09 0.48%:  1.22x speedup
???
 xlib-rgba       text_solid_rgba_over-128    2.62 1.14% ->   2.15 1.11%:  1.22x speedup
???
image-rgba       text_radial_rgb_over-128    2.84 1.77% ->   2.34 0.55%:  1.22x speedup
???
image-rgba      text_radial_rgba_over-128    2.84 1.35% ->   2.34 0.57%:  1.21x speedup
???
image-rgb       text_radial_rgba_over-128    2.81 0.77% ->   2.33 0.43%:  1.21x speedup
???
 xlib-rgba        text_image_rgb_over-128    2.83 0.57% ->   2.35 0.79%:  1.21x speedup
???
image-rgb        text_radial_rgb_over-128    2.83 0.78% ->   2.34 0.78%:  1.21x speedup
???
image-rgba      text_radial_rgba_over-256   11.17 0.31% ->   9.27 0.64%:  1.20x speedup
???
image-rgb       text_radial_rgba_over-256   11.14 0.47% ->   9.26 0.46%:  1.20x speedup
???
 xlib-rgba       text_image_rgba_over-128    2.83 0.52% ->   2.35 1.11%:  1.20x speedup
???
image-rgba       text_radial_rgb_over-256   11.17 0.33% ->   9.36 1.30%:  1.19x speedup
???
 xlib-rgba       text_image_rgba_over-256   11.66 0.62% ->   9.78 0.54%:  1.19x speedup
???
 xlib-rgba        text_image_rgb_over-256   11.64 0.51% ->   9.78 0.32%:  1.19x speedup
???
image-rgba   text_similar_rgba_source-64     1.21 1.18% ->   1.02 0.16%:  1.19x speedup
???
image-rgba      text_image_rgb_source-64     1.21 0.30% ->   1.02 0.16%:  1.19x speedup
???
image-rgb        text_radial_rgb_over-256   11.10 0.42% ->   9.36 1.51%:  1.19x speedup
???
image-rgb      text_image_rgba_source-64     1.21 2.42% ->   1.02 1.61%:  1.19x speedup
???
image-rgb       text_solid_rgb_source-64     1.22 0.94% ->   1.03 0.43%:  1.18x speedup
???
image-rgb     text_similar_rgb_source-64     1.20 0.30% ->   1.01 0.29%:  1.18x speedup
???
image-rgb       text_image_rgb_source-64     1.19 0.26% ->   1.01 0.49%:  1.18x speedup
???
image-rgb    text_similar_rgba_source-64     1.21 0.26% ->   1.02 0.48%:  1.18x speedup
???
image-rgba    text_similar_rgb_source-64     1.20 0.24% ->   1.02 0.28%:  1.18x speedup
???
image-rgba              subimage_copy-256    0.01 1.27% ->   0.01 1.17%:  1.17x speedup
???
image-rgb      text_solid_rgba_source-64     1.22 0.97% ->   1.04 1.14%:  1.17x speedup
???
image-rgba     text_image_rgba_source-64     1.20 0.27% ->   1.02 1.47%:  1.17x speedup
???
image-rgb               subimage_copy-64     0.01 0.98% ->   0.01 1.41%:  1.17x speedup
???
image-rgba              subimage_copy-512    0.01 2.46% ->   0.01 1.63%:  1.17x speedup
???
image-rgba      text_solid_rgb_source-64     1.23 1.35% ->   1.05 1.42%:  1.17x speedup
???
image-rgba     text_solid_rgba_source-64     1.22 0.47% ->   1.05 1.32%:  1.17x speedup
???
image-rgb               subimage_copy-32     0.01 1.04% ->   0.01 1.75%:  1.17x speedup
???
image-rgba    text_linear_rgba_source-64     1.34 1.03% ->   1.15 0.18%:  1.17x speedup
???
image-rgba              subimage_copy-16     0.01 0.92% ->   0.01 1.40%:  1.16x speedup
???
image-rgb               subimage_copy-256    0.01 1.34% ->   0.01 2.40%:  1.16x speedup
???
image-rgba     text_linear_rgb_source-64     1.35 0.29% ->   1.16 0.32%:  1.16x speedup
???
image-rgba              subimage_copy-128    0.01 1.11% ->   0.01 1.37%:  1.16x speedup
???
image-rgba              subimage_copy-64     0.01 1.23% ->   0.01 1.00%:  1.16x speedup
???
image-rgb      text_radial_rgb_source-64     1.43 1.01% ->   1.24 0.21%:  1.16x speedup
???
image-rgb      text_linear_rgb_source-64     1.34 0.89% ->   1.16 1.08%:  1.16x speedup
???
image-rgba              subimage_copy-32     0.01 1.33% ->   0.01 1.73%:  1.15x speedup
???
image-rgba    text_radial_rgba_source-64     1.45 0.90% ->   1.26 0.76%:  1.15x speedup
???
image-rgba     text_radial_rgb_source-64     1.44 0.88% ->   1.25 0.44%:  1.15x speedup
???
image-rgb     text_linear_rgba_source-64     1.33 1.00% ->   1.16 1.84%:  1.15x speedup
???
image-rgb     text_similar_rgb_source-128    2.55 1.00% ->   2.23 0.61%:  1.14x speedup
???
image-rgb       text_solid_rgb_source-128    2.54 0.72% ->   2.23 0.17%:  1.14x speedup
???
image-rgb     text_radial_rgba_source-64     1.43 0.79% ->   1.25 1.07%:  1.14x speedup
???
image-rgba      text_solid_rgb_source-256   10.17 2.18% ->   8.94 0.66%:  1.14x speedup
???
 xlib-rgba       text_linear_rgb_over-256   17.02 1.81% ->  14.99 0.20%:  1.14x speedup
???
image-rgba     text_image_rgba_source-256   10.00 0.44% ->   8.80 0.69%:  1.14x speedup
???
 xlib-rgba      text_linear_rgba_over-256   16.95 1.21% ->  14.93 0.47%:  1.14x speedup
???
image-rgba      text_solid_rgb_source-128    2.55 0.17% ->   2.24 0.17%:  1.14x speedup
???
image-rgba    text_similar_rgb_source-128    2.53 0.57% ->   2.23 0.56%:  1.14x speedup
???
image-rgb    text_similar_rgba_source-256    9.91 0.52% ->   8.73 0.41%:  1.14x speedup
???
image-rgb               subimage_copy-128    0.01 1.51% ->   0.01 0.68%:  1.13x speedup
???
image-rgb      text_image_rgba_source-128    2.52 0.58% ->   2.23 0.56%:  1.13x speedup
???
 xlib-rgba      text_linear_rgba_over-128    4.30 0.48% ->   3.80 0.37%:  1.13x speedup
???
image-rgba     text_image_rgba_source-128    2.54 0.61% ->   2.24 0.79%:  1.13x speedup
???
 xlib-rgba       text_linear_rgb_over-128    4.31 0.37% ->   3.81 0.62%:  1.13x speedup
???
 xlib-rgba     text_image_rgba_source-64     1.73 0.82% ->   1.52 0.23%:  1.13x speedup
???
image-rgba      text_image_rgb_source-128    2.54 0.36% ->   2.24 0.67%:  1.13x speedup
???
image-rgb     text_similar_rgb_source-256    9.89 0.31% ->   8.73 0.27%:  1.13x speedup
???
 xlib-rgba     text_solid_rgba_source-64     1.63 0.80% ->   1.44 0.30%:  1.13x speedup
???
image-rgba    text_similar_rgb_source-256    9.96 0.43% ->   8.79 0.56%:  1.13x speedup
???
image-rgba      text_image_rgb_source-256    9.95 0.23% ->   8.79 0.66%:  1.13x speedup
???
image-rgb       text_solid_rgb_source-256    9.99 0.35% ->   8.83 0.29%:  1.13x speedup
???
image-rgb       text_image_rgb_source-128    2.52 1.19% ->   2.23 0.92%:  1.13x speedup
???
image-rgba     text_solid_rgba_source-256   10.07 0.46% ->   8.91 0.41%:  1.13x speedup
???
image-rgba   text_similar_rgba_source-256    9.96 0.34% ->   8.81 0.30%:  1.13x speedup
???
image-rgb      text_solid_rgba_source-128    2.53 0.58% ->   2.24 0.94%:  1.13x speedup
???
 xlib-rgba    text_similar_rgb_source-64     1.57 0.11% ->   1.39 0.87%:  1.13x speedup
???
image-rgb               subimage_copy-512    0.01 0.59% ->   0.01 0.51%:  1.13x speedup
???
image-rgb       text_image_rgb_source-256    9.88 0.23% ->   8.76 0.53%:  1.13x speedup
???
image-rgb               subimage_copy-16     0.01 0.85% ->   0.01 1.28%:  1.13x speedup
???
image-rgb      text_solid_rgba_source-256   10.00 0.32% ->   8.87 0.15%:  1.13x speedup
???
image-rgba     text_solid_rgba_source-128    2.55 0.67% ->   2.27 1.07%:  1.13x speedup
???
image-rgb    text_similar_rgba_source-128    2.52 0.27% ->   2.24 0.83%:  1.13x speedup
???
 xlib-rgba      text_image_rgb_source-64     1.72 0.66% ->   1.53 0.86%:  1.13x speedup
???
image-rgba   text_similar_rgba_source-128    2.53 0.17% ->   2.25 1.01%:  1.13x speedup
???
 xlib-rgba      text_solid_rgb_source-64     1.63 1.03% ->   1.45 1.23%:  1.13x speedup
???
image-rgb      text_image_rgba_source-256    9.96 1.21% ->   8.87 1.79%:  1.12x speedup
???
 xlib-rgba   text_similar_rgba_source-64     1.57 0.24% ->   1.40 1.43%:  1.12x speedup
???
image-rgb     text_linear_rgba_source-128    3.03 0.86% ->   2.72 0.70%:  1.11x speedup
???
image-rgba    text_linear_rgba_source-128    3.03 0.44% ->   2.72 0.38%:  1.11x speedup
???
 xlib-rgba     text_linear_rgb_source-64     2.14 1.14% ->   1.93 0.34%:  1.11x speedup
???
image-rgb     text_linear_rgba_source-256   11.93 0.42% ->  10.78 1.08%:  1.11x speedup
???
 xlib-rgba    text_linear_rgba_source-64     2.13 0.96% ->   1.93 0.67%:  1.11x speedup
???
image-rgb      text_linear_rgb_source-256   11.85 0.23% ->  10.73 0.41%:  1.10x speedup
???
image-rgb      text_linear_rgb_source-128    3.02 0.63% ->   2.74 2.01%:  1.10x speedup
???
image-rgba     text_linear_rgb_source-128    3.04 0.81% ->   2.76 0.89%:  1.10x speedup
???
image-rgba     text_linear_rgb_source-256   11.96 0.68% ->  10.85 0.60%:  1.10x speedup
???
image-rgb      text_radial_rgb_source-128    3.44 0.42% ->   3.12 0.24%:  1.10x speedup
???
image-rgba    text_linear_rgba_source-256   11.92 0.21% ->  10.82 0.90%:  1.10x speedup
???
 xlib-rgba      text_image_rgb_source-128    3.91 1.15% ->   3.55 0.93%:  1.10x speedup
???
 xlib-rgba    text_similar_rgb_source-128    3.40 0.55% ->   3.09 1.11%:  1.10x speedup
???
image-rgb               tessellate-64-100   10.97 0.42% ->   9.98 0.51%:  1.10x speedup
???
 xlib-rgba              tessellate-64-100   11.00 0.58% ->  10.02 0.73%:  1.10x speedup
???
image-rgba     text_radial_rgb_source-128    3.48 0.83% ->   3.17 0.94%:  1.10x speedup
???
 xlib-rgba    text_similar_rgb_source-256   13.14 0.22% ->  11.98 0.37%:  1.10x speedup
???
 xlib-rgb        text_solid_rgba_over-64     3.66 0.81% ->   3.34 0.38%:  1.09x speedup
???
image-rgba              tessellate-16-100    0.10 0.47% ->   0.09 0.49%:  1.09x speedup
???
image-rgb      text_radial_rgb_source-256   13.81 1.34% ->  12.62 1.49%:  1.09x speedup
???
image-rgba    text_radial_rgba_source-128    3.48 0.59% ->   3.18 0.53%:  1.09x speedup
???
 xlib-rgb               tessellate-64-100   10.97 0.38% ->  10.03 0.46%:  1.09x speedup
???
 xlib-rgba     text_solid_rgba_source-128    3.46 0.42% ->   3.16 0.72%:  1.09x speedup
???
 xlib-rgba      text_radial_rgba_over-128    5.94 0.28% ->   5.43 0.74%:  1.09x speedup
???
 xlib-rgba   text_similar_rgba_source-128    3.39 0.44% ->   3.10 0.93%:  1.09x speedup
???
 xlib-rgb       text_similar_rgb_over-64     3.57 0.59% ->   3.27 0.91%:  1.09x speedup
???
image-rgb               tessellate-16-100    0.10 0.36% ->   0.09 0.41%:  1.09x speedup
???
 xlib-rgba   text_similar_rgba_source-256   13.17 0.45% ->  12.06 0.64%:  1.09x speedup
???
image-rgba     text_radial_rgb_source-256   13.69 0.56% ->  12.54 0.38%:  1.09x speedup
???
image-rgb     text_radial_rgba_source-128    3.43 0.36% ->   3.14 0.47%:  1.09x speedup
???
 xlib-rgba      text_solid_rgb_source-256   13.46 0.32% ->  12.34 0.69%:  1.09x speedup
???
 xlib-rgb         text_solid_rgb_over-64     3.67 0.61% ->   3.36 1.46%:  1.09x speedup
???
 xlib-rgba     text_solid_rgba_source-256   13.44 0.28% ->  12.33 0.14%:  1.09x speedup
???
 xlib-rgb        text_image_rgba_over-64     3.71 0.90% ->   3.41 0.47%:  1.09x speedup
???
image-rgba              tessellate-64-100   10.93 0.45% ->  10.04 0.76%:  1.09x speedup
???
image-rgba             tessellate-256-100  840.18 0.46% -> 772.02 0.22%:  1.09x speedup
???
 xlib-rgba       text_radial_rgb_over-128    5.92 0.67% ->   5.44 0.57%:  1.09x speedup
???
 xlib-rgb              tessellate-256-100  838.29 0.31% -> 770.45 0.08%:  1.09x speedup
???
 xlib-rgba     text_image_rgba_source-128    3.86 0.75% ->   3.55 0.54%:  1.09x speedup
???
image-rgba    text_radial_rgba_source-256   13.63 0.39% ->  12.54 0.38%:  1.09x speedup
???
 xlib-rgb         text_image_rgb_over-64     3.71 0.44% ->   3.42 0.98%:  1.09x speedup
???
image-rgb     text_radial_rgba_source-256   13.54 0.15% ->  12.46 0.56%:  1.09x speedup
???
 xlib-rgba             tessellate-256-100  837.04 0.21% -> 770.85 0.11%:  1.09x speedup
???
 xlib-rgba      text_image_rgb_source-256   15.51 0.47% ->  14.28 0.55%:  1.09x speedup
???
 xlib-rgba      text_radial_rgba_over-256   23.43 0.95% ->  21.58 0.54%:  1.09x speedup
???
 xlib-rgba      text_solid_rgb_source-128    3.46 0.38% ->   3.19 1.11%:  1.08x speedup
???
 xlib-rgb       text_linear_rgba_over-64     4.13 0.52% ->   3.81 0.49%:  1.08x speedup
???
 xlib-rgba     text_image_rgba_source-256   15.48 0.39% ->  14.28 0.39%:  1.08x speedup
???
image-rgb              tessellate-256-100  836.88 0.07% -> 772.21 0.29%:  1.08x speedup
???
 xlib-rgb      text_similar_rgba_over-64     3.59 1.09% ->   3.31 1.47%:  1.08x speedup
???
 xlib-rgba     text_radial_rgb_source-64     2.52 0.62% ->   2.34 0.73%:  1.08x speedup
???
 xlib-rgba    text_radial_rgba_source-64     2.54 1.14% ->   2.35 1.30%:  1.08x speedup
???
 xlib-rgb        text_linear_rgb_over-64     4.13 0.58% ->   3.83 1.20%:  1.08x speedup
???
 xlib-rgba       text_radial_rgb_over-256   23.49 1.39% ->  21.80 1.05%:  1.08x speedup
???
 xlib-rgba              tessellate-16-100    0.13 0.30% ->   0.12 0.07%:  1.08x speedup
???
 xlib-rgb        text_radial_rgb_over-64     4.51 0.43% ->   4.21 0.61%:  1.07x speedup
???
 xlib-rgb       text_radial_rgba_over-64     4.51 0.74% ->   4.22 0.94%:  1.07x speedup
???
 xlib-rgb               tessellate-16-100    0.13 0.44% ->   0.12 0.40%:  1.07x speedup
???
 xlib-rgba     text_linear_rgb_source-256   20.64 0.37% ->  19.33 0.15%:  1.07x speedup
???
 xlib-rgba    text_linear_rgba_source-256   20.60 0.16% ->  19.32 0.17%:  1.07x speedup
???
 xlib-rgba     text_linear_rgb_source-128    5.35 0.78% ->   5.02 0.47%:  1.06x speedup
???
image-rgb     paint_solid_rgba_source-512    0.40 0.38% ->   0.38 0.02%:  1.06x speedup

 xlib-rgba    text_linear_rgba_source-128    5.33 0.34% ->   5.05 0.95%:  1.06x speedup

image-rgb      paint_solid_rgb_source-512    0.40 0.24% ->   0.38 0.10%:  1.05x speedup

Slowdowns
=========
image-rgba    paint_solid_rgba_source-512    0.39 0.35% ->   0.44 1.50%:  1.11x slowdown
???
image-rgba     paint_solid_rgb_source-512    0.39 0.18% ->   0.43 0.94%:  1.11x slowdown
???
image-rgb      fill_radial_rgb_source-256    5.62 0.45% ->   5.90 0.92%:  1.05x slowdown

-------------- next part --------------
Speedups
========
image-rgba      pattern_create_radial-16   223.32 0.15% ->  73.96 0.53%:  3.02x speedup
??????
image-rgb       pattern_create_radial-16   223.22 0.12% ->  73.92 0.19%:  3.02x speedup
??????
 xlib-rgba      pattern_create_radial-16   231.80 1.24% ->  80.01 0.18%:  2.90x speedup
??????
 xlib-rgb       pattern_create_radial-16   230.20 0.07% ->  80.05 0.29%:  2.88x speedup
??????
 xlib-rgb              tessellate-256-100  598.99 2.44% -> 388.02 0.50%:  1.54x speedup
???
image-rgb              tessellate-256-100  594.26 2.75% -> 386.08 0.97%:  1.54x speedup
???
 xlib-rgba             tessellate-256-100  589.64 0.75% -> 385.57 0.71%:  1.53x speedup
???
image-rgba             tessellate-256-100  587.09 0.26% -> 387.92 0.95%:  1.51x speedup
???
image-rgba       text_image_rgba_over-64     2.25 1.48% ->   1.65 0.33%:  1.36x speedup
???
image-rgba        text_image_rgb_over-64     2.23 1.30% ->   1.64 0.29%:  1.36x speedup
???
image-rgb      text_similar_rgba_over-64     2.23 0.66% ->   1.64 0.21%:  1.36x speedup
???
image-rgb         text_image_rgb_over-64     2.21 0.52% ->   1.64 0.22%:  1.35x speedup
???
image-rgba        text_solid_rgb_over-64     2.21 1.41% ->   1.64 1.90%:  1.35x speedup
???
image-rgba     text_similar_rgba_over-64     2.23 1.22% ->   1.66 0.75%:  1.35x speedup
???
image-rgba      text_similar_rgb_over-64     2.22 0.69% ->   1.65 0.30%:  1.35x speedup
???
image-rgba       text_solid_rgba_over-64     2.19 1.26% ->   1.63 1.08%:  1.35x speedup
???
image-rgb        text_solid_rgba_over-128    3.71 0.98% ->   2.76 0.65%:  1.34x speedup
???
image-rgb        text_solid_rgba_over-64     2.18 0.25% ->   1.63 1.14%:  1.34x speedup
???
image-rgb        text_solid_rgba_over-256   14.33 0.63% ->  10.67 0.35%:  1.34x speedup
???
image-rgba      text_linear_rgba_over-64     2.37 1.32% ->   1.77 0.22%:  1.34x speedup
???
image-rgb         text_solid_rgb_over-256   14.34 0.55% ->  10.72 0.66%:  1.34x speedup
???
image-rgb         text_solid_rgb_over-64     2.18 0.19% ->   1.63 1.36%:  1.34x speedup
???
image-rgba        text_solid_rgb_over-256   14.32 0.58% ->  10.72 0.65%:  1.34x speedup
???
image-rgba       text_solid_rgba_over-128    3.70 0.37% ->   2.77 1.02%:  1.34x speedup
???
image-rgba       text_solid_rgba_over-256   14.31 0.15% ->  10.72 0.54%:  1.34x speedup
???
image-rgb         text_solid_rgb_over-128    3.70 0.87% ->   2.77 1.17%:  1.33x speedup
???
image-rgba        text_solid_rgb_over-128    3.69 0.65% ->   2.77 0.66%:  1.33x speedup
???
image-rgb         text_image_rgb_over-256   15.11 0.75% ->  11.39 0.33%:  1.33x speedup
???
image-rgba       text_linear_rgb_over-64     2.36 0.73% ->   1.78 0.20%:  1.33x speedup
???
image-rgba     text_similar_rgba_over-128    3.88 0.65% ->   2.93 0.33%:  1.32x speedup
???
image-rgb      text_similar_rgba_over-128    3.87 0.51% ->   2.93 0.76%:  1.32x speedup
???
image-rgb        text_image_rgba_over-64     2.21 0.57% ->   1.67 1.49%:  1.32x speedup
???
image-rgb       text_similar_rgb_over-128    3.86 0.73% ->   2.93 0.56%:  1.32x speedup
???
image-rgba      text_similar_rgb_over-128    3.86 0.36% ->   2.92 0.35%:  1.32x speedup
???
image-rgba        text_image_rgb_over-256   15.04 0.59% ->  11.39 0.50%:  1.32x speedup
???
image-rgb        text_linear_rgb_over-64     2.35 0.55% ->   1.78 0.82%:  1.32x speedup
???
image-rgba        text_image_rgb_over-128    3.86 0.70% ->   2.93 0.53%:  1.32x speedup
???
image-rgb     text_similar_rgb_source-64     2.58 2.24% ->   1.96 0.75%:  1.32x speedup
???
image-rgb       text_linear_rgba_over-64     2.35 0.45% ->   1.78 1.00%:  1.32x speedup
???
image-rgb       text_similar_rgb_over-64     2.21 0.26% ->   1.68 2.10%:  1.32x speedup
???
image-rgb        text_image_rgba_over-256   15.04 0.34% ->  11.43 0.26%:  1.32x speedup
???
image-rgb      text_solid_rgba_source-64     2.60 1.11% ->   1.97 0.78%:  1.32x speedup
???
image-rgba    text_similar_rgb_source-64     2.57 0.73% ->   1.95 0.24%:  1.32x speedup
???
image-rgba     text_similar_rgba_over-256   15.03 0.36% ->  11.43 0.53%:  1.32x speedup
???
image-rgba       text_image_rgba_over-256   15.08 0.77% ->  11.47 0.79%:  1.32x speedup
???
image-rgb      text_similar_rgba_over-256   15.03 0.49% ->  11.43 0.80%:  1.31x speedup
???
image-rgba     text_image_rgba_source-64     2.58 1.25% ->   1.96 0.71%:  1.31x speedup
???
image-rgba      text_similar_rgb_over-256   15.01 0.49% ->  11.43 0.54%:  1.31x speedup
???
image-rgba      text_solid_rgb_source-64     2.60 0.74% ->   1.98 0.42%:  1.31x speedup
???
image-rgba     text_solid_rgba_source-64     2.59 0.60% ->   1.97 0.19%:  1.31x speedup
???
image-rgb        text_image_rgba_over-128    3.86 0.35% ->   2.94 0.55%:  1.31x speedup
???
image-rgb       text_similar_rgb_over-256   14.99 0.20% ->  11.43 0.61%:  1.31x speedup
???
image-rgb      text_image_rgba_source-64     2.56 0.72% ->   1.95 0.22%:  1.31x speedup
???
image-rgba       text_image_rgba_over-128    3.87 0.52% ->   2.95 1.05%:  1.31x speedup
???
image-rgb       text_solid_rgb_source-64     2.59 0.80% ->   1.98 1.37%:  1.31x speedup
???
image-rgb       text_image_rgb_source-64     2.57 0.64% ->   1.96 1.06%:  1.31x speedup
???
image-rgb         text_image_rgb_over-128    3.84 0.27% ->   2.94 0.88%:  1.31x speedup
???
image-rgba      text_image_rgb_source-64     2.58 0.94% ->   1.97 1.33%:  1.31x speedup
???
image-rgba   text_similar_rgba_source-64     2.57 0.39% ->   1.96 0.64%:  1.31x speedup
???
image-rgb    text_similar_rgba_source-64     2.58 1.02% ->   1.97 0.78%:  1.31x speedup
???
image-rgb      text_linear_rgb_source-64     2.71 1.11% ->   2.09 0.82%:  1.30x speedup
???
image-rgb     text_linear_rgba_source-64     2.71 0.84% ->   2.10 0.66%:  1.29x speedup
???
image-rgb               subimage_copy-512    0.01 2.85% ->   0.01 0.54%:  1.29x speedup
???
image-rgba    text_linear_rgba_source-64     2.70 0.21% ->   2.10 0.77%:  1.29x speedup
???
image-rgba      text_linear_rgba_over-128    4.38 0.80% ->   3.42 0.33%:  1.28x speedup
???
 xlib-rgba     text_similar_rgba_over-128    4.55 1.34% ->   3.56 0.48%:  1.28x speedup
???
image-rgb      text_solid_rgba_source-256   18.94 2.64% ->  14.84 0.29%:  1.28x speedup
???
 xlib-rgba       text_image_rgba_over-128    4.94 2.37% ->   3.87 0.37%:  1.28x speedup
???
image-rgb       text_image_rgb_source-256   18.86 1.08% ->  14.78 0.30%:  1.28x speedup
???
image-rgba     text_image_rgba_source-128    4.82 0.83% ->   3.78 0.31%:  1.27x speedup
???
 xlib-rgba   text_similar_rgba_source-64     2.97 1.23% ->   2.33 0.49%:  1.27x speedup
???
image-rgba     text_linear_rgb_source-64     2.71 0.58% ->   2.13 2.78%:  1.27x speedup
???
image-rgb       text_solid_rgb_source-128    4.81 0.89% ->   3.78 0.72%:  1.27x speedup
???
image-rgb       text_image_rgb_source-128    4.80 0.95% ->   3.78 0.39%:  1.27x speedup
???
image-rgb        text_linear_rgb_over-128    4.38 0.54% ->   3.46 0.99%:  1.27x speedup
???
image-rgba     text_solid_rgba_source-128    4.83 0.65% ->   3.81 0.51%:  1.27x speedup
???
image-rgba      text_linear_rgba_over-256   17.05 0.33% ->  13.46 0.35%:  1.27x speedup
???
image-rgba    text_similar_rgb_source-128    4.80 1.13% ->   3.79 0.90%:  1.27x speedup
???
image-rgb       text_linear_rgba_over-256   17.06 0.26% ->  13.47 0.56%:  1.27x speedup
???
image-rgb    text_similar_rgba_source-256   18.73 0.63% ->  14.79 0.24%:  1.27x speedup
???
image-rgba      text_image_rgb_source-128    4.80 0.65% ->   3.79 0.50%:  1.27x speedup
???
image-rgb       text_linear_rgba_over-128    4.37 0.51% ->   3.45 0.65%:  1.27x speedup
???
image-rgba   text_similar_rgba_source-128    4.79 0.57% ->   3.79 0.40%:  1.27x speedup
???
 xlib-rgba      text_similar_rgb_over-128    4.49 0.52% ->   3.55 0.80%:  1.26x speedup
???
 xlib-rgba    text_similar_rgb_source-64     2.95 0.69% ->   2.34 0.72%:  1.26x speedup
???
image-rgba   text_similar_rgba_source-256   18.75 0.64% ->  14.83 0.25%:  1.26x speedup
???
image-rgb      text_solid_rgba_source-128    4.79 0.62% ->   3.79 0.41%:  1.26x speedup
???
image-rgba       text_linear_rgb_over-256   17.05 0.34% ->  13.49 0.53%:  1.26x speedup
???
image-rgb     text_similar_rgb_source-256   18.66 0.45% ->  14.77 0.34%:  1.26x speedup
???
image-rgba      text_image_rgb_source-256   18.68 0.25% ->  14.78 0.30%:  1.26x speedup
???
image-rgba      text_solid_rgb_source-128    4.83 1.09% ->   3.82 1.08%:  1.26x speedup
???
image-rgb    text_similar_rgba_source-128    4.77 0.49% ->   3.77 0.30%:  1.26x speedup
???
image-rgb        text_linear_rgb_over-256   17.05 0.11% ->  13.52 0.57%:  1.26x speedup
???
image-rgb      text_image_rgba_source-128    4.77 0.46% ->   3.79 0.82%:  1.26x speedup
???
image-rgb     text_similar_rgb_source-128    4.77 0.60% ->   3.78 0.45%:  1.26x speedup
???
 xlib-rgba      text_solid_rgb_source-64     3.03 1.51% ->   2.41 0.96%:  1.26x speedup
???
image-rgba     text_solid_rgba_source-256   18.77 0.32% ->  14.91 0.40%:  1.26x speedup
???
image-rgba     text_image_rgba_source-256   18.72 0.29% ->  14.88 0.32%:  1.26x speedup
???
image-rgba    text_similar_rgb_source-256   18.65 0.45% ->  14.83 0.39%:  1.26x speedup
???
image-rgba    text_linear_rgba_source-128    5.40 2.84% ->   4.29 0.61%:  1.26x speedup
???
 xlib-rgba       text_solid_rgba_over-128    4.62 0.29% ->   3.68 1.31%:  1.26x speedup
???
image-rgb      text_image_rgba_source-256   18.62 0.32% ->  14.82 0.64%:  1.26x speedup
???
 xlib-rgba      text_similar_rgb_over-256   17.25 0.33% ->  13.74 0.56%:  1.26x speedup
???
image-rgba       text_linear_rgb_over-128    4.39 0.82% ->   3.50 2.15%:  1.26x speedup
???
image-rgba      text_solid_rgb_source-256   18.75 0.25% ->  14.95 0.56%:  1.25x speedup
???
image-rgb       text_solid_rgb_source-256   18.70 0.33% ->  14.91 0.53%:  1.25x speedup
???
 xlib-rgba     text_similar_rgba_over-256   17.27 0.36% ->  13.79 0.40%:  1.25x speedup
???
 xlib-rgba     text_image_rgba_source-64     3.11 0.86% ->   2.48 0.62%:  1.25x speedup
???
 xlib-rgba        text_solid_rgb_over-128    4.61 0.57% ->   3.69 0.91%:  1.25x speedup
???
 xlib-rgba       text_solid_rgba_over-256   17.63 0.34% ->  14.12 0.26%:  1.25x speedup
???
 xlib-rgba     text_solid_rgba_source-64     3.00 0.46% ->   2.40 0.92%:  1.25x speedup
???
 xlib-rgba        text_image_rgb_over-128    4.82 0.52% ->   3.87 0.42%:  1.25x speedup
???
image-rgb               subimage_copy-16     0.01 2.67% ->   0.01 0.97%:  1.24x speedup
???
 xlib-rgba      text_image_rgb_source-64     3.08 0.29% ->   2.48 0.66%:  1.24x speedup
???
 xlib-rgba        text_solid_rgb_over-256   17.65 0.44% ->  14.28 1.10%:  1.24x speedup
???
image-rgb      text_linear_rgb_source-128    5.28 0.21% ->   4.28 0.37%:  1.24x speedup
???
image-rgba              subimage_copy-512    0.01 2.66% ->   0.01 0.44%:  1.24x speedup
???
image-rgba              subimage_copy-16     0.01 2.21% ->   0.01 1.62%:  1.23x speedup
???
image-rgba     text_linear_rgb_source-128    5.31 0.49% ->   4.31 0.61%:  1.23x speedup
???
 xlib-rgba    text_linear_rgba_source-64     3.60 1.35% ->   2.92 0.67%:  1.23x speedup
???
image-rgb     text_linear_rgba_source-256   20.63 0.39% ->  16.80 0.26%:  1.23x speedup
???
image-rgb     text_linear_rgba_source-128    5.29 0.68% ->   4.31 1.16%:  1.23x speedup
???
image-rgb      text_linear_rgb_source-256   20.66 0.13% ->  16.84 0.31%:  1.23x speedup
???
image-rgba    text_linear_rgba_source-256   20.72 0.54% ->  16.91 0.47%:  1.23x speedup
???
image-rgb               subimage_copy-32     0.01 0.32% ->   0.01 0.50%:  1.22x speedup
???
 xlib-rgba   text_similar_rgba_source-128    5.70 0.89% ->   4.66 0.48%:  1.22x speedup
???
image-rgba     text_linear_rgb_source-256   20.66 0.24% ->  16.91 0.52%:  1.22x speedup
???
 xlib-rgba     text_solid_rgba_source-128    5.75 0.43% ->   4.72 0.55%:  1.22x speedup
???
image-rgba              subimage_copy-128    0.01 0.34% ->   0.01 1.23%:  1.22x speedup
???
image-rgba              subimage_copy-64     0.01 0.38% ->   0.01 1.34%:  1.22x speedup
???
image-rgb               subimage_copy-256    0.01 0.75% ->   0.01 0.57%:  1.22x speedup
???
image-rgb               subimage_copy-64     0.01 0.57% ->   0.01 0.57%:  1.21x speedup
???
 xlib-rgba        text_image_rgb_over-256   19.39 0.19% ->  15.98 0.28%:  1.21x speedup
???
image-rgba              subimage_copy-32     0.01 0.40% ->   0.01 0.86%:  1.21x speedup
???
image-rgb               subimage_copy-128    0.01 0.50% ->   0.01 0.75%:  1.21x speedup
???
image-rgba              subimage_copy-256    0.01 0.27% ->   0.01 0.48%:  1.21x speedup
???
 xlib-rgba      text_solid_rgb_source-128    5.74 0.50% ->   4.74 0.71%:  1.21x speedup
???
 xlib-rgba    text_similar_rgb_source-128    5.67 0.63% ->   4.68 0.88%:  1.21x speedup
???
 xlib-rgba   text_similar_rgba_source-256   22.02 0.32% ->  18.21 0.29%:  1.21x speedup
???
 xlib-rgba    text_similar_rgb_source-256   21.97 0.33% ->  18.19 0.28%:  1.21x speedup
???
 xlib-rgba     text_solid_rgba_source-256   22.26 0.25% ->  18.45 0.20%:  1.21x speedup
???
 xlib-rgba     text_image_rgba_source-128    6.19 1.58% ->   5.14 0.96%:  1.21x speedup
???
 xlib-rgba      text_solid_rgb_source-256   22.28 0.31% ->  18.51 0.35%:  1.20x speedup
???
 xlib-rgba       text_image_rgba_over-256   19.36 0.31% ->  16.20 1.29%:  1.19x speedup
???
 xlib-rgba      text_image_rgb_source-128    6.14 0.61% ->   5.14 0.86%:  1.19x speedup
???
 xlib-rgba     text_linear_rgb_source-64     3.56 0.38% ->   2.99 2.83%:  1.19x speedup
???
 xlib-rgba       text_linear_rgb_over-128    6.43 1.02% ->   5.42 0.64%:  1.19x speedup
???
 xlib-rgba      text_linear_rgba_over-128    6.43 0.46% ->   5.43 0.55%:  1.18x speedup
???
 xlib-rgba     text_image_rgba_source-256   24.37 0.38% ->  20.67 0.35%:  1.18x speedup
???
 xlib-rgba      text_image_rgb_source-256   24.29 0.38% ->  20.63 0.29%:  1.18x speedup
???
 xlib-rgba       text_linear_rgb_over-256   25.26 0.67% ->  21.52 0.69%:  1.17x speedup
???
 xlib-rgba      text_linear_rgba_over-256   25.06 0.18% ->  21.44 0.25%:  1.17x speedup
???
 xlib-rgba     text_linear_rgb_source-128    7.78 0.44% ->   6.72 0.47%:  1.16x speedup
???
 xlib-rgba    text_linear_rgba_source-128    7.71 0.54% ->   6.69 0.41%:  1.15x speedup
???
 xlib-rgba    text_linear_rgba_source-256   29.92 0.34% ->  26.02 0.18%:  1.15x speedup
???
 xlib-rgba     text_linear_rgb_source-256   29.87 0.22% ->  26.05 0.28%:  1.15x speedup
???
 xlib-rgb        text_solid_rgba_over-64     4.89 0.82% ->   4.29 0.14%:  1.14x speedup
???
 xlib-rgb       text_similar_rgb_over-64     4.79 0.88% ->   4.21 0.42%:  1.14x speedup
???
 xlib-rgb        text_linear_rgb_over-64     5.44 1.01% ->   4.80 0.78%:  1.13x speedup
???
 xlib-rgb        text_image_rgba_over-64     4.94 0.63% ->   4.37 0.85%:  1.13x speedup
???
 xlib-rgb         text_image_rgb_over-64     4.92 0.38% ->   4.35 0.90%:  1.13x speedup
???
 xlib-rgb      text_similar_rgba_over-64     4.80 0.56% ->   4.25 1.29%:  1.13x speedup
???
 xlib-rgb         text_solid_rgb_over-64     4.87 1.33% ->   4.34 2.13%:  1.12x speedup
???
 xlib-rgb       text_linear_rgba_over-64     5.38 0.44% ->   4.80 0.49%:  1.12x speedup
???
 xlib-rgb      text_solid_rgba_source-64     7.65 0.54% ->   7.03 0.46%:  1.09x speedup
???
 xlib-rgb       text_solid_rgb_source-64     7.64 0.33% ->   7.03 0.30%:  1.09x speedup
???
 xlib-rgb     text_linear_rgba_source-64     8.26 0.46% ->   7.60 0.89%:  1.09x speedup
???
image-rgba      text_radial_rgba_over-64     7.30 0.14% ->   6.72 0.42%:  1.09x speedup
???
image-rgb        text_radial_rgb_over-64     7.32 0.55% ->   6.74 0.58%:  1.09x speedup
???
image-rgb       text_radial_rgba_over-64     7.31 0.30% ->   6.73 0.54%:  1.09x speedup
???
 xlib-rgb      text_linear_rgb_source-64     8.26 0.48% ->   7.61 0.98%:  1.09x speedup
???
 xlib-rgba              tessellate-64-100   41.82 0.23% ->  38.54 0.37%:  1.09x speedup
???
 xlib-rgb     text_similar_rgb_source-64     7.58 0.34% ->   6.98 0.45%:  1.08x speedup
???
 xlib-rgb       text_image_rgb_source-64     7.76 0.27% ->   7.16 0.65%:  1.08x speedup
???
image-rgb               tessellate-64-100   41.72 0.31% ->  38.50 0.22%:  1.08x speedup
???
image-rgba              tessellate-16-100    0.35 0.13% ->   0.32 0.14%:  1.08x speedup
???
image-rgb               tessellate-16-100    0.35 0.12% ->   0.32 0.13%:  1.08x speedup
???
 xlib-rgb               tessellate-64-100   41.78 0.47% ->  38.62 0.26%:  1.08x speedup
???
image-rgba     text_radial_rgb_source-64     7.67 0.84% ->   7.10 0.66%:  1.08x speedup
???
image-rgba       text_radial_rgb_over-64     7.30 0.14% ->   6.75 0.68%:  1.08x speedup
???
 xlib-rgb    text_similar_rgba_source-64     7.59 0.25% ->   7.02 0.69%:  1.08x speedup
???
image-rgba    text_radial_rgba_source-64     7.67 0.44% ->   7.10 0.55%:  1.08x speedup
???
 xlib-rgb      text_image_rgba_source-64     7.76 0.29% ->   7.19 0.45%:  1.08x speedup
???
image-rgba              tessellate-64-100   41.70 0.18% ->  38.69 0.61%:  1.08x speedup
???
 xlib-rgba              tessellate-16-100    0.38 0.13% ->   0.35 0.09%:  1.08x speedup
???
 xlib-rgb         text_image_rgb_over-128   14.32 0.58% ->  13.32 0.33%:  1.08x speedup
???
 xlib-rgb      text_similar_rgba_over-128   13.92 0.47% ->  12.95 0.45%:  1.08x speedup
???
 xlib-rgb         text_solid_rgb_over-128   14.10 0.62% ->  13.12 0.33%:  1.07x speedup
???
image-rgb      text_radial_rgb_source-64     7.63 0.48% ->   7.11 0.23%:  1.07x speedup
???
image-rgb     text_radial_rgba_source-64     7.61 0.09% ->   7.10 0.40%:  1.07x speedup
???
 xlib-rgb      text_similar_rgba_over-256   55.51 0.20% ->  51.85 0.26%:  1.07x speedup
???
 xlib-rgb       text_similar_rgb_over-256   55.50 0.28% ->  51.86 0.14%:  1.07x speedup
???
 xlib-rgb        text_solid_rgba_over-128   14.06 0.25% ->  13.14 0.45%:  1.07x speedup
???
 xlib-rgb        text_linear_rgb_over-128   15.87 0.32% ->  14.87 0.22%:  1.07x speedup
???
 xlib-rgb       text_linear_rgba_over-128   15.88 0.64% ->  14.88 0.18%:  1.07x speedup
???
 xlib-rgb         text_solid_rgb_over-256   55.82 0.25% ->  52.34 0.12%:  1.07x speedup
???
 xlib-rgb        text_image_rgba_over-128   14.24 0.20% ->  13.35 0.35%:  1.07x speedup
???
 xlib-rgb       text_linear_rgba_over-256   63.40 0.27% ->  59.51 0.14%:  1.07x speedup
???
image-rgb      paint_solid_rgb_source-512    0.41 0.74% ->   0.38 0.01%:  1.06x speedup
???
 xlib-rgb               tessellate-16-100    0.39 0.10% ->   0.37 1.36%:  1.06x speedup
???
 xlib-rgb        text_linear_rgb_over-256   63.28 0.13% ->  59.55 0.10%:  1.06x speedup
???
 xlib-rgb        text_image_rgba_over-256   57.68 0.22% ->  54.28 0.37%:  1.06x speedup
???
image-rgb        paint_solid_rgb_over-512    0.41 1.05% ->   0.38 0.95%:  1.06x speedup

 xlib-rgb        text_solid_rgba_over-256   55.83 0.27% ->  52.61 1.06%:  1.06x speedup

 xlib-rgb       text_similar_rgb_over-128   13.90 0.42% ->  13.11 0.88%:  1.06x speedup

 xlib-rgb         text_image_rgb_over-256   57.58 0.19% ->  54.40 0.50%:  1.06x speedup

image-rgb     paint_solid_rgba_source-512    0.41 0.54% ->   0.38 0.40%:  1.06x speedup

Slowdowns
=========
image-rgb      paint_similar_rgb_over-512    0.68 2.35% ->   0.85 2.47%:  1.26x slowdown
???
image-rgb    paint_similar_rgb_source-512    0.67 2.49% ->   0.84 1.53%:  1.25x slowdown
???
 xlib-rgba     paint_solid_rgb_source-512    0.24 0.29% ->   0.30 0.68%:  1.25x slowdown
???
 xlib-rgba    paint_solid_rgba_source-512    0.24 1.83% ->   0.30 1.12%:  1.25x slowdown
???
image-rgb        paint_image_rgb_over-512    0.68 2.61% ->   0.85 2.81%:  1.24x slowdown
???
 xlib-rgba       paint_solid_rgb_over-512    0.25 2.54% ->   0.31 1.02%:  1.24x slowdown
???
image-rgb      paint_image_rgb_source-512    0.67 2.70% ->   0.83 0.77%:  1.23x slowdown
???
image-rgba     paint_solid_rgb_source-512    0.40 0.16% ->   0.43 1.08%:  1.06x slowdown

image-rgba       paint_solid_rgb_over-512    0.40 1.12% ->   0.43 0.56%:  1.05x slowdown

image-rgba    paint_solid_rgba_source-512    0.40 0.54% ->   0.42 0.28%:  1.05x slowdown


More information about the cairo mailing list