| Index: base/sys_info_linux.cc
|
| diff --git a/base/sys_info_linux.cc b/base/sys_info_linux.cc
|
| index 298d245ecf580da4d8790f5dc47f851c0208ab5d..a54a2ba07254f7047791fb274adbd58523710f26 100644
|
| --- a/base/sys_info_linux.cc
|
| +++ b/base/sys_info_linux.cc
|
| @@ -13,6 +13,7 @@
|
| #include "base/lazy_instance.h"
|
| #include "base/logging.h"
|
| #include "base/numerics/safe_conversions.h"
|
| +#include "base/process/process_metrics.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/sys_info_internal.h"
|
| #include "build/build_config.h"
|
| @@ -42,13 +43,32 @@ base::LazyInstance<
|
| namespace base {
|
|
|
| // static
|
| +int64_t SysInfo::AmountOfPhysicalMemory() {
|
| + return g_lazy_physical_memory.Get().value();
|
| +}
|
| +
|
| +// static
|
| int64_t SysInfo::AmountOfAvailablePhysicalMemory() {
|
| - return AmountOfMemory(_SC_AVPHYS_PAGES);
|
| + SystemMemoryInfoKB info;
|
| + if (!GetSystemMemoryInfo(&info)) {
|
| + NOTREACHED();
|
| + return 0;
|
| + }
|
| + return AmountOfAvailablePhysicalMemory(info);
|
| }
|
|
|
| // static
|
| -int64_t SysInfo::AmountOfPhysicalMemory() {
|
| - return g_lazy_physical_memory.Get().value();
|
| +int64_t SysInfo::AmountOfAvailablePhysicalMemory(
|
| + const SystemMemoryInfoKB& info) {
|
| + // See details here:
|
| + // https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
|
| + // The fallback logic (when there is no MemAvailable) would be more precise
|
| + // if we had info about zones watermarks (/proc/zoneinfo).
|
| + return info.available != 0
|
| + ? static_cast<int64_t>(info.available - info.active_file) * 1024
|
| + : static_cast<int64_t>(info.free + info.reclaimable +
|
| + info.inactive_file) *
|
| + 1024;
|
| }
|
|
|
| // static
|
|
|