diff --git a/Source/bmalloc/bmalloc/AvailableMemory.cpp b/Source/bmalloc/bmalloc/AvailableMemory.cpp index c89de5687d571..57f89a7fa036a 100644 --- a/Source/bmalloc/bmalloc/AvailableMemory.cpp +++ b/Source/bmalloc/bmalloc/AvailableMemory.cpp @@ -149,6 +149,29 @@ struct LinuxMemory { }; #endif +static size_t customRAMSize() +{ + // Syntax: Case insensitive, unit multipliers (M=Mb, K=Kb, =bytes). + // Example: WPE_RAM_SIZE='500M' + + size_t customSize = 0; + + const char *s = getenv("WPE_RAM_SIZE"); + if (s) { + size_t len = strlen(s); + size_t val = atoi(s); + size_t units = 1; + if (s[len-1] == 'k' || s[len-1] == 'K') + units = 1024; + else if (s[len-1] == 'm' || s[len-1] == 'M') + units = 1024*1024; + return units * val; + } + + return customSize; +} + + static size_t computeAvailableMemory() { #if BOS(DARWIN) @@ -162,6 +185,10 @@ static size_t computeAvailableMemory() // (for example) and we have code that depends on those boundaries. return ((sizeAccordingToKernel + multiple - 1) / multiple) * multiple; #elif BOS(FREEBSD) || BOS(LINUX) + size_t customRamSize = customRAMSize(); + if (customRamSize) { + return customRamSize; + } struct sysinfo info; if (!sysinfo(&info)) return info.totalram * info.mem_unit;