diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-05-24 01:20:17 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-05-24 01:20:17 +0000 |
commit | f6f8751fd689f6ca07a4bb6bad65f9a5e4d63323 (patch) | |
tree | 6760349cac723fd681c9c9ea0d99843b173179ef | |
parent | 2cd9d92a1dc77ccde13e4bb669e4b69445ffaa72 (diff) | |
parent | cbb690299f5910aa9b9162e151f0e54d1de73d7b (diff) | |
download | core-f6f8751fd689f6ca07a4bb6bad65f9a5e4d63323.tar.gz |
Merge "Make per-application memcg hierarchy configurable via a property" into pi-dev
-rw-r--r-- | libprocessgroup/processgroup.cpp | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/libprocessgroup/processgroup.cpp b/libprocessgroup/processgroup.cpp index 6dfa697de..58295fadb 100644 --- a/libprocessgroup/processgroup.cpp +++ b/libprocessgroup/processgroup.cpp @@ -39,12 +39,18 @@ #include <android-base/file.h> #include <android-base/logging.h> +#ifdef __ANDROID__ +#include <android-base/properties.h> +#endif #include <android-base/stringprintf.h> #include <android-base/strings.h> #include <private/android_filesystem_config.h> #include <processgroup/processgroup.h> +#ifdef __ANDROID__ +using android::base::GetBoolProperty; +#endif using android::base::StartsWith; using android::base::StringPrintf; using android::base::WriteStringToFile; @@ -62,12 +68,25 @@ std::once_flag init_path_flag; static const std::string& GetCgroupRootPath() { static std::string cgroup_root_path; std::call_once(init_path_flag, [&]() { - // Check if mem cgroup is mounted, only then check for write-access to avoid - // SELinux denials +#ifdef __ANDROID__ + // low-ram devices use per-app memcg by default, unlike high-end ones + bool low_ram_device = GetBoolProperty("ro.config.low_ram", false); + bool per_app_memcg = + GetBoolProperty("ro.config.per_app_memcg", low_ram_device); +#else + // host does not support Android properties + bool per_app_memcg = false; +#endif + if (per_app_memcg) { + // Check if mem cgroup is mounted, only then check for + // write-access to avoid SELinux denials cgroup_root_path = - (access(MEM_CGROUP_TASKS, F_OK) || access(MEM_CGROUP_PATH, W_OK) ? ACCT_CGROUP_PATH - : MEM_CGROUP_PATH); - }); + (access(MEM_CGROUP_TASKS, F_OK) || access(MEM_CGROUP_PATH, W_OK) ? + ACCT_CGROUP_PATH : MEM_CGROUP_PATH); + } else { + cgroup_root_path = ACCT_CGROUP_PATH; + } + }); return cgroup_root_path; } |