summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaekyun Kim <tkq.kim@samsung.com>2011-09-22 13:02:51 +0900
committerTaekyun Kim <tkq.kim@samsung.com>2011-09-22 13:02:51 +0900
commitc480b4a8e2b52a9195e01c95d904bd4ea07ca30f (patch)
treeaf2b844e0d54ca92578879402cf51146ddee5cba
parent26021121e82f142abadbbcd71e972d1f35d0890f (diff)
perfstat: support for spans and lerpwip/spans
-rw-r--r--pixman/pixman-perf-stat.c17
-rw-r--r--pixman/pixman-private.h1
-rw-r--r--pixman/pixman.c35
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;