[cairo-commit] perf/cairo-perf.c perf/cairo-perf.h perf/Makefile.am perf/rectangles.c

Carl Worth cworth at kemper.freedesktop.org
Wed Jan 31 12:21:20 PST 2007


 perf/Makefile.am  |    1 
 perf/cairo-perf.c |    1 
 perf/cairo-perf.h |    1 
 perf/rectangles.c |   71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 74 insertions(+)

New commits:
diff-tree 382e021ccb657ab1e342e0d0eee402ff5eb89e5d (from 7abfb39709342fc3d95269ad2d76a5e1e8f8d38f)
Author: Dan Amelang <dan at amelang.net>
Date:   Wed Jan 31 11:53:06 2007 -0800

    Add "rectangles" perf test
    
    This test draws many small, solid pixel-aligned rectangles one at a
    time.

diff --git a/perf/Makefile.am b/perf/Makefile.am
index 1ed4c81..a50ce8a 100644
--- a/perf/Makefile.am
+++ b/perf/Makefile.am
@@ -26,6 +26,7 @@ cairo_perf_SOURCES =		\
 	mosaic.h		\
 	paint.c			\
 	pattern_create_radial.c \
+	rectangles.c		\
 	stroke.c		\
 	subimage_copy.c		\
 	tessellate.c		\
diff --git a/perf/cairo-perf.c b/perf/cairo-perf.c
index 18cc652..c25b3d4 100644
--- a/perf/cairo-perf.c
+++ b/perf/cairo-perf.c
@@ -329,5 +329,6 @@ cairo_perf_case_t perf_cases[] = {
     { mosaic, 800, 800 },
     { long_lines, 100, 100},
     { unaligned_clip, 100, 100},
+    { rectangles, 512, 512},
     { NULL }
 };
diff --git a/perf/cairo-perf.h b/perf/cairo-perf.h
index 1ef9600..1fef997 100644
--- a/perf/cairo-perf.h
+++ b/perf/cairo-perf.h
@@ -105,5 +105,6 @@ CAIRO_PERF_DECL (box_outline);
 CAIRO_PERF_DECL (mosaic);
 CAIRO_PERF_DECL (long_lines);
 CAIRO_PERF_DECL (unaligned_clip);
+CAIRO_PERF_DECL (rectangles);
 
 #endif
diff --git a/perf/rectangles.c b/perf/rectangles.c
new file mode 100644
index 0000000..9fa89f5
--- /dev/null
+++ b/perf/rectangles.c
@@ -0,0 +1,71 @@
+/*
+ * 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>
+ */
+#include "cairo-perf.h"
+
+#define RECTANGLE_COUNT (1000)
+
+static struct
+{
+    double x;
+    double y;
+    double width;
+    double height;
+} rects[RECTANGLE_COUNT];
+
+static cairo_perf_ticks_t
+do_rectangles (cairo_t *cr, int width, int height)
+{
+    int i;
+
+    cairo_perf_timer_start ();
+
+    for (i = 0; i < RECTANGLE_COUNT; i++)
+    {
+        cairo_rectangle (cr, rects[i].x, rects[i].y,
+                             rects[i].width, rects[i].height);
+        cairo_fill (cr);
+    }
+
+    cairo_perf_timer_stop ();
+
+    return cairo_perf_timer_elapsed ();
+}
+
+void
+rectangles (cairo_perf_t *perf, cairo_t *cr, int width, int height)
+{
+    int i;
+
+    srand (8478232);
+    for (i = 0; i < RECTANGLE_COUNT; i++)
+    {
+        rects[i].x = rand () % width;
+        rects[i].y = rand () % height;
+        rects[i].width  = (rand () % (width / 10)) + 1;
+        rects[i].height = (rand () % (height / 10)) + 1;
+    }
+
+    cairo_perf_run (perf, "rectangles", do_rectangles);
+}


More information about the cairo-commit mailing list