diff options
| author | 2018-09-13 11:34:24 +0100 | |
|---|---|---|
| committer | 2018-10-02 11:45:55 +0000 | |
| commit | 07b60cd4f571d9ca52281ab9b4e028327bc545ed (patch) | |
| tree | da8cf2cc17a5d3cbde1fd91c8f96489db59e4603 | |
| parent | 9c3f60d2f94fa19c1a06e58d3472797346f98677 (diff) | |
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)
| -rw-r--r-- | services/core/java/com/android/server/am/MemoryStatUtil.java | 19 |
1 files 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 { |