diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index a4077fbee892e..efea9537c4cfe 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -947,7 +947,7 @@ public class Process { /** * Enable or disable the freezer. When enable == false all frozen processes are unfrozen, - * but aren't removed from the freezer. Processes can still be added or removed + * but aren't removed from the freezer. While in this state, processes can be added or removed * by using setProcessFrozen, but they won't actually be frozen until the freezer is enabled * again. If enable == true the freezer is enabled again, and all processes * in the freezer (including the ones added while the freezer was disabled) are frozen. diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp index 7c32ca6531143..3486a8574ba03 100644 --- a/core/jni/android_util_Process.cpp +++ b/core/jni/android_util_Process.cpp @@ -352,9 +352,9 @@ void android_os_Process_enableFreezer( bool success = true; if (enable) { - success = SetTaskProfiles(0, {"FreezerFrozen"}, true); + success = SetTaskProfiles(0, {"FreezerEnabled"}, true); } else { - success = SetTaskProfiles(0, {"FreezerThawed"}, true); + success = SetTaskProfiles(0, {"FreezerDisabled"}, true); } if (!success) { diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index d9fde0f6728a8..ce7c73a5d8a31 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -420,25 +420,25 @@ public final class CachedAppOptimizer { } /** - * Determines whether the freezer is correctly supported by this system + * Determines whether the freezer is supported by this system */ public static boolean isFreezerSupported() { boolean supported = false; FileReader fr = null; try { - fr = new FileReader("/dev/freezer/frozen/freezer.killable"); - int i = fr.read(); + fr = new FileReader("/sys/fs/cgroup/freezer/cgroup.freeze"); + char state = (char) fr.read(); - if ((char) i == '1') { + if (state == '1' || state == '0') { supported = true; } else { - Slog.w(TAG_AM, "Freezer killability is turned off, disabling freezer"); + Slog.e(TAG_AM, "unexpected value in cgroup.freeze"); } } catch (java.io.FileNotFoundException e) { - Slog.d(TAG_AM, "Freezer.killable not present, disabling freezer"); + Slog.d(TAG_AM, "cgroup.freeze not present"); } catch (Exception e) { - Slog.d(TAG_AM, "Unable to read freezer.killable, disabling freezer: " + e.toString()); + Slog.d(TAG_AM, "unable to read cgroup.freeze: " + e.toString()); } if (fr != null) { @@ -471,6 +471,8 @@ public final class CachedAppOptimizer { if (mUseFreezer && mFreezeHandler == null) { Slog.d(TAG_AM, "Freezer enabled"); + Process.enableFreezer(true); + if (!mCachedAppOptimizerThread.isAlive()) { mCachedAppOptimizerThread.start(); } @@ -479,6 +481,8 @@ public final class CachedAppOptimizer { Process.setThreadGroupAndCpuset(mCachedAppOptimizerThread.getThreadId(), Process.THREAD_GROUP_SYSTEM); + } else { + Process.enableFreezer(false); } }