diff options
Diffstat (limited to 'src/cairo-default-context.c')
-rw-r--r-- | src/cairo-default-context.c | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/src/cairo-default-context.c b/src/cairo-default-context.c index 4b63d53be..26644eaf5 100644 --- a/src/cairo-default-context.c +++ b/src/cairo-default-context.c @@ -49,6 +49,7 @@ #include "cairo-freed-pool-private.h" #include "cairo-path-private.h" #include "cairo-pattern-private.h" +#include "cairo-ttrace.h" #define CAIRO_TOLERANCE_MINIMUM _cairo_fixed_to_double(1) @@ -88,6 +89,7 @@ _cairo_default_context_fini (cairo_default_context_t *cr) static void _cairo_default_context_destroy (void *abstract_cr) { + CAIRO_TRACE_BEGIN (__func__); cairo_default_context_t *cr = abstract_cr; _cairo_default_context_fini (cr); @@ -95,6 +97,7 @@ _cairo_default_context_destroy (void *abstract_cr) /* mark the context as invalid to protect against misuse */ cr->base.status = CAIRO_STATUS_NULL_POINTER; _freed_pool_put (&context_pool, cr); + CAIRO_TRACE_END (__func__); } static cairo_surface_t * @@ -288,24 +291,32 @@ _current_source_matches_solid (const cairo_pattern_t *pattern, static cairo_status_t _cairo_default_context_set_source_rgba (void *abstract_cr, double red, double green, double blue, double alpha) { + CAIRO_TRACE_BEGIN (__func__); cairo_default_context_t *cr = abstract_cr; cairo_pattern_t *pattern; cairo_status_t status; if (_current_source_matches_solid (cr->gstate->source, - red, green, blue, alpha)) - return CAIRO_STATUS_SUCCESS; + red, green, blue, alpha)) { + CAIRO_TRACE_END (__func__); + return CAIRO_STATUS_SUCCESS; + } /* push the current pattern to the freed lists */ _cairo_default_context_set_source (cr, (cairo_pattern_t *) &_cairo_pattern_black); pattern = cairo_pattern_create_rgba (red, green, blue, alpha); - if (unlikely (pattern->status)) - return pattern->status; + if (unlikely (pattern->status)) { + status = pattern->status; + cairo_pattern_destroy (pattern); + CAIRO_TRACE_END (__func__); + return pattern->status; + } status = _cairo_default_context_set_source (cr, pattern); cairo_pattern_destroy (pattern); + CAIRO_TRACE_END (__func__); return status; } @@ -324,8 +335,11 @@ _cairo_default_context_set_source_surface (void *abstract_cr, _cairo_default_context_set_source (cr, (cairo_pattern_t *) &_cairo_pattern_black); pattern = cairo_pattern_create_for_surface (surface); - if (unlikely (pattern->status)) - return pattern->status; + if (unlikely (pattern->status)) { + status = pattern->status; + cairo_pattern_destroy (pattern); + return status; + } cairo_matrix_init_translate (&matrix, -x, -y); cairo_pattern_set_matrix (pattern, &matrix); @@ -1122,9 +1136,12 @@ _cairo_default_context_append_path (void *abstract_cr, static cairo_status_t _cairo_default_context_paint (void *abstract_cr) { + CAIRO_TRACE_BEGIN (__func__); cairo_default_context_t *cr = abstract_cr; - return _cairo_gstate_paint (cr->gstate); + cairo_status_t status = _cairo_gstate_paint (cr->gstate); + CAIRO_TRACE_END (__func__); + return status; } static cairo_status_t @@ -1220,7 +1237,7 @@ _cairo_default_context_fill (void *abstract_cr) { cairo_default_context_t *cr = abstract_cr; cairo_status_t status; - + status = _cairo_gstate_fill (cr->gstate, cr->path); if (unlikely (status)) return status; @@ -1695,21 +1712,26 @@ _cairo_default_context_init (cairo_default_context_t *cr, void *target) cairo_t * _cairo_default_context_create (void *target) { + CAIRO_TRACE_BEGIN (__func__); cairo_default_context_t *cr; cairo_status_t status; cr = _freed_pool_get (&context_pool); if (unlikely (cr == NULL)) { - cr = malloc (sizeof (cairo_default_context_t)); - if (unlikely (cr == NULL)) - return _cairo_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); - } + cr = malloc (sizeof (cairo_default_context_t)); + if (unlikely (cr == NULL)) { + CAIRO_TRACE_END (__func__); + return _cairo_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); + } + } status = _cairo_default_context_init (cr, target); if (unlikely (status)) { - _freed_pool_put (&context_pool, cr); - return _cairo_create_in_error (status); + _freed_pool_put (&context_pool, cr); + CAIRO_TRACE_END (__func__); + return _cairo_create_in_error (status); } + CAIRO_TRACE_END (__func__); return &cr->base; } |