Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3120)

Unified Diff: base/sys_info_linux.cc

Issue 2558043007: Fix free memory calculation. (Closed)
Patch Set: Fix unittests on linuxes. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(
Primiano Tucci (use gerrit) 2017/03/08 12:36:41 this one seems an internal implementation detail,
Michael K. (Yandex Team) 2017/03/09 07:21:15 It is used in sys_info_unittest.cc in the new SysI
+ 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
« no previous file with comments | « base/sys_info_ios.mm ('k') | base/sys_info_mac.mm » ('j') | base/sys_info_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698