Changeset 506 for trunk


Ignore:
Timestamp:
2008-01-05T05:45:48+01:00 (7 years ago)
Author:
moo
Message:

optimized function_table/class_table by caching hash value

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/processor/processor.m4

    r505 r506  
    699699        PROC_ZSTRING_N(type, key, key_size) 
    700700    ') 
     701    DISPATCH(ulong, h) 
    701702    STRUCT(zend_constant, constant) 
    702703') 
     
    711712        PROC_ZSTRING_N(type, key, key_size) 
    712713    ') 
     714    DISPATCH(ulong, h) 
    713715    STRUCT(zend_function, func) 
    714716') 
     
    722724        PROC_ZSTRING_N(type, key, key_size) 
    723725    ') 
     726    DISPATCH(ulong, h) 
    724727#ifdef ZEND_ENGINE_2 
    725728    STRUCT_P(zend_class_entry, cest) 
     
    739742        PROC_ZSTRING_L(type, key, key_len) 
    740743    ') 
     744    DISPATCH(ulong, h) 
    741745') 
    742746dnl }}} 
  • trunk/utils.c

    r504 r506  
    425425 
    426426#ifdef HAVE_XCACHE_CONSTANT 
    427 void xc_install_constant(char *filename, zend_constant *constant, zend_uchar type, zstr key, uint len TSRMLS_DC) /* {{{ */ 
     427void xc_install_constant(char *filename, zend_constant *constant, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC) /* {{{ */ 
    428428{ 
    429429    if (zend_u_hash_add(EG(zend_constants), type, key, len, 
     
    445445/* }}} */ 
    446446#endif 
    447 void xc_install_function(char *filename, zend_function *func, zend_uchar type, zstr key, uint len TSRMLS_DC) /* {{{ */ 
     447void xc_install_function(char *filename, zend_function *func, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC) /* {{{ */ 
    448448{ 
    449449    zend_bool istmpkey; 
     
    475475} 
    476476/* }}} */ 
    477 ZESW(xc_cest_t *, void) xc_install_class(char *filename, xc_cest_t *cest, int oplineno, zend_uchar type, zstr key, uint len TSRMLS_DC) /* {{{ */ 
     477ZESW(xc_cest_t *, void) xc_install_class(char *filename, xc_cest_t *cest, int oplineno, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC) /* {{{ */ 
    478478{ 
    479479    zend_bool istmpkey; 
     
    487487#endif 
    488488    if (istmpkey) { 
    489         zend_u_hash_update(CG(class_table), type, key, len, 
     489        zend_u_hash_quick_update(CG(class_table), type, key, len, h, 
    490490                    cest, sizeof(xc_cest_t), 
    491491                    ZESW(&stored_ce_ptr, NULL) 
     
    495495        } 
    496496    } 
    497     else if (zend_u_hash_add(CG(class_table), type, key, len, 
     497    else if (zend_u_hash_quick_add(CG(class_table), type, key, len, h, 
    498498                cest, sizeof(xc_cest_t), 
    499499                ZESW(&stored_ce_ptr, NULL) 
     
    685685        zend_constant *c = (zend_constant*) b->pData; 
    686686        xc_install_constant(sandbox->filename, c, 
    687                 BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength TSRMLS_CC); 
     687                BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength, b->h TSRMLS_CC); 
    688688        b = b->pListNext; 
    689689    } 
     
    695695        zend_function *func = (zend_function*) b->pData; 
    696696        xc_install_function(sandbox->filename, func, 
    697                 BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength TSRMLS_CC); 
     697                BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength, b->h TSRMLS_CC); 
    698698        b = b->pListNext; 
    699699    } 
     
    703703    while (b != NULL) { 
    704704        xc_install_class(sandbox->filename, (xc_cest_t*) b->pData, -1, 
    705                 BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength TSRMLS_CC); 
     705                BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength, b->h TSRMLS_CC); 
    706706        b = b->pListNext; 
    707707    } 
  • trunk/utils.h

    r496 r506  
    7272/* installer */ 
    7373#ifdef HAVE_XCACHE_CONSTANT 
    74 void xc_install_constant(char *filename, zend_constant *constant, zend_uchar type, zstr key, uint len TSRMLS_DC); 
     74void xc_install_constant(char *filename, zend_constant *constant, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC); 
    7575#endif 
    76 void xc_install_function(char *filename, zend_function *func, zend_uchar type, zstr key, uint len TSRMLS_DC); 
    77 ZESW(xc_cest_t *, void) xc_install_class(char *filename, xc_cest_t *cest, int oplineno, zend_uchar type, zstr key, uint len TSRMLS_DC); 
     76void xc_install_function(char *filename, zend_function *func, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC); 
     77ZESW(xc_cest_t *, void) xc_install_class(char *filename, xc_cest_t *cest, int oplineno, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC); 
    7878 
    7979/* sandbox */ 
  • trunk/xcache.c

    r504 r506  
    622622        xc_constinfo_t *ci = &p->constinfos[i]; 
    623623        xc_install_constant(xce->name.str.val, &ci->constant, 
    624                 UNISW(0, ci->type), ci->key, ci->key_size TSRMLS_CC); 
     624                UNISW(0, ci->type), ci->key, ci->key_size, ci->h TSRMLS_CC); 
    625625    } 
    626626#endif 
     
    630630        xc_funcinfo_t  *fi = &p->funcinfos[i]; 
    631631        xc_install_function(xce->name.str.val, &fi->func, 
    632                 UNISW(0, fi->type), fi->key, fi->key_size TSRMLS_CC); 
     632                UNISW(0, fi->type), fi->key, fi->key_size, fi->h TSRMLS_CC); 
    633633    } 
    634634 
     
    647647#endif 
    648648        xc_install_class(xce->name.str.val, &ci->cest, ci->oplineno, 
    649                 UNISW(0, ci->type), ci->key, ci->key_size TSRMLS_CC); 
     649                UNISW(0, ci->type), ci->key, ci->key_size, ci->h TSRMLS_CC); 
    650650    } 
    651651 
     
    656656        /* 
    657657        zend_auto_global *auto_global; 
    658         if (zend_u_hash_find(CG(auto_globals), aginfo->type, aginfo->key, aginfo->key_len+1, (void **) &auto_global)==SUCCESS) { 
     658        if (zend_u_hash_quick_find(CG(auto_globals), aginfo->type, aginfo->key, aginfo->key_len+1, aginfo->h, (void **) &auto_global)==SUCCESS) { 
    659659            if (auto_global->armed) { 
    660660                auto_global->armed = auto_global->auto_global_callback(auto_global->name, auto_global->name_len TSRMLS_CC); 
     
    10871087        }                                                     \ 
    10881088        data->key_size   = b->nKeyLength;                     \ 
     1089        data->h          = b->h;                              \ 
    10891090    }                                                         \ 
    10901091} while(0) 
     
    11191120                } 
    11201121                data->key_len = b->nKeyLength - 1; 
     1122                data->h       = b->h; 
    11211123            } 
    11221124        } 
  • trunk/xcache.h

    r500 r506  
    141141       zend_hash_add(ht, arKey, nKeyLength, pData, nDataSize, pDest) 
    142142 
     143#   define zend_u_hash_quick_add(ht, type, arKey, nKeyLength, h, pData, nDataSize, pDest) \ 
     144       zend_hash_quick_add(ht, arKey, nKeyLength, h, pData, nDataSize, pDest) 
     145 
    143146#   define zend_u_hash_update(ht, type, arKey, nKeyLength, pData, nDataSize, pDest) \ 
    144147       zend_hash_update(ht, arKey, nKeyLength, pData, nDataSize, pDest) 
     148 
     149#   define zend_u_hash_quick_update(ht, type, arKey, nKeyLength, h, pData, nDataSize, pDest) \ 
     150       zend_hash_quick_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest) 
    145151 
    146152#   define zend_u_hash_find(ht, type, arKey, nKeyLength, pData) \ 
     
    227233    zstr      key; 
    228234    zend_uint key_size; 
     235    ulong     h; 
    229236    xc_cest_t cest; 
    230237    int       oplineno; 
     
    239246    zstr      key; 
    240247    zend_uint key_size; 
     248    ulong     h; 
    241249    zend_constant constant; 
    242250} xc_constinfo_t; 
     
    250258    zstr      key; 
    251259    zend_uint key_size; 
     260    ulong     h; 
    252261    zend_function func; 
    253262} xc_funcinfo_t; 
     
    261270    zstr       key; 
    262271    zend_uint  key_len; 
     272    ulong      h; 
    263273} xc_autoglobal_t; 
    264274/* }}} */ 
Note: See TracChangeset for help on using the changeset viewer.