freezer: switch to cgroup v2 freezer
cgroup v2 freezer has a single hierarchy and is mounted under /sys/fs/cgroup. Proper v2 freezer support in a system can be checked by verifying that the file "cgroup.freeze" is present in a freezer subgroup. Bug: 154548692 Test: manually verified that processes are frozen and unfrozen Change-Id: Ib966a957490ec986eb14aba6492832c96e147896 Merged-In: Ib966a957490ec986eb14aba6492832c96e147896
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user