diff options
author | Taekyun Kim <tkq.kim@samsung.com> | 2011-09-22 13:02:51 +0900 |
---|---|---|
committer | Taekyun Kim <tkq.kim@samsung.com> | 2011-09-22 13:02:51 +0900 |
commit | c480b4a8e2b52a9195e01c95d904bd4ea07ca30f (patch) | |
tree | af2b844e0d54ca92578879402cf51146ddee5cba | |
parent | 26021121e82f142abadbbcd71e972d1f35d0890f (diff) |
perfstat: support for spans and lerpwip/spans
-rw-r--r-- | pixman/pixman-perf-stat.c | 17 | ||||
-rw-r--r-- | pixman/pixman-private.h | 1 | ||||
-rw-r--r-- | pixman/pixman.c | 35 |
3 files changed, 48 insertions, 5 deletions
diff --git a/pixman/pixman-perf-stat.c b/pixman/pixman-perf-stat.c index 2986777..964b2dd 100644 --- a/pixman/pixman-perf-stat.c +++ b/pixman/pixman-perf-stat.c @@ -67,6 +67,7 @@ struct perfstat_composite pixman_op_t op; pixman_format_code_t src; uint32_t src_flags; + pixman_bool_t opaque; pixman_format_code_t mask; uint32_t mask_flags; pixman_format_code_t dest; @@ -127,6 +128,7 @@ perfstat_add_composite (pixman_implementation_type_t imp_type, pixman_op_t op, pixman_format_code_t src, uint32_t src_flags, + pixman_bool_t opaque, pixman_format_code_t mask, uint32_t mask_flags, pixman_format_code_t dest, @@ -152,6 +154,7 @@ perfstat_add_composite (pixman_implementation_type_t imp_type, perfstat[i].api.composite.op == op && perfstat[i].api.composite.src == src && perfstat[i].api.composite.src_flags == src_flags && + perfstat[i].api.composite.opaque == opaque && perfstat[i].api.composite.mask == mask && perfstat[i].api.composite.mask_flags == mask_flags && perfstat[i].api.composite.dest == dest && @@ -178,6 +181,7 @@ perfstat_add_composite (pixman_implementation_type_t imp_type, perfstat[perfstat_entry_count].api.composite.op = op; perfstat[perfstat_entry_count].api.composite.src = src; perfstat[perfstat_entry_count].api.composite.src_flags = src_flags; + perfstat[perfstat_entry_count].api.composite.opaque = opaque; perfstat[perfstat_entry_count].api.composite.mask = mask; perfstat[perfstat_entry_count].api.composite.mask_flags = mask_flags; perfstat[perfstat_entry_count].api.composite.dest = dest; @@ -372,6 +376,10 @@ get_op_string (pixman_op_t op) return " add"; case PIXMAN_OP_SATURATE: return " sat"; + case PIXMAN_OP_LERP: + return " lerp"; + case PIXMAN_OP_LERP_REVERSE: + return "lerp_rev"; default: return " etc"; }; @@ -481,7 +489,7 @@ perfstat_destructor (void) qsort (perfstat, perfstat_entry_count, sizeof(perfstat[0]), compare); fprintf (PERFSTAT_LOG_CHANNEL, - "[ #] function transform op src mask dst repeat " + "[ #] function transform op src opacity mask dst repeat " "images scanlines pixels(Mpix) time(s) speed(Mpix/s) backend\n"); /* show performance statistics */ @@ -493,10 +501,11 @@ perfstat_destructor (void) { fprintf (PERFSTAT_LOG_CHANNEL, "composite : " - "%s %s %s %s %s %s ", + "%s %s %s %s %s %s %s ", get_transform_string (perfstat[i].api.composite.src_flags), get_op_string (perfstat[i].api.composite.op), get_format_string (perfstat[i].api.composite.src), + perfstat[i].api.composite.opaque ? " null" : "opacity", get_format_string (perfstat[i].api.composite.mask), get_format_string (perfstat[i].api.composite.dest), get_repeat_string (perfstat[i].api.composite.src_flags)); @@ -505,14 +514,14 @@ perfstat_destructor (void) { fprintf (PERFSTAT_LOG_CHANNEL, " fill : " - " %4d ", + " %4d ", perfstat[i].api.fill.bpp); } else if (perfstat[i].type == PERFSTAT_BLT) { fprintf (PERFSTAT_LOG_CHANNEL, " blt : " - " %4d %4d ", + " %4d %4d ", perfstat[i].api.blt.src_bpp, perfstat[i].api.blt.dst_bpp); } diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h index 9f5d5a8..897a29f 100644 --- a/pixman/pixman-private.h +++ b/pixman/pixman-private.h @@ -1006,6 +1006,7 @@ perfstat_add_composite (pixman_implementation_type_t imp_type, pixman_op_t op, pixman_format_code_t src, uint32_t src_flags, + pixman_bool_t opacity, pixman_format_code_t mask, uint32_t mask_flags, pixman_format_code_t dest, diff --git a/pixman/pixman.c b/pixman/pixman.c index 9e8a4c7..a52a7a0 100644 --- a/pixman/pixman.c +++ b/pixman/pixman.c @@ -775,6 +775,11 @@ _pixman_image_composite (pixman_op_t op, if (perfstat_is_enabled ()) { + pixman_bool_t is_opaque = TRUE; + + if (info.opacity != 0x00 && info.opacity != 0xFF) + is_opaque = FALSE; + t0 = perfstat_get_time (); func (imp, &info); @@ -782,6 +787,7 @@ _pixman_image_composite (pixman_op_t op, t1 = perfstat_get_time (); perfstat_add_composite (imp->type, op, src_format, src_flags, + is_opaque, mask_format, mask_flags, dest_format, dest_flags, info.width, info.height, @@ -1067,7 +1073,34 @@ pixman_image_compositor_blt (pixman_image_compositor_t *compositor, info->opacity = opacity; - func(imp, info); + if (perfstat_is_enabled ()) + { + double t0, t1; + pixman_bool_t is_opaque = TRUE; + + if (info->opacity != 0x00 && info->opacity != 0xFF) + is_opaque = FALSE; + + t0 = perfstat_get_time (); + + func (imp, info); + + t1 = perfstat_get_time (); + perfstat_add_composite (imp->type, info->op, + info->src_image->type == SOLID ? PIXMAN_solid : + info->src_image->bits.format, + info->src_flags, + is_opaque, + info->mask_image ? info->mask_image->bits.format : PIXMAN_null, + info->mask_image ? info->mask_flags : 0, + info->dest_image->bits.format, info->dest_flags, + info->width, info->height, + t1 - t0); + } + else + { + func (imp, info); + } info->src_x -= x; info->src_y -= y; |