freezer: switch to cgroup v2 freezer am: 6ca459dc17

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12392112

Change-Id: Ic980cd9dd6dbaf94b69c428615cccd58dc9c6885
This commit is contained in:
Marco Ballesio
2020-08-28 18:15:52 +00:00
committed by Automerger Merge Worker
3 changed files with 14 additions and 10 deletions

View File

@@ -947,7 +947,7 @@ public class Process {
/** /**
* Enable or disable the freezer. When enable == false all frozen processes are unfrozen, * 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 * 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 * 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. * in the freezer (including the ones added while the freezer was disabled) are frozen.

View File

@@ -352,9 +352,9 @@ void android_os_Process_enableFreezer(
bool success = true; bool success = true;
if (enable) { if (enable) {
success = SetTaskProfiles(0, {"FreezerFrozen"}, true); success = SetTaskProfiles(0, {"FreezerEnabled"}, true);
} else { } else {
success = SetTaskProfiles(0, {"FreezerThawed"}, true); success = SetTaskProfiles(0, {"FreezerDisabled"}, true);
} }
if (!success) { if (!success) {

View File

@@ -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() { public static boolean isFreezerSupported() {
boolean supported = false; boolean supported = false;
FileReader fr = null; FileReader fr = null;
try { try {
fr = new FileReader("/dev/freezer/frozen/freezer.killable"); fr = new FileReader("/sys/fs/cgroup/freezer/cgroup.freeze");
int i = fr.read(); char state = (char) fr.read();
if ((char) i == '1') { if (state == '1' || state == '0') {
supported = true; supported = true;
} else { } 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) { } 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) { } 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) { if (fr != null) {
@@ -471,6 +471,8 @@ public final class CachedAppOptimizer {
if (mUseFreezer && mFreezeHandler == null) { if (mUseFreezer && mFreezeHandler == null) {
Slog.d(TAG_AM, "Freezer enabled"); Slog.d(TAG_AM, "Freezer enabled");
Process.enableFreezer(true);
if (!mCachedAppOptimizerThread.isAlive()) { if (!mCachedAppOptimizerThread.isAlive()) {
mCachedAppOptimizerThread.start(); mCachedAppOptimizerThread.start();
} }
@@ -479,6 +481,8 @@ public final class CachedAppOptimizer {
Process.setThreadGroupAndCpuset(mCachedAppOptimizerThread.getThreadId(), Process.setThreadGroupAndCpuset(mCachedAppOptimizerThread.getThreadId(),
Process.THREAD_GROUP_SYSTEM); Process.THREAD_GROUP_SYSTEM);
} else {
Process.enableFreezer(false);
} }
} }