Revert "BroadcastQueue: fix subtle soft/hard timeout bug."

This reverts commit 3e4b28028b.

Reason for revert: b/258831395

Change-Id: Ie98f26dec0b5cf26da439394456c9a86a7b64663
This commit is contained in:
Jeff Sharkey
2022-11-11 23:28:58 +00:00
committed by Android (Google) Code Review
parent 3e4b28028b
commit 4fde704e1a

View File

@@ -37,7 +37,6 @@ import static com.android.server.am.BroadcastRecord.isDeliveryStateTerminal;
import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER;
import static com.android.server.am.OomAdjuster.OOM_ADJ_REASON_START_RECEIVER;
import android.annotation.DurationMillisLong;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UptimeMillisLong;
@@ -240,11 +239,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
}
case MSG_DELIVERY_TIMEOUT_SOFT: {
synchronized (mService) {
final SomeArgs args = (SomeArgs) msg.obj;
final BroadcastProcessQueue queue = (BroadcastProcessQueue) args.arg1;
final long originalTimeout = args.argl1;
args.recycle();
deliveryTimeoutSoftLocked(queue, originalTimeout);
deliveryTimeoutSoftLocked((BroadcastProcessQueue) msg.obj);
}
return true;
}
@@ -751,11 +746,8 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
queue.lastCpuDelayTime = queue.app.getCpuDelayTime();
final long timeout = r.isForeground() ? mFgConstants.TIMEOUT : mBgConstants.TIMEOUT;
final SomeArgs args = SomeArgs.obtain();
args.arg1 = queue;
args.argl1 = timeout;
mLocalHandler.sendMessageDelayed(
Message.obtain(mLocalHandler, MSG_DELIVERY_TIMEOUT_SOFT, args), timeout);
Message.obtain(mLocalHandler, MSG_DELIVERY_TIMEOUT_SOFT, queue), timeout);
}
if (r.allowBackgroundActivityStarts) {
@@ -842,16 +834,15 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
r.resultTo = null;
}
private void deliveryTimeoutSoftLocked(@NonNull BroadcastProcessQueue queue,
@DurationMillisLong long originalTimeout) {
private void deliveryTimeoutSoftLocked(@NonNull BroadcastProcessQueue queue) {
if (queue.app != null) {
// Instead of immediately triggering an ANR, extend the timeout by
// the amount of time the process was runnable-but-waiting; we're
// only willing to do this once before triggering an hard ANR
final long cpuDelayTime = queue.app.getCpuDelayTime() - queue.lastCpuDelayTime;
final long hardTimeout = MathUtils.constrain(cpuDelayTime, 0, originalTimeout);
final long timeout = MathUtils.constrain(cpuDelayTime, 0, mConstants.TIMEOUT);
mLocalHandler.sendMessageDelayed(
Message.obtain(mLocalHandler, MSG_DELIVERY_TIMEOUT_HARD, queue), hardTimeout);
Message.obtain(mLocalHandler, MSG_DELIVERY_TIMEOUT_HARD, queue), timeout);
} else {
deliveryTimeoutHardLocked(queue);
}