diff options
| -rw-r--r-- | services/core/java/com/android/server/am/CachedAppOptimizer.java | 19 | ||||
| -rw-r--r-- | services/core/jni/com_android_server_am_CachedAppOptimizer.cpp | 12 |
2 files changed, 25 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 3bc5de91b2bd..3e82d557c01a 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -1015,6 +1015,12 @@ public final class CachedAppOptimizer { private static native String getFreezerCheckPath(); /** + * Check if task_profiles.json includes valid freezer profiles and actions + * @return false if there are invalid profiles or actions + */ + private static native boolean isFreezerProfileValid(); + + /** * Determines whether the freezer is supported by this system */ public static boolean isFreezerSupported() { @@ -1031,16 +1037,19 @@ public final class CachedAppOptimizer { // Also check freezer binder ioctl Slog.d(TAG_AM, "Checking binder freezer ioctl"); getBinderFreezeInfo(Process.myPid()); - supported = true; + + // Check if task_profiles.json contains invalid profiles + Slog.d(TAG_AM, "Checking freezer profiles"); + supported = isFreezerProfileValid(); } else { - Slog.e(TAG_AM, "unexpected value in cgroup.freeze"); + Slog.e(TAG_AM, "Unexpected value in cgroup.freeze"); } } catch (java.io.FileNotFoundException e) { - Slog.w(TAG_AM, "cgroup.freeze not present"); + Slog.w(TAG_AM, "File cgroup.freeze not present"); } catch (RuntimeException e) { - Slog.w(TAG_AM, "unable to read freezer info"); + Slog.w(TAG_AM, "Unable to read freezer info"); } catch (Exception e) { - Slog.w(TAG_AM, "unable to read cgroup.freeze: " + e.toString()); + Slog.w(TAG_AM, "Unable to read cgroup.freeze: " + e.toString()); } if (fr != null) { diff --git a/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp b/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp index 4af685e42246..0488247ec78b 100644 --- a/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp +++ b/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp @@ -561,6 +561,14 @@ static jstring com_android_server_am_CachedAppOptimizer_getFreezerCheckPath(JNIE return env->NewStringUTF(path.c_str()); } +static jboolean com_android_server_am_CachedAppOptimizer_isFreezerProfileValid(JNIEnv* env) { + int uid = getuid(); + int pid = getpid(); + + return isProfileValidForProcess("Frozen", uid, pid) && + isProfileValidForProcess("Unfrozen", uid, pid); +} + static const JNINativeMethod sMethods[] = { /* name, signature, funcPtr */ {"cancelCompaction", "()V", @@ -578,7 +586,9 @@ static const JNINativeMethod sMethods[] = { {"getBinderFreezeInfo", "(I)I", (void*)com_android_server_am_CachedAppOptimizer_getBinderFreezeInfo}, {"getFreezerCheckPath", "()Ljava/lang/String;", - (void*)com_android_server_am_CachedAppOptimizer_getFreezerCheckPath}}; + (void*)com_android_server_am_CachedAppOptimizer_getFreezerCheckPath}, + {"isFreezerProfileValid", "()Z", + (void*)com_android_server_am_CachedAppOptimizer_isFreezerProfileValid}}; int register_android_server_am_CachedAppOptimizer(JNIEnv* env) { |