2 * Copyright © 2006 Dan Amelang
4 * Permission to use, copy, modify, distribute, and sell this software
5 * and its documentation for any purpose is hereby granted without
6 * fee, provided that the above copyright notice appear in all copies
7 * and that both that copyright notice and this permission notice
8 * appear in supporting documentation, and that the name of
9 * the authors not be used in advertising or publicity pertaining to
10 * distribution of the software without specific, written prior
11 * permission. The authors make no representations about the
12 * suitability of this software for any purpose. It is provided "as
13 * is" without express or implied warranty.
15 * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
16 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17 * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
18 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
19 * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
20 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
21 * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 * Authors: Dan Amelang <dan@amelang.net>
25 #include "cairo-perf.h"
28 #define MODE cairo_perf_run
30 #define MODE cairo_perf_cover_sources_and_operators
33 #define RECTANGLE_COUNT (1000)
40 } rects[RECTANGLE_COUNT];
43 do_rectangles (cairo_t *cr, int width, int height, int loops)
47 cairo_perf_timer_start ();
48 cairo_perf_set_thread_aware (cr, FALSE);
52 cairo_perf_set_thread_aware (cr, TRUE);
53 for (i = 0; i < RECTANGLE_COUNT; i++) {
54 cairo_rectangle (cr, rects[i].x, rects[i].y,
55 rects[i].width, rects[i].height);
60 cairo_perf_timer_stop ();
62 return cairo_perf_timer_elapsed ();
66 do_rectangles_once (cairo_t *cr, int width, int height, int loops)
70 cairo_perf_timer_start ();
71 cairo_perf_set_thread_aware (cr, FALSE);
75 cairo_perf_set_thread_aware (cr, TRUE);
76 for (i = 0; i < RECTANGLE_COUNT; i++) {
77 cairo_rectangle (cr, rects[i].x, rects[i].y,
78 rects[i].width, rects[i].height);
84 cairo_perf_timer_stop ();
86 return cairo_perf_timer_elapsed ();
90 do_rectangle (cairo_t *cr, int width, int height, int loops)
92 cairo_perf_timer_start ();
93 cairo_perf_set_thread_aware (cr, FALSE);
97 cairo_perf_set_thread_aware (cr, TRUE);
98 cairo_rectangle (cr, 0, 0, width, height);
102 cairo_perf_timer_stop ();
104 return cairo_perf_timer_elapsed ();
108 rectangles_enabled (cairo_perf_t *perf)
110 return cairo_perf_can_run (perf, "rectangles", NULL);
114 rectangles (cairo_perf_t *perf, cairo_t *cr, int width, int height)
119 for (i = 0; i < RECTANGLE_COUNT; i++)
121 rects[i].x = rand () % width;
122 rects[i].y = rand () % height;
123 rects[i].width = (rand () % (width / 10)) + 1;
124 rects[i].height = (rand () % (height / 10)) + 1;
127 MODE (perf, "one-rectangle", do_rectangle, NULL);
128 MODE (perf, "rectangles", do_rectangles, NULL);
129 MODE (perf, "rectangles-once", do_rectangles_once, NULL);