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 ba9440782c)
This commit is contained in:
Rafal Slawik
2018-09-13 11:34:24 +01:00
parent 9c3f60d2f9
commit 07b60cd4f5

View File

@@ -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 {