From 83a5ba1e2c37a99d72bd81dedf53cba2a96e513e Mon Sep 17 00:00:00 2001 From: BILL SHEN <15865969+cucbin@users.noreply.github.com> Date: Wed, 20 Aug 2025 15:49:41 +0800 Subject: [PATCH] feat: add `fileBacked` and `purgeable` fields to `process.getSystemMemoryInfo()` for macOS (#47628) * fix: Optimize the value of memory.free in the return data of getSystemMemoryInfo(). * fix: Improve the value of memory in the return data of getSystemMemoryInfo(). * fix: complete API doc. * Update docs/api/process.md Co-authored-by: Will Anderson * fix: update name to fileBacked. * fix: fix with code conflict --------- Co-authored-by: Will Anderson --- docs/api/process.md | 4 ++++ shell/common/api/electron_bindings.cc | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/api/process.md b/docs/api/process.md index 3c24d5db5798..91e42942fff4 100644 --- a/docs/api/process.md +++ b/docs/api/process.md @@ -211,6 +211,10 @@ Returns `Object`: system. * `free` Integer - The total amount of memory not being used by applications or disk cache. +* `fileBacked` Integer _macOS_ - The amount of memory that currently has been paged out to storage. + Includes memory for file caches, network buffers, and other system services. +* `purgeable` Integer _macOS_ - The amount of memory that is marked as "purgeable". The system can reclaim it + if memory pressure increases. * `swapTotal` Integer _Windows_ _Linux_ - The total amount of swap memory in Kilobytes available to the system. * `swapFree` Integer _Windows_ _Linux_ - The free amount of swap memory in Kilobytes available to the diff --git a/shell/common/api/electron_bindings.cc b/shell/common/api/electron_bindings.cc index 83cd634fa5b7..417334f33133 100644 --- a/shell/common/api/electron_bindings.cc +++ b/shell/common/api/electron_bindings.cc @@ -183,8 +183,11 @@ v8::Local ElectronBindings::GetSystemMemoryInfo( #endif dict.Set("free", free.InKiB()); +#if BUILDFLAG(IS_MAC) + dict.Set("fileBacked", mem_info.file_backed.InKiB()); + dict.Set("purgeable", mem_info.purgeable.InKiB()); +#else // NB: These return bogus values on macOS -#if !BUILDFLAG(IS_MAC) dict.Set("swapTotal", mem_info.swap_total.InKiB()); dict.Set("swapFree", mem_info.swap_free.InKiB()); #endif