@@ -296,6 +296,21 @@ static PHP_METHOD(Isolate, isMemoryLimitHit) {
296296 RETVAL_BOOL (php_v8_isolate->limits .memory_limit_hit );
297297}
298298
299+ static PHP_METHOD (Isolate, memoryPressureNotification) {
300+ zend_long level = static_cast <zend_long>(v8::MemoryPressureLevel::kNone );
301+
302+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " l" , &level) == FAILURE) {
303+ return ;
304+ }
305+
306+ PHP_V8_CHECK_ISOLATE_MEMORY_PRESSURE_LEVEL (level, " Invalid memory pressure level given. See V8\\ Isolate MEMORY_PRESSURE_LEVEL_* class constants for available levels." )
307+
308+ PHP_V8_ISOLATE_FETCH_WITH_CHECK (getThis (), php_v8_isolate);
309+ PHP_V8_ENTER_ISOLATE (php_v8_isolate);
310+
311+ isolate->MemoryPressureNotification (static_cast <v8::MemoryPressureLevel>(level));
312+ }
313+
299314static PHP_METHOD (Isolate, getHeapStatistics) {
300315 if (zend_parse_parameters_none () == FAILURE) {
301316 return ;
@@ -511,6 +526,10 @@ ZEND_END_ARG_INFO()
511526PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_isMemoryLimitHit, ZEND_RETURN_VALUE, 0 , _IS_BOOL, 0 )
512527ZEND_END_ARG_INFO()
513528
529+ PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_VOID_INFO_EX(arginfo_memoryPressureNotification, 0 )
530+ ZEND_ARG_TYPE_INFO(0 , level, IS_LONG, 0 )
531+ ZEND_END_ARG_INFO()
532+
514533PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_getHeapStatistics, ZEND_RETURN_VALUE, 0 , V8\\HeapStatistics, 0 )
515534ZEND_END_ARG_INFO()
516535
@@ -555,24 +574,25 @@ ZEND_END_ARG_INFO()
555574
556575
557576static const zend_function_entry php_v8_isolate_methods[] = {
558- PHP_V8_ME (Isolate, __construct, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
559- PHP_V8_ME (Isolate, setTimeLimit, ZEND_ACC_PUBLIC)
560- PHP_V8_ME (Isolate, getTimeLimit, ZEND_ACC_PUBLIC)
561- PHP_V8_ME (Isolate, isTimeLimitHit, ZEND_ACC_PUBLIC)
562- PHP_V8_ME (Isolate, setMemoryLimit, ZEND_ACC_PUBLIC)
563- PHP_V8_ME (Isolate, getMemoryLimit, ZEND_ACC_PUBLIC)
564- PHP_V8_ME (Isolate, isMemoryLimitHit, ZEND_ACC_PUBLIC)
565- PHP_V8_ME (Isolate, getHeapStatistics, ZEND_ACC_PUBLIC)
566- PHP_V8_ME (Isolate, inContext, ZEND_ACC_PUBLIC)
567- PHP_V8_ME (Isolate, getEnteredContext, ZEND_ACC_PUBLIC)
568- PHP_V8_ME (Isolate, throwException, ZEND_ACC_PUBLIC)
569- PHP_V8_ME (Isolate, idleNotificationDeadline, ZEND_ACC_PUBLIC)
570- PHP_V8_ME (Isolate, lowMemoryNotification, ZEND_ACC_PUBLIC)
571- PHP_V8_ME (Isolate, terminateExecution, ZEND_ACC_PUBLIC)
572- PHP_V8_ME (Isolate, isExecutionTerminating, ZEND_ACC_PUBLIC)
573- PHP_V8_ME (Isolate, cancelTerminateExecution, ZEND_ACC_PUBLIC)
574- PHP_V8_ME (Isolate, isDead, ZEND_ACC_PUBLIC)
575- PHP_V8_ME (Isolate, isInUse, ZEND_ACC_PUBLIC)
577+ PHP_V8_ME (Isolate, __construct, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
578+ PHP_V8_ME (Isolate, setTimeLimit, ZEND_ACC_PUBLIC)
579+ PHP_V8_ME (Isolate, getTimeLimit, ZEND_ACC_PUBLIC)
580+ PHP_V8_ME (Isolate, isTimeLimitHit, ZEND_ACC_PUBLIC)
581+ PHP_V8_ME (Isolate, setMemoryLimit, ZEND_ACC_PUBLIC)
582+ PHP_V8_ME (Isolate, getMemoryLimit, ZEND_ACC_PUBLIC)
583+ PHP_V8_ME (Isolate, isMemoryLimitHit, ZEND_ACC_PUBLIC)
584+ PHP_V8_ME (Isolate, memoryPressureNotification, ZEND_ACC_PUBLIC)
585+ PHP_V8_ME (Isolate, getHeapStatistics, ZEND_ACC_PUBLIC)
586+ PHP_V8_ME (Isolate, inContext, ZEND_ACC_PUBLIC)
587+ PHP_V8_ME (Isolate, getEnteredContext, ZEND_ACC_PUBLIC)
588+ PHP_V8_ME (Isolate, throwException, ZEND_ACC_PUBLIC)
589+ PHP_V8_ME (Isolate, idleNotificationDeadline, ZEND_ACC_PUBLIC)
590+ PHP_V8_ME (Isolate, lowMemoryNotification, ZEND_ACC_PUBLIC)
591+ PHP_V8_ME (Isolate, terminateExecution, ZEND_ACC_PUBLIC)
592+ PHP_V8_ME (Isolate, isExecutionTerminating, ZEND_ACC_PUBLIC)
593+ PHP_V8_ME (Isolate, cancelTerminateExecution, ZEND_ACC_PUBLIC)
594+ PHP_V8_ME (Isolate, isDead, ZEND_ACC_PUBLIC)
595+ PHP_V8_ME (Isolate, isInUse, ZEND_ACC_PUBLIC)
576596 PHP_V8_ME (Isolate, setCaptureStackTraceForUncaughtExceptions, ZEND_ACC_PUBLIC)
577597
578598 PHP_FE_END
@@ -586,6 +606,10 @@ PHP_MINIT_FUNCTION (php_v8_isolate) {
586606 this_ce = zend_register_internal_class (&ce);
587607 this_ce->create_object = php_v8_isolate_ctor;
588608
609+ zend_declare_class_constant_long (this_ce, ZEND_STRL (" MEMORY_PRESSURE_LEVEL_NONE" ), static_cast <zend_long>(v8::MemoryPressureLevel::kNone ));
610+ zend_declare_class_constant_long (this_ce, ZEND_STRL (" MEMORY_PRESSURE_LEVEL_MODERATE" ), static_cast <zend_long>(v8::MemoryPressureLevel::kModerate ));
611+ zend_declare_class_constant_long (this_ce, ZEND_STRL (" MEMORY_PRESSURE_LEVEL_CRITICAL" ), static_cast <zend_long>(v8::MemoryPressureLevel::kCritical ));
612+
589613 memcpy (&php_v8_isolate_object_handlers, zend_get_std_object_handlers (), sizeof (zend_object_handlers));
590614
591615 php_v8_isolate_object_handlers.offset = XtOffsetOf (php_v8_isolate_t , std);
0 commit comments