BroadcastQueue: temporarily unfreeze for parallel broadcasts
Ensure that recipients of broadcast messages and replies are not frozen to avoid saturation of their binder async queue. Bug: 172001574 Test: booted device, unplugged the usb charger, verified that some frozen processes were unfrozen Change-Id: I1f359103984b115a91fb9134e912b80d6acbaecf
This commit is contained in:
@@ -798,7 +798,10 @@ public final class BroadcastQueue {
|
|||||||
mService.updateOomAdjPendingTargetsLocked(
|
mService.updateOomAdjPendingTargetsLocked(
|
||||||
OomAdjuster.OOM_ADJ_REASON_START_RECEIVER);
|
OomAdjuster.OOM_ADJ_REASON_START_RECEIVER);
|
||||||
}
|
}
|
||||||
|
} else if (filter.receiverList.app != null) {
|
||||||
|
mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(filter.receiverList.app);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (DEBUG_BROADCAST_LIGHT) Slog.i(TAG_BROADCAST,
|
if (DEBUG_BROADCAST_LIGHT) Slog.i(TAG_BROADCAST,
|
||||||
"Delivering to " + filter + " : " + r);
|
"Delivering to " + filter + " : " + r);
|
||||||
@@ -1132,6 +1135,10 @@ public final class BroadcastQueue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sendResult) {
|
if (sendResult) {
|
||||||
|
if (r.callerApp != null) {
|
||||||
|
mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(
|
||||||
|
r.callerApp);
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
if (DEBUG_BROADCAST) {
|
if (DEBUG_BROADCAST) {
|
||||||
Slog.i(TAG_BROADCAST, "Finishing broadcast [" + mQueueName + "] "
|
Slog.i(TAG_BROADCAST, "Finishing broadcast [" + mQueueName + "] "
|
||||||
|
|||||||
@@ -720,6 +720,16 @@ public final class CachedAppOptimizer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This will ensure app will be out of the freezer for at least FREEZE_TIMEOUT_MS
|
||||||
|
void unfreezeTemporarily(ProcessRecord app) {
|
||||||
|
synchronized (mAm) {
|
||||||
|
if (app.frozen) {
|
||||||
|
unfreezeAppLocked(app);
|
||||||
|
freezeAppAsync(app);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@GuardedBy("mAm")
|
@GuardedBy("mAm")
|
||||||
void freezeAppAsync(ProcessRecord app) {
|
void freezeAppAsync(ProcessRecord app) {
|
||||||
mFreezeHandler.removeMessages(SET_FROZEN_PROCESS_MSG, app);
|
mFreezeHandler.removeMessages(SET_FROZEN_PROCESS_MSG, app);
|
||||||
|
|||||||
Reference in New Issue
Block a user