From 07b60cd4f571d9ca52281ab9b4e028327bc545ed Mon Sep 17 00:00:00 2001 From: Rafal Slawik Date: Thu, 13 Sep 2018 11:34:24 +0100 Subject: [PATCH] Fix: read memory.stat from per-app cgroup only if per-app memcg are enabled on a device Bug: 115601684 Change-Id: I91c1d4422e0492f19bd1e0fc821b597bd4ff1a7c Merged-In: I91c1d4422e0492f19bd1e0fc821b597bd4ff1a7c Fix: 115601684 Test: existing tests pass (cherry picked from commit ba9440782c8e8dd4700c8b21af13763e4e95c2d8) --- .../java/com/android/server/am/MemoryStatUtil.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/am/MemoryStatUtil.java b/services/core/java/com/android/server/am/MemoryStatUtil.java index f9dccea0d34c..aad890b8bd74 100644 --- a/services/core/java/com/android/server/am/MemoryStatUtil.java +++ b/services/core/java/com/android/server/am/MemoryStatUtil.java @@ -22,6 +22,7 @@ import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NA import android.annotation.Nullable; import android.os.FileUtils; +import android.os.SystemProperties; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; @@ -38,6 +39,10 @@ import java.util.regex.Pattern; final class MemoryStatUtil { private static final String TAG = TAG_WITH_CLASS_NAME ? "MemoryStatUtil" : TAG_AM; + /** True if device has per-app memcg */ + private static final Boolean DEVICE_HAS_PER_APP_MEMCG = + SystemProperties.getBoolean("ro.config.per_app_memcg", false); + /** Path to check if device has memcg */ private static final String MEMCG_TEST_PATH = "/dev/memcg/apps/memory.stat"; /** Path to memory stat file for logging app start memory state */ @@ -55,15 +60,12 @@ final class MemoryStatUtil { private static final int PGMAJFAULT_INDEX = 11; private static final int RSS_IN_BYTES_INDEX = 23; - /** True if device has memcg */ - private static volatile Boolean sDeviceHasMemCg; - private MemoryStatUtil() {} /** * Reads memory stat for a process. * - * Reads from memcg if available on device, else fallback to procfs. + * Reads from per-app memcg if available on device, else fallback to procfs. * Returns null if no stats can be read. */ @Nullable @@ -156,15 +158,10 @@ final class MemoryStatUtil { } /** - * Checks if memcg is available on device. - * - * Touches the filesystem to do the check. + * Returns whether per-app memcg is available on device. */ static boolean hasMemcg() { - if (sDeviceHasMemCg == null) { - sDeviceHasMemCg = (new File(MEMCG_TEST_PATH)).exists(); - } - return sDeviceHasMemCg; + return DEVICE_HAS_PER_APP_MEMCG; } static final class MemoryStat { -- 2.11.0