From 29b01f93ca9b29699420700ea9e2817898afa3ca Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 11 Nov 2006 10:43:11 -0800 Subject: [PATCH] Make miter join code use tessellate_convex_quad rather than tessellate_polygon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This provides an additional 22-29% speedup on top of the previous fix for stroking paths with many miter joins: image-rgba world_map-800 459.73 0.27% -> 356.80 0.32%: 1.29x speedup ▎ image-rgb world_map-800 458.83 0.37% -> 358.08 0.41%: 1.28x speedup ▎ xlib-rgba world_map-800 566.57 0.23% -> 463.84 0.31%: 1.22x speedup ▎ xlib-rgb world_map-800 562.31 0.64% -> 460.51 0.83%: 1.22x speedup ▎ --- src/cairo-path-stroke.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/cairo-path-stroke.c b/src/cairo-path-stroke.c index d6f55881c..86dd07420 100644 --- a/src/cairo-path-stroke.c +++ b/src/cairo-path-stroke.c @@ -201,7 +201,6 @@ _cairo_stroker_face_clockwise (cairo_stroke_face_t *in, cairo_stroke_face_t *out static cairo_status_t _cairo_stroker_join (cairo_stroker_t *stroker, cairo_stroke_face_t *in, cairo_stroke_face_t *out) { - cairo_status_t status; int clockwise = _cairo_stroker_face_clockwise (out, in); cairo_point_t *inpt, *outpt; @@ -296,8 +295,8 @@ _cairo_stroker_join (cairo_stroker_t *stroker, cairo_stroke_face_t *in, cairo_st double x1, y1, x2, y2; double mx, my; double dx1, dx2, dy1, dy2; - cairo_polygon_t polygon; cairo_point_t outer; + cairo_point_t quad[4]; /* * we've got the points already transformed to device @@ -339,18 +338,13 @@ _cairo_stroker_join (cairo_stroker_t *stroker, cairo_stroke_face_t *in, cairo_st */ outer.x = _cairo_fixed_from_double (mx); outer.y = _cairo_fixed_from_double (my); - _cairo_polygon_init (&polygon); - _cairo_polygon_move_to (&polygon, &in->point); - _cairo_polygon_line_to (&polygon, inpt); - _cairo_polygon_line_to (&polygon, &outer); - _cairo_polygon_line_to (&polygon, outpt); - _cairo_polygon_close (&polygon); - status = _cairo_traps_tessellate_polygon (stroker->traps, - &polygon, - CAIRO_FILL_RULE_WINDING); - _cairo_polygon_fini (&polygon); - return status; + quad[0] = in->point; + quad[1] = *inpt; + quad[2] = outer; + quad[3] = *outpt; + + return _cairo_traps_tessellate_convex_quad (stroker->traps, quad); } /* fall through ... */ }