From: Marek Olšák <marek.ol...@amd.com> time GALLIUM_NOOP=1 ./run shaders/private/alien_isolation/ >/dev/null
Before (2 takes): real 0m8.734s 0m8.773s user 0m34.232s 0m34.348s sys 0m0.084s 0m0.056s After (2 takes): real 0m8.448s 0m8.463s user 0m33.104s 0m33.160s sys 0m0.088s 0m0.076s Average change in "real" time spent: -3.4% calloc should only do 2 things compared to malloc: - check for overflow of "n * size" - call memset I'm not sure if that explains the difference. --- src/util/ralloc.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/util/ralloc.c b/src/util/ralloc.c index 9526011..23c89e5 100644 --- a/src/util/ralloc.c +++ b/src/util/ralloc.c @@ -91,20 +91,23 @@ get_header(const void *ptr) static void add_child(ralloc_header *parent, ralloc_header *info) { if (parent != NULL) { info->parent = parent; info->next = parent->child; parent->child = info; if (info->next != NULL) info->next->prev = info; + } else { + info->parent = NULL; + info->next = NULL; } } void * ralloc_context(const void *ctx) { return ralloc_size(ctx, 0); } void * @@ -115,27 +118,39 @@ ralloc_size(const void *ctx, size_t size) * * TODO: Make ralloc_size not zero fill memory, and cleanup any code that * should instead be using rzalloc. */ return rzalloc_size(ctx, size); } void * rzalloc_size(const void *ctx, size_t size) { - void *block = calloc(1, size + sizeof(ralloc_header)); + void *block = malloc(size + sizeof(ralloc_header)); ralloc_header *info; ralloc_header *parent; if (unlikely(block == NULL)) return NULL; + info = (ralloc_header *) block; + /* measurements have shown that calloc is slower, so clear things + * manually + */ + info->child = NULL; + info->prev = NULL; + info->destructor = NULL; + /* add_child() clears other members */ + + /* memset the allocation except for ralloc_header */ + memset(&info[1], 0, size); + parent = ctx != NULL ? get_header(ctx) : NULL; add_child(parent, info); #ifdef DEBUG info->canary = CANARY; #endif return PTR_FROM_HEADER(info); } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev