summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Paalanen <pekka.paalanen@collabora.co.uk>2015-09-08 13:35:33 +0300
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2015-09-09 11:42:55 +0300
commit812c9c9758e1503bd1725af9c6fe9ede6a467506 (patch)
tree144b361248bd36e58ca50a0c412f95e696ecae67
parente9ef2cc4dea04792a03d604c075c344055765217 (diff)
implementation: add PIXMAN_DISABLE=wholeops
Add a new option to PIXMAN_DISABLE: "wholeops". This option disables all whole-operation fast paths regardless of implementation level, except the general path (general_composite_rect). The purpose is to add a debug option that allows us to test optimized iterator paths specifically. With this, it is possible to see if: - fast paths mask bugs in iterators - compare fast paths with iterator paths for performance The effect was tested on x86_64 by running: $ PIXMAN_DISABLE='' ./test/lowlevel-blt-bench over_8888_8888 $ PIXMAN_DISABLE='wholeops' ./test/lowlevel-blt-bench over_8888_8888 In the first case time is spent in sse2_composite_over_8888_8888(), and in the latter in sse2_combine_over_u(). Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com>
-rw-r--r--pixman/pixman-implementation.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/pixman/pixman-implementation.c b/pixman/pixman-implementation.c
index 5884054..2c7de4c 100644
--- a/pixman/pixman-implementation.c
+++ b/pixman/pixman-implementation.c
@@ -380,6 +380,11 @@ _pixman_disabled (const char *name)
return FALSE;
}
+static const pixman_fast_path_t empty_fast_path[] =
+{
+ { PIXMAN_OP_NONE }
+};
+
pixman_implementation_t *
_pixman_choose_implementation (void)
{
@@ -397,5 +402,16 @@ _pixman_choose_implementation (void)
imp = _pixman_implementation_create_noop (imp);
+ if (_pixman_disabled ("wholeops"))
+ {
+ pixman_implementation_t *cur;
+
+ /* Disable all whole-operation paths except the general one,
+ * so that optimized iterators are used as much as possible.
+ */
+ for (cur = imp; cur->fallback; cur = cur->fallback)
+ cur->fast_paths = empty_fast_path;
+ }
+
return imp;
}