summaryrefslogtreecommitdiff
path: root/src/cairo-default-context.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cairo-default-context.c')
-rw-r--r--src/cairo-default-context.c50
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;
}