@@ -158,7 +158,7 @@ static void v8js_free_storage(void *object TSRMLS_DC) /* {{{ */
158158 it != c->weak_objects .end (); ++it) {
159159 zval *value = it->first ;
160160 zval_ptr_dtor (&value);
161- c->isolate ->AdjustAmountOfExternalAllocatedMemory (-1024 );
161+ c->isolate ->AdjustAmountOfExternalAllocatedMemory (-c-> average_object_size );
162162 it->second .Reset ();
163163 }
164164 c->weak_objects .~map ();
@@ -254,6 +254,8 @@ static zend_object_value v8js_new(zend_class_entry *ce TSRMLS_DC) /* {{{ */
254254 new (&c->v8js_v8objects ) std::list<v8js_v8object *>();
255255 new (&c->script_objects ) std::vector<v8js_script *>();
256256
257+ c->average_object_size = 1024 ;
258+
257259 retval.handle = zend_objects_store_put (c, NULL , (zend_objects_free_object_storage_t ) v8js_free_storage, NULL TSRMLS_CC);
258260 retval.handlers = &v8js_object_handlers;
259261
@@ -899,6 +901,22 @@ static PHP_METHOD(V8Js, setMemoryLimit)
899901}
900902/* }}} */
901903
904+ /* {{{ proto void V8Js::setAverageObjectSize(average_object_size)
905+ */
906+ static PHP_METHOD (V8Js, setAverageObjectSize)
907+ {
908+ v8js_ctx *c;
909+ long average_object_size = 0 ;
910+
911+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC, " l" , &average_object_size) == FAILURE) {
912+ return ;
913+ }
914+
915+ c = (v8js_ctx *) zend_object_store_get_object (getThis () TSRMLS_CC);
916+ c->average_object_size = average_object_size;
917+ }
918+ /* }}} */
919+
902920static void v8js_persistent_zval_ctor (zval **p) /* {{{ */
903921{
904922 zval *orig_ptr = *p;
@@ -1178,6 +1196,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_v8js_setmoduleloader, 0, 0, 1)
11781196 ZEND_ARG_INFO(0 , callable)
11791197ZEND_END_ARG_INFO()
11801198
1199+ ZEND_BEGIN_ARG_INFO_EX(arginfo_v8js_setaverageobjectsize, 0 , 0 , 1 )
1200+ ZEND_ARG_INFO(0 , average_object_size)
1201+ ZEND_END_ARG_INFO()
1202+
11811203ZEND_BEGIN_ARG_INFO_EX(arginfo_v8js_registerextension, 0 , 0 , 2 )
11821204 ZEND_ARG_INFO(0 , extension_name)
11831205 ZEND_ARG_INFO(0 , script)
@@ -1217,6 +1239,7 @@ const zend_function_entry v8js_methods[] = { /* {{{ */
12171239 PHP_ME (V8Js, setModuleLoader, arginfo_v8js_setmoduleloader, ZEND_ACC_PUBLIC)
12181240 PHP_ME (V8Js, setTimeLimit, arginfo_v8js_settimelimit, ZEND_ACC_PUBLIC)
12191241 PHP_ME (V8Js, setMemoryLimit, arginfo_v8js_setmemorylimit, ZEND_ACC_PUBLIC)
1242+ PHP_ME (V8Js, setAverageObjectSize, arginfo_v8js_setaverageobjectsize, ZEND_ACC_PUBLIC)
12201243 PHP_ME (V8Js, registerExtension, arginfo_v8js_registerextension, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
12211244 PHP_ME (V8Js, getExtensions, arginfo_v8js_getextensions, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
12221245
0 commit comments