apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Greg Stein <gst...@lyra.org>
Subject Re: cvs commit: apr-util/buckets apr_brigade.c
Date Mon, 13 May 2002 22:21:33 GMT
Ouch...

-1 on this commit, pending further explanation. I'm loathe to see all of
that extra code go in there for a dubious performance benefit. Are you
*truly* saving any time? I see a while() loop in there copying data. Isn't
it almost always faster to let the compiler produce an optimized memcpy() or
somesuch?

Brian? Let's see some details/numbers here, or else please revert.

Cheers,
-g

On Sun, May 12, 2002 at 09:45:27PM -0000, brianp@apache.org wrote:
> brianp      02/05/12 14:45:27
> 
>   Modified:    buckets  apr_brigade.c
>   Log:
>   Optimization for apr_brigade_puts(): skip the strlen computation
>   in cases where a heap bucket at the end of the brigade has enough
>   space to hold the string
>   
>   Revision  Changes    Path
>   1.39      +25 -0     apr-util/buckets/apr_brigade.c
>   
>   Index: apr_brigade.c
>   ===================================================================
>   RCS file: /home/cvs/apr-util/buckets/apr_brigade.c,v
>   retrieving revision 1.38
>   retrieving revision 1.39
>   diff -u -r1.38 -r1.39
>   --- apr_brigade.c	10 Apr 2002 16:44:10 -0000	1.38
>   +++ apr_brigade.c	12 May 2002 21:45:27 -0000	1.39
>   @@ -452,6 +452,31 @@
>                                               apr_brigade_flush flush, void *ctx,
>                                               const char *str)
>    {
>   +    apr_bucket *e = APR_BRIGADE_LAST(b);
>   +    if (!APR_BRIGADE_EMPTY(b) && APR_BUCKET_IS_HEAP(e)) {
>   +        /* If there is some space available in a heap bucket
>   +         * at the end of the brigade, start copying the string
>   +         */
>   +        apr_bucket_heap *h = e->data;
>   +        char *buf = h->base + e->start + e->length;
>   +        apr_size_t bytes_avail = h->alloc_len - e->length;
>   +        const char *s = str;
>   +
>   +        while (bytes_avail && *s) {
>   +            *buf++ = *s++;
>   +            bytes_avail--;
>   +        }
>   +        e->length += (s - str);
>   +        if (!*s) {
>   +            return APR_SUCCESS;
>   +        }
>   +        str = s;
>   +    }
>   +
>   +    /* If the string has not been copied completely to the brigade,
>   +     * delegate the remaining work to apr_brigade_write(), which
>   +     * knows how to grow the brigade
>   +     */
>        return apr_brigade_write(b, flush, ctx, str, strlen(str));
>    }
>    
>   
>   
>   

-- 
Greg Stein, http://www.lyra.org/

Mime
View raw message