Changeset 550

Show
Ignore:
Timestamp:
12/28/06 17:52:49 (2 years ago)
Author:
alo
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • cherokee/trunk/ChangeLog

    r549 r550  
     12006-12-28  A.D.F  <adefacc@tin.it> 
     2 
     3        * cherokee/buffer.h: 
     4        - added cherokee_buffer_add_llong10(); 
     5 
     6        * cherokee/buffer.c: 
     7        - added cherokee_buffer_add_llong10(); 
     8        - added unlikely in the test condition for a malloc() failure; 
     9 
     10        * cherokee/handler_file.c: 
     11        - cherokee_handler_file_add_headers(), 
     12          replaced cherokee_buffer_add_va() calls 
     13          for cherokee_buffer_add_str|*long1x() calls. 
     14 
     15        Above listed modifications speed up cherokee by around 10% (+-2%) 
     16        when retrieving a small file (index.html) whose size is 810 bytes, 
     17        i.e.: 8550 -> 9500 requests / sec. 
     18         
    1192006-12-28  Alvaro Lopez Ortega  <alvaro@alobbs.com> 
    220 
  • cherokee/trunk/cherokee/buffer.c

    r540 r550  
    214214cherokee_buffer_add_long10 (cherokee_buffer_t *buf, clong_t lNum) 
    215215{ 
    216         unsigned long  ulNum = (unsigned long) lNum; 
    217         cuint_t flgNeg = 0; 
    218         int     newlen = 0; 
    219         size_t  i = (IOS_NUMBUF - 1); 
    220         char    szOutBuf[IOS_NUMBUF]; 
     216        culong_t ulNum = (culong_t) lNum; 
     217        cuint_t flgNeg = 0; 
     218        int      newlen = 0; 
     219        size_t  i = (IOS_NUMBUF - 1); 
     220        char    szOutBuf[IOS_NUMBUF]; 
    221221 
    222222        if (lNum < 0L) { 
     
    258258 
    259259ret_t 
    260 cherokee_buffer_add_ulong10 (cherokee_buffer_t *buf, culong_t culNum) 
    261 
    262         unsigned long ulNum = culNum; 
    263         int     newlen = 0; 
    264         size_t  i = (IOS_NUMBUF - 1); 
    265         char    szOutBuf[IOS_NUMBUF]; 
     260cherokee_buffer_add_llong10 (cherokee_buffer_t *buf, cllong_t lNum) 
     261
     262        cullong_t ulNum = (cullong_t) lNum; 
     263        cuint_t  flgNeg = 0; 
     264        int      newlen = 0; 
     265        size_t   i = (IOS_NUMBUF - 1); 
     266        char     szOutBuf[IOS_NUMBUF]; 
     267 
     268        if (lNum < 0L) { 
     269                flgNeg = 1; 
     270                ulNum = -ulNum; 
     271        } 
    266272 
    267273        szOutBuf[i] = '\0'; 
     
    273279        } 
    274280        while ((ulNum /= 10) != 0); 
     281 
     282        /* Set sign in any case 
     283        */ 
     284        szOutBuf[--i] = '-'; 
     285        i += (flgNeg ^ 1); 
    275286 
    276287        /* Verify free space in buffer and if needed then enlarge it. 
     
    293304 
    294305ret_t 
    295 cherokee_buffer_add_ullong10 (cherokee_buffer_t *buf, cullong_t culNum) 
    296 
    297         unsigned long long ulNum = culNum; 
     306cherokee_buffer_add_ulong10 (cherokee_buffer_t *buf, culong_t ulNum) 
     307
    298308        int     newlen = 0; 
    299309        size_t  i = (IOS_NUMBUF - 1); 
     
    327337 
    328338 
    329 /* 
    330 ** Add a number in hexadecimal format to (buf). 
    331 */ 
    332 ret_t 
    333 cherokee_buffer_add_ulong16 (cherokee_buffer_t *buf, culong_t culNum) 
    334 
    335         unsigned long ulNum = culNum; 
     339ret_t 
     340cherokee_buffer_add_ullong10 (cherokee_buffer_t *buf, cullong_t ulNum) 
     341
     342        int     newlen = 0; 
    336343        size_t  i = (IOS_NUMBUF - 1); 
    337         int     ival = 0; 
    338         int     newlen = 0; 
    339344        char    szOutBuf[IOS_NUMBUF]; 
    340345 
     
    344349         */ 
    345350        do { 
    346                 ival = (int) (ulNum & 0xF); 
    347                 szOutBuf[--i] = (char) TO_HEX(ival); 
    348         } 
    349         while ((ulNum >>= 4) != 0); 
     351                szOutBuf[--i] = (char) ((ulNum % 10) + '0'); 
     352        } 
     353        while ((ulNum /= 10) != 0); 
    350354 
    351355        /* Verify free space in buffer and if needed then enlarge it. 
     
    371375*/ 
    372376ret_t 
    373 cherokee_buffer_add_ullong16 (cherokee_buffer_t *buf, cullong_t culNum) 
    374 
    375         unsigned long long ulNum = culNum; 
     377cherokee_buffer_add_ulong16 (cherokee_buffer_t *buf, culong_t ulNum) 
     378
     379        size_t  i = (IOS_NUMBUF - 1); 
     380        int     ival = 0; 
     381        int     newlen = 0; 
     382        char    szOutBuf[IOS_NUMBUF]; 
     383 
     384        szOutBuf[i] = '\0'; 
     385 
     386        /* Convert number to string 
     387         */ 
     388        do { 
     389                ival = (int) (ulNum & 0xF); 
     390                szOutBuf[--i] = (char) TO_HEX(ival); 
     391        } 
     392        while ((ulNum >>= 4) != 0); 
     393 
     394        /* Verify free space in buffer and if needed then enlarge it. 
     395        */ 
     396        newlen = buf->len + (int) ((IOS_NUMBUF - 1) - i); 
     397        if (unlikely( newlen >= buf->size )) { 
     398                if (unlikely (realloc_new_bufsize(buf, newlen)) != ret_ok) 
     399                        return ret_nomem; 
     400        } 
     401 
     402        /* Copy including '\0' 
     403         */ 
     404        strcpy (buf->buf + buf->len, &szOutBuf[i]); 
     405 
     406        buf->len = newlen; 
     407 
     408        return ret_ok; 
     409
     410 
     411 
     412/* 
     413** Add a number in hexadecimal format to (buf). 
     414*/ 
     415ret_t 
     416cherokee_buffer_add_ullong16 (cherokee_buffer_t *buf, cullong_t ulNum) 
     417
    376418        size_t  i = (IOS_NUMBUF - 1); 
    377419        int     ival = 0; 
     
    13361378 
    13371379        new_buf = (char *) malloc((buf->len * 2)+1); 
    1338         if (new_buf == NULL) { 
     1380        if (unlikely (new_buf == NULL)) { 
    13391381                return ret_error; 
    13401382        } 
  • cherokee/trunk/cherokee/buffer.h

    r527 r550  
    6565ret_t cherokee_buffer_add                (cherokee_buffer_t  *buf, char *txt, size_t size); 
    6666ret_t cherokee_buffer_add_long10         (cherokee_buffer_t  *buf, clong_t lNum); 
     67ret_t cherokee_buffer_add_llong10        (cherokee_buffer_t  *buf, cllong_t lNum); 
    6768ret_t cherokee_buffer_add_ulong10        (cherokee_buffer_t  *buf, culong_t ulNum); 
    6869ret_t cherokee_buffer_add_ullong10       (cherokee_buffer_t  *buf, cullong_t ulNum); 
  • cherokee/trunk/cherokee/handler_file.c

    r529 r550  
    551551         */ 
    552552        if (conn->header.version >= http_version_11) {  
    553                 cherokee_buffer_add_va (buffer, "ETag: %lx=" FMT_OFFSET_HEX CRLF, fhdl->info->st_mtime, fhdl->info->st_size); 
     553                /* 
     554                 * "ETag: %lx=" FMT_OFFSET_HEX CRLF 
     555                 */ 
     556                cherokee_buffer_add_str     (buffer, "ETag: "); 
     557                cherokee_buffer_add_ullong16(buffer, (cullong_t) fhdl->info->st_mtime); 
     558                cherokee_buffer_add_str     (buffer, "="); 
     559                cherokee_buffer_add_ullong16(buffer, (cullong_t) fhdl->info->st_size); 
     560                cherokee_buffer_add_str     (buffer, CRLF); 
    554561        } 
    555562 
     
    573580                 
    574581                cherokee_mime_entry_get_type (fhdl->mime, &mime); 
    575                 cherokee_buffer_add_str (buffer, "Content-Type: "); 
    576                 cherokee_buffer_add_buffer (buffer, mime); 
    577                 cherokee_buffer_add_str (buffer, CRLF); 
     582                cherokee_buffer_add_str   (buffer, "Content-Type: "); 
     583                cherokee_buffer_add_buffer(buffer, mime); 
     584                cherokee_buffer_add_str   (buffer, CRLF); 
    578585                 
    579586                ret = cherokee_mime_entry_get_maxage (fhdl->mime, &maxage);              
     
    605612        if (conn->encoder == NULL) { 
    606613                if (conn->error_code == http_partial_content) { 
    607                         cherokee_buffer_add_va (buffer, 
    608                                                 "Content-Range: bytes " FMT_OFFSET "-" 
    609                                                 FMT_OFFSET "/" FMT_OFFSET CRLF, 
    610                                                 conn->range_start, 
    611                                                 conn->range_end - 1, 
    612                                                 fhdl->info->st_size); 
    613                 } 
    614  
    615                 cherokee_buffer_add_va (buffer, "Content-Length: " FMT_OFFSET CRLF, content_length); 
     614                        /* 
     615                         * "Content-Range: bytes " FMT_OFFSET "-" FMT_OFFSET 
     616                         *                                    "/" FMT_OFFSET CRLF 
     617                         */ 
     618                        cherokee_buffer_add_str     (buffer, "Content-Range: bytes "); 
     619                        cherokee_buffer_add_ullong10(buffer, (cullong_t)conn->range_start); 
     620                        cherokee_buffer_add_str     (buffer, "-"); 
     621                        cherokee_buffer_add_ullong10(buffer, (cullong_t)(conn->range_end - 1)); 
     622                        cherokee_buffer_add_str     (buffer, "/"); 
     623                        cherokee_buffer_add_ullong10(buffer, (cullong_t)fhdl->info->st_size); 
     624                        cherokee_buffer_add_str     (buffer, CRLF); 
     625                } 
     626 
     627                /* 
     628                 * "Content-Length: " FMT_OFFSET CRLF 
     629                 */ 
     630                cherokee_buffer_add_str     (buffer, "Content-Length: "); 
     631                cherokee_buffer_add_ullong10(buffer, (cullong_t) content_length); 
     632                cherokee_buffer_add_str     (buffer, CRLF); 
    616633 
    617634        } else {