Changeset 506 in svn


Ignore:
Timestamp:
2008-01-05T05:45:48+01:00 (8 years ago)
Author:
Xuefer
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.