From 6a4b7680ccb809b49af5c258d89f61b97769ddf8 Mon Sep 17 00:00:00 2001 From: Marco Ballesio Date: Wed, 29 Jul 2020 09:13:53 -0700 Subject: [PATCH] Ensure CachedAppOptimizerThread cpuset CachedAppOptimizerThread isn't started until the device config is downloaded from the Phenotype server, but CachedAppOptimizer.init() is called at device boot. Configure the system-background cpuset for CachedOptimizerThread at creation, then set it again when the thread is started, to ensure priorities aren't modified by ActivityManager. Test: flashed/wiped the device and verified no optimizer thread was present until wifi connection, then verified that the thread cpuset was system-background once created. Rebooted the device again and verified that the optimizer thread was system-background cpuset again. Bug: 149610535 Change-Id: I310f234552320f95bd7e05053084425a3fcc6dcf --- .../android/server/am/CachedAppOptimizer.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 43e3a04ad0329..d9fde0f6728a8 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -16,8 +16,6 @@ package com.android.server.am; -import static android.os.Process.THREAD_PRIORITY_FOREGROUND; - import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_COMPACTION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FREEZER; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; @@ -256,7 +254,7 @@ public final class CachedAppOptimizer { ProcessDependencies processDependencies) { mAm = am; mCachedAppOptimizerThread = new ServiceThread("CachedAppOptimizerThread", - THREAD_PRIORITY_FOREGROUND, true); + Process.THREAD_GROUP_SYSTEM, true); mProcStateThrottle = new HashSet<>(); mProcessDependencies = processDependencies; mTestCallback = callback; @@ -280,8 +278,6 @@ public final class CachedAppOptimizer { updateProcStateThrottle(); updateUseFreezer(); } - Process.setThreadGroupAndCpuset(mCachedAppOptimizerThread.getThreadId(), - Process.THREAD_GROUP_SYSTEM); } /** @@ -411,12 +407,15 @@ public final class CachedAppOptimizer { mUseCompaction = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_USE_COMPACTION, DEFAULT_USE_COMPACTION); - if (mUseCompaction) { + if (mUseCompaction && mCompactionHandler == null) { if (!mCachedAppOptimizerThread.isAlive()) { mCachedAppOptimizerThread.start(); } mCompactionHandler = new MemCompactionHandler(); + + Process.setThreadGroupAndCpuset(mCachedAppOptimizerThread.getThreadId(), + Process.THREAD_GROUP_SYSTEM); } } @@ -470,13 +469,16 @@ public final class CachedAppOptimizer { mUseFreezer = isFreezerSupported(); } - if (mUseFreezer) { + if (mUseFreezer && mFreezeHandler == null) { Slog.d(TAG_AM, "Freezer enabled"); if (!mCachedAppOptimizerThread.isAlive()) { mCachedAppOptimizerThread.start(); } mFreezeHandler = new FreezeHandler(); + + Process.setThreadGroupAndCpuset(mCachedAppOptimizerThread.getThreadId(), + Process.THREAD_GROUP_SYSTEM); } }