2020// USE OR OTHER DEALINGS IN THE SOFTWARE.
2121
2222#include " env-inl.h"
23+ #include " node_debug.h"
2324#include " node_external_reference.h"
2425#include " string_bytes.h"
2526
@@ -148,12 +149,26 @@ static void GetFreeMemory(const FunctionCallbackInfo<Value>& args) {
148149 args.GetReturnValue ().Set (amount);
149150}
150151
152+ static double FastGetFreeMemory (Local<Value> receiver) {
153+ TRACK_V8_FAST_API_CALL (" os.freemem" );
154+ return static_cast <double >(uv_get_free_memory ());
155+ }
156+
157+ static v8::CFunction fast_get_free_memory (
158+ v8::CFunction::Make (FastGetFreeMemory));
151159
152160static void GetTotalMemory (const FunctionCallbackInfo<Value>& args) {
153161 double amount = static_cast <double >(uv_get_total_memory ());
154162 args.GetReturnValue ().Set (amount);
155163}
156164
165+ double FastGetTotalMemory (Local<Value> receiver) {
166+ TRACK_V8_FAST_API_CALL (" os.totalmem" );
167+ return static_cast <double >(uv_get_total_memory ());
168+ }
169+
170+ static v8::CFunction fast_get_total_memory (
171+ v8::CFunction::Make (FastGetTotalMemory));
157172
158173static void GetUptime (const FunctionCallbackInfo<Value>& args) {
159174 Environment* env = Environment::GetCurrent (args);
@@ -406,6 +421,14 @@ static void GetAvailableParallelism(const FunctionCallbackInfo<Value>& args) {
406421 args.GetReturnValue ().Set (parallelism);
407422}
408423
424+ uint32_t FastGetAvailableParallelism (v8::Local<v8::Value> receiver) {
425+ TRACK_V8_FAST_API_CALL (" os.availableParallelism" );
426+ return uv_available_parallelism ();
427+ }
428+
429+ static v8::CFunction fast_get_available_parallelism (
430+ v8::CFunction::Make (FastGetAvailableParallelism));
431+
409432void Initialize (Local<Object> target,
410433 Local<Value> unused,
411434 Local<Context> context,
@@ -414,16 +437,21 @@ void Initialize(Local<Object> target,
414437 SetMethod (context, target, " getHostname" , GetHostname);
415438 SetMethod (context, target, " getLoadAvg" , GetLoadAvg);
416439 SetMethod (context, target, " getUptime" , GetUptime);
417- SetMethod (context, target, " getTotalMem" , GetTotalMemory);
418- SetMethod (context, target, " getFreeMem" , GetFreeMemory);
440+ SetFastMethodNoSideEffect (
441+ context, target, " getTotalMem" , GetTotalMemory, &fast_get_total_memory);
442+ SetFastMethodNoSideEffect (
443+ context, target, " getFreeMem" , GetFreeMemory, &fast_get_free_memory);
419444 SetMethod (context, target, " getCPUs" , GetCPUInfo);
420445 SetMethod (context, target, " getInterfaceAddresses" , GetInterfaceAddresses);
421446 SetMethod (context, target, " getHomeDirectory" , GetHomeDirectory);
422447 SetMethod (context, target, " getUserInfo" , GetUserInfo);
423448 SetMethod (context, target, " setPriority" , SetPriority);
424449 SetMethod (context, target, " getPriority" , GetPriority);
425- SetMethod (
426- context, target, " getAvailableParallelism" , GetAvailableParallelism);
450+ SetFastMethodNoSideEffect (context,
451+ target,
452+ " getAvailableParallelism" ,
453+ GetAvailableParallelism,
454+ &fast_get_available_parallelism);
427455 SetMethod (context, target, " getOSInformation" , GetOSInformation);
428456 target
429457 ->Set (context,
@@ -437,14 +465,20 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
437465 registry->Register (GetLoadAvg);
438466 registry->Register (GetUptime);
439467 registry->Register (GetTotalMemory);
468+ registry->Register (FastGetTotalMemory);
469+ registry->Register (fast_get_total_memory.GetTypeInfo ());
440470 registry->Register (GetFreeMemory);
471+ registry->Register (FastGetFreeMemory);
472+ registry->Register (fast_get_free_memory.GetTypeInfo ());
441473 registry->Register (GetCPUInfo);
442474 registry->Register (GetInterfaceAddresses);
443475 registry->Register (GetHomeDirectory);
444476 registry->Register (GetUserInfo);
445477 registry->Register (SetPriority);
446478 registry->Register (GetPriority);
447479 registry->Register (GetAvailableParallelism);
480+ registry->Register (FastGetAvailableParallelism);
481+ registry->Register (fast_get_available_parallelism.GetTypeInfo ());
448482 registry->Register (GetOSInformation);
449483}
450484
0 commit comments