Loading services/core/java/com/android/server/am/CachedAppOptimizer.java +16 −18 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ public final class CachedAppOptimizer { private static final String ATRACE_FREEZER_TRACK = "Freezer"; private static final int FREEZE_BINDER_TIMEOUT_MS = 100; private static final int FREEZE_DEADLOCK_TIMEOUT_MS = 1000; @VisibleForTesting static final boolean ENABLE_FILE_COMPACT = false; Loading Loading @@ -244,6 +245,7 @@ public final class CachedAppOptimizer { static final int REPORT_UNFREEZE_MSG = 4; static final int COMPACT_NATIVE_MSG = 5; static final int UID_FROZEN_STATE_CHANGED_MSG = 6; static final int DEADLOCK_WATCHDOG_MSG = 7; // When free swap falls below this percentage threshold any full (file + anon) // compactions will be downgraded to file only compactions to reduce pressure Loading Loading @@ -1947,28 +1949,14 @@ public final class CachedAppOptimizer { public void handleMessage(Message msg) { switch (msg.what) { case SET_FROZEN_PROCESS_MSG: { ProcessRecord proc = (ProcessRecord) msg.obj; int pid = proc.getPid(); final String name = proc.processName; synchronized (mAm) { freezeProcess(proc); } try { // post-check to prevent deadlock mProcLocksReader.handleBlockingFileLocks(this); } catch (Exception e) { Slog.e(TAG_AM, "Unable to check file locks for " + name + "(" + pid + "): " + e); synchronized (mAm) { synchronized (mProcLock) { unfreezeAppLSP(proc, UNFREEZE_REASON_FILE_LOCK_CHECK_FAILURE); } } } if (proc.mOptRecord.isFrozen()) { onProcessFrozen(proc); } removeMessages(DEADLOCK_WATCHDOG_MSG); sendEmptyMessageDelayed(DEADLOCK_WATCHDOG_MSG, FREEZE_DEADLOCK_TIMEOUT_MS); } break; case REPORT_UNFREEZE_MSG: Loading @@ -1981,8 +1969,18 @@ public final class CachedAppOptimizer { reportUnfreeze(pid, frozenDuration, processName, reason); break; case UID_FROZEN_STATE_CHANGED_MSG: ProcessRecord proc = (ProcessRecord) msg.obj; reportOneUidFrozenStateChanged(proc.uid, true); reportOneUidFrozenStateChanged(((ProcessRecord) msg.obj).uid, true); break; case DEADLOCK_WATCHDOG_MSG: try { // post-check to prevent deadlock if (DEBUG_FREEZER) { Slog.d(TAG_AM, "Freezer deadlock watchdog"); } mProcLocksReader.handleBlockingFileLocks(this); } catch (IOException e) { Slog.w(TAG_AM, "Unable to check file locks"); } break; default: return; Loading Loading
services/core/java/com/android/server/am/CachedAppOptimizer.java +16 −18 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ public final class CachedAppOptimizer { private static final String ATRACE_FREEZER_TRACK = "Freezer"; private static final int FREEZE_BINDER_TIMEOUT_MS = 100; private static final int FREEZE_DEADLOCK_TIMEOUT_MS = 1000; @VisibleForTesting static final boolean ENABLE_FILE_COMPACT = false; Loading Loading @@ -244,6 +245,7 @@ public final class CachedAppOptimizer { static final int REPORT_UNFREEZE_MSG = 4; static final int COMPACT_NATIVE_MSG = 5; static final int UID_FROZEN_STATE_CHANGED_MSG = 6; static final int DEADLOCK_WATCHDOG_MSG = 7; // When free swap falls below this percentage threshold any full (file + anon) // compactions will be downgraded to file only compactions to reduce pressure Loading Loading @@ -1947,28 +1949,14 @@ public final class CachedAppOptimizer { public void handleMessage(Message msg) { switch (msg.what) { case SET_FROZEN_PROCESS_MSG: { ProcessRecord proc = (ProcessRecord) msg.obj; int pid = proc.getPid(); final String name = proc.processName; synchronized (mAm) { freezeProcess(proc); } try { // post-check to prevent deadlock mProcLocksReader.handleBlockingFileLocks(this); } catch (Exception e) { Slog.e(TAG_AM, "Unable to check file locks for " + name + "(" + pid + "): " + e); synchronized (mAm) { synchronized (mProcLock) { unfreezeAppLSP(proc, UNFREEZE_REASON_FILE_LOCK_CHECK_FAILURE); } } } if (proc.mOptRecord.isFrozen()) { onProcessFrozen(proc); } removeMessages(DEADLOCK_WATCHDOG_MSG); sendEmptyMessageDelayed(DEADLOCK_WATCHDOG_MSG, FREEZE_DEADLOCK_TIMEOUT_MS); } break; case REPORT_UNFREEZE_MSG: Loading @@ -1981,8 +1969,18 @@ public final class CachedAppOptimizer { reportUnfreeze(pid, frozenDuration, processName, reason); break; case UID_FROZEN_STATE_CHANGED_MSG: ProcessRecord proc = (ProcessRecord) msg.obj; reportOneUidFrozenStateChanged(proc.uid, true); reportOneUidFrozenStateChanged(((ProcessRecord) msg.obj).uid, true); break; case DEADLOCK_WATCHDOG_MSG: try { // post-check to prevent deadlock if (DEBUG_FREEZER) { Slog.d(TAG_AM, "Freezer deadlock watchdog"); } mProcLocksReader.handleBlockingFileLocks(this); } catch (IOException e) { Slog.w(TAG_AM, "Unable to check file locks"); } break; default: return; Loading