summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2018-05-24 01:20:17 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-05-24 01:20:17 +0000
commitf6f8751fd689f6ca07a4bb6bad65f9a5e4d63323 (patch)
tree6760349cac723fd681c9c9ea0d99843b173179ef
parent2cd9d92a1dc77ccde13e4bb669e4b69445ffaa72 (diff)
parentcbb690299f5910aa9b9162e151f0e54d1de73d7b (diff)
downloadcore-f6f8751fd689f6ca07a4bb6bad65f9a5e4d63323.tar.gz
Merge "Make per-application memcg hierarchy configurable via a property" into pi-dev
-rw-r--r--libprocessgroup/processgroup.cpp29
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;
}