From f51ba832387c82d2833e9d97c21160a33a7eaf4d Mon Sep 17 00:00:00 2001 From: Dillon Skaggs Date: Wed, 7 Feb 2024 00:47:21 -0600 Subject: [PATCH] tweak(citizen-scripting-v8): increase heap size per isolate to match system memory - This copies behavior from mono --- .../src/V8ScriptRuntime.cpp | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/code/components/citizen-scripting-v8/src/V8ScriptRuntime.cpp b/code/components/citizen-scripting-v8/src/V8ScriptRuntime.cpp index d0d92cda3a..addeee0cbf 100644 --- a/code/components/citizen-scripting-v8/src/V8ScriptRuntime.cpp +++ b/code/components/citizen-scripting-v8/src/V8ScriptRuntime.cpp @@ -39,6 +39,30 @@ inline static std::chrono::milliseconds msec() return std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()); } +// This copies behavior from mono +#ifdef WIN32 +#include +// Gets scaled (max * 0.9) max memory in bytes. +size_t GetScaledPhysicalMemorySize() +{ + MEMORYSTATUSEX status; + status.dwLength = sizeof(status); + GlobalMemoryStatusEx(&status); + return status.ullTotalPhys * 0.9; +} +#else +#include +// Gets scaled (max * 0.9) max memory in bytes. +size_t GetScaledPhysicalMemorySize() +{ + long pages = sysconf(_SC_PHYS_PAGES); + long pageSize = sysconf(_SC_PAGE_SIZE); + + return (pages * pageSize) * 0.9; +} +#endif + + inline bool UseNode() { #ifndef IS_FXSERVER @@ -2889,7 +2913,6 @@ void V8ScriptGlobals::Initialize() V8::SetFlagsFromCommandLine(&argc, (char**)argv, false); #endif - const char* flags = "--turbo-inline-js-wasm-calls --expose_gc --harmony-top-level-await"; V8::SetFlagsFromString(flags, strlen(flags)); @@ -2920,6 +2943,14 @@ void V8ScriptGlobals::Initialize() Isolate::CreateParams params; params.array_buffer_allocator = m_arrayBufferAllocator.get(); + const auto kScaledMemory = GetScaledPhysicalMemorySize(); + + auto constraints = ResourceConstraints{}; + + constraints.ConfigureDefaultsFromHeapSize(0, kScaledMemory); + + params.constraints = constraints; + m_isolate = Isolate::Allocate(); m_isolate->AddGCPrologueCallback([](Isolate* isolate, GCType type,