[cairo-commit] 3 commits - perf/cairo-perf.c perf/cairo-perf.h
perf/Makefile.am perf/subimage_copy.c perf/text.c
src/cairo-scaled-font.c
Carl Worth
cworth at kemper.freedesktop.org
Thu Oct 5 12:31:53 PDT 2006
perf/Makefile.am | 4 ++
perf/cairo-perf.c | 2 +
perf/cairo-perf.h | 2 +
perf/subimage_copy.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++
perf/text.c | 61 +++++++++++++++++++++++++++++++++++++++++
src/cairo-scaled-font.c | 2 -
6 files changed, 140 insertions(+), 2 deletions(-)
New commits:
diff-tree 5412343a77b7b336886ed763a3518ff4602f27aa (from 9285a1f7fe88db760b7cf49c87ac9be613f21630)
Author: Carl Worth <cworth at cworth.org>
Date: Thu Oct 5 12:13:48 2006 -0700
perf: Add subimage_copy test to demonstrate performance bug found by monty
diff --git a/perf/Makefile.am b/perf/Makefile.am
index d96fd63..ef6dc73 100644
--- a/perf/Makefile.am
+++ b/perf/Makefile.am
@@ -21,6 +21,7 @@ cairo_perf_SOURCES = \
fill.c \
paint.c \
stroke.c \
+ subimage_copy.c \
tessellate.c \
text.c
diff --git a/perf/cairo-perf.c b/perf/cairo-perf.c
index b98382f..5b94869 100644
--- a/perf/cairo-perf.c
+++ b/perf/cairo-perf.c
@@ -238,5 +238,6 @@ cairo_perf_case_t perf_cases[] = {
{ stroke, 64, 256},
{ text, 64, 256},
{ tessellate, 100, 100},
+ { subimage_copy, 16, 512},
{ NULL }
};
diff --git a/perf/cairo-perf.h b/perf/cairo-perf.h
index b2bcde8..cf3d33d 100644
--- a/perf/cairo-perf.h
+++ b/perf/cairo-perf.h
@@ -85,6 +85,7 @@ cairo_perf_cover_sources_and_operators (
CAIRO_PERF_DECL (fill);
CAIRO_PERF_DECL (paint);
CAIRO_PERF_DECL (stroke);
+CAIRO_PERF_DECL (subimage_copy);
CAIRO_PERF_DECL (tessellate);
CAIRO_PERF_DECL (text);
diff --git a/perf/subimage_copy.c b/perf/subimage_copy.c
new file mode 100644
index 0000000..54f596f
--- /dev/null
+++ b/perf/subimage_copy.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright © 2006 Red Hat, Inc.
+ *
+ * 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
+ * Red Hat, Inc. not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. Red Hat, Inc. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL RED HAT, INC. 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.
+ *
+ * Author: Carl D. Worth <cworth at cworth.org>
+ */
+
+#include "cairo-perf.h"
+
+/* This case exposes a performance bug found by Christopher "Monty"
+ * Montgomery in that copying a tiny portion of an image surface to an
+ * X surface causes the entire image surface to be copied to an
+ * intermediate surface.
+ *
+ * If the performance bug is fixed, then the time this test takes
+ * should be independent of the source and destination surface sizes.
+ */
+
+static cairo_perf_ticks_t
+do_subimage_copy (cairo_t *cr, int width, int height)
+{
+ cairo_rectangle (cr, 2, 2, 4, 4);
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+
+ cairo_perf_timer_start ();
+
+ cairo_fill (cr);
+
+ cairo_perf_timer_stop ();
+
+ return cairo_perf_timer_elapsed ();
+}
+
+void
+subimage_copy (cairo_perf_t *perf, cairo_t *cr, int width, int height)
+{
+ cairo_surface_t *image;
+ cairo_t *cr2;
+
+ cairo_set_source_rgb (cr, 0, 0, 1); /* blue */
+ cairo_paint (cr);
+
+ image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+ cr2 = cairo_create (image);
+ cairo_set_source_rgb (cr2, 1, 0, 0); /* red */
+ cairo_paint (cr2);
+ cairo_destroy (cr2);
+
+ cairo_set_source_surface (cr, image, 0, 0);
+ cairo_surface_destroy (image);
+
+ cairo_perf_run (perf, "subimage_copy", do_subimage_copy);
+}
diff-tree 9285a1f7fe88db760b7cf49c87ac9be613f21630 (from f1db0135476a039ea43dfd67c56763b05aea2ec4)
Author: Carl Worth <cworth at cworth.org>
Date: Wed Oct 4 18:35:16 2006 -0700
perf: Add text test
diff --git a/perf/Makefile.am b/perf/Makefile.am
index a0f0f42..d96fd63 100644
--- a/perf/Makefile.am
+++ b/perf/Makefile.am
@@ -21,7 +21,8 @@ cairo_perf_SOURCES = \
fill.c \
paint.c \
stroke.c \
- tessellate.c
+ tessellate.c \
+ text.c
if CAIRO_HAS_WIN32_SURFACE
cairo_perf_SOURCES += cairo-perf-win32.c
diff --git a/perf/cairo-perf.c b/perf/cairo-perf.c
index e54e8fb..b98382f 100644
--- a/perf/cairo-perf.c
+++ b/perf/cairo-perf.c
@@ -236,6 +236,7 @@ cairo_perf_case_t perf_cases[] = {
{ paint, 64, 512},
{ fill, 64, 256},
{ stroke, 64, 256},
+ { text, 64, 256},
{ tessellate, 100, 100},
{ NULL }
};
diff --git a/perf/cairo-perf.h b/perf/cairo-perf.h
index ec61254..b2bcde8 100644
--- a/perf/cairo-perf.h
+++ b/perf/cairo-perf.h
@@ -86,5 +86,6 @@ CAIRO_PERF_DECL (fill);
CAIRO_PERF_DECL (paint);
CAIRO_PERF_DECL (stroke);
CAIRO_PERF_DECL (tessellate);
+CAIRO_PERF_DECL (text);
#endif
diff --git a/perf/text.c b/perf/text.c
new file mode 100644
index 0000000..de5e0cd
--- /dev/null
+++ b/perf/text.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright © 2006 Red Hat, Inc.
+ *
+ * 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
+ * Red Hat, Inc. not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. Red Hat, Inc. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL RED HAT, INC. 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.
+ *
+ * Author: Carl D. Worth <cworth at cworth.org>
+ */
+
+#include "cairo-perf.h"
+
+static cairo_perf_ticks_t
+do_text (cairo_t *cr, int width, int height)
+{
+ const char text[] = "the jay, pig, fox, zebra and my wolves quack";
+ int len = strlen (text);
+ double x, y;
+ int i = 0;
+
+ cairo_perf_timer_start ();
+
+ cairo_set_font_size (cr, 9);
+ do {
+ cairo_move_to (cr, 0, i * 10);
+ cairo_show_text (cr, text + i);
+ cairo_get_current_point (cr, &x, &y);
+ while (x < width) {
+ cairo_show_text (cr, text);
+ cairo_get_current_point (cr, &x, &y);
+ }
+ i++;
+ if (i >= len)
+ i = 0;
+ } while (y < height);
+
+ cairo_perf_timer_stop ();
+
+ return cairo_perf_timer_elapsed ();
+}
+
+void
+text (cairo_perf_t *perf, cairo_t *cr, int width, int height)
+{
+ cairo_perf_cover_sources_and_operators (perf, "text", do_text);
+}
diff-tree f1db0135476a039ea43dfd67c56763b05aea2ec4 (from 2041db91968c7c06cdb2e454f572c50d75144d29)
Author: Carl Worth <cworth at cworth.org>
Date: Wed Oct 4 18:34:09 2006 -0700
Fix typo that was resulting in device glyph_extents of INT16_MAX in some cases.
diff --git a/src/cairo-scaled-font.c b/src/cairo-scaled-font.c
index 700f209..0a96b9d 100755
--- a/src/cairo-scaled-font.c
+++ b/src/cairo-scaled-font.c
@@ -834,7 +834,7 @@ _cairo_scaled_font_glyph_device_extents
cairo_status_t status = CAIRO_STATUS_SUCCESS;
int i;
int min_x = INT16_MAX, max_x = INT16_MIN;
- int min_y = INT16_MAX, max_y = INT16_MAX;
+ int min_y = INT16_MAX, max_y = INT16_MIN;
if (scaled_font->status)
return scaled_font->status;
More information about the cairo-commit
mailing list