diff options
| author | 2022-11-01 11:58:36 +0000 | |
|---|---|---|
| committer | 2022-11-01 11:58:36 +0000 | |
| commit | 8ef5a2e3ae9fe53a71c8fc7c4a1e931b445fd06a (patch) | |
| tree | fd5cbd63841f8558cd3f834c0d4959c0822cb1d3 | |
| parent | 46a36cb0a9a8b72462ee68b2cf1d008209bc8966 (diff) | |
Revert "BroadcastQueue: better state transition logging."
Revert submission 20329504
Reason for revert: Broken SystemServicesTestRuleTest
Bug: 256741859
Reverted Changes:
I1a74109e7:BroadcastQueue: return reasons from skip policy.
I7fe33cd17:BroadcastQueue: better state transition logging.
I9899e805f:BroadcastQueue: skip ANRs when assuming success.
Change-Id: I31ad4804cde2e16d5ecffb8ea8c9cfa9fec4f23d
6 files changed, 29 insertions, 51 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/JobSchedulerBackgroundThread.java b/apex/jobscheduler/service/java/com/android/server/JobSchedulerBackgroundThread.java index 6b01a9f446af..a413f7b1f3ca 100644 --- a/apex/jobscheduler/service/java/com/android/server/JobSchedulerBackgroundThread.java +++ b/apex/jobscheduler/service/java/com/android/server/JobSchedulerBackgroundThread.java @@ -22,8 +22,6 @@ import android.os.HandlerThread; import android.os.Looper; import android.os.Trace; -import com.android.server.am.BroadcastLoopers; - import java.util.concurrent.Executor; /** @@ -47,7 +45,6 @@ public final class JobSchedulerBackgroundThread extends HandlerThread { sInstance = new JobSchedulerBackgroundThread(); sInstance.start(); final Looper looper = sInstance.getLooper(); - BroadcastLoopers.addLooper(looper); looper.setTraceTag(Trace.TRACE_TAG_SYSTEM_SERVER); looper.setSlowLogThresholdMs( SLOW_DISPATCH_THRESHOLD_MS, SLOW_DELIVERY_THRESHOLD_MS); diff --git a/services/core/java/com/android/server/ServiceThread.java b/services/core/java/com/android/server/ServiceThread.java index 3ea4b86d5296..6d8e49c7c869 100644 --- a/services/core/java/com/android/server/ServiceThread.java +++ b/services/core/java/com/android/server/ServiceThread.java @@ -22,8 +22,6 @@ import android.os.Looper; import android.os.Process; import android.os.StrictMode; -import com.android.server.am.BroadcastLoopers; - /** * Special handler thread that we create for system services that require their own loopers. */ @@ -48,14 +46,6 @@ public class ServiceThread extends HandlerThread { super.run(); } - @Override - protected void onLooperPrepared() { - // Almost all service threads are used for dispatching broadcast - // intents, so register ourselves to ensure that "wait-for-broadcast" - // shell commands are able to drain any pending broadcasts - BroadcastLoopers.addLooper(getLooper()); - } - protected static Handler makeSharedHandler(Looper looper) { return new Handler(looper, /*callback=*/ null, /* async=*/ false, /* shared=*/ true); } diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index c280719b06a3..72876f669f01 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -147,7 +147,6 @@ import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.modules.utils.TypedXmlPullParser; import com.android.modules.utils.TypedXmlSerializer; -import com.android.server.am.BroadcastLoopers; import com.android.server.pm.Installer; import com.android.server.pm.UserManagerInternal; import com.android.server.storage.AppFuseBridge; @@ -1810,7 +1809,6 @@ class StorageManagerService extends IStorageManager.Stub HandlerThread hthread = new HandlerThread(TAG); hthread.start(); - BroadcastLoopers.addLooper(hthread.getLooper()); mHandler = new StorageManagerServiceHandler(hthread.getLooper()); // Add OBB Action Handler to StorageManagerService thread. diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index f865b8a377f6..3032f17c2597 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2508,8 +2508,6 @@ public class ActivityManagerService extends IActivityManager.Stub Watchdog.getInstance().addMonitor(this); Watchdog.getInstance().addThread(mHandler); - BroadcastLoopers.addLooper(BackgroundThread.getHandler().getLooper()); - // bind background threads to little cores // this is expected to fail inside of framework tests because apps can't touch cpusets directly // make sure we've already adjusted system_server's internal view of itself first diff --git a/services/core/java/com/android/server/am/BroadcastLoopers.java b/services/core/java/com/android/server/am/BroadcastLoopers.java index b828720c9162..bebb48473fc3 100644 --- a/services/core/java/com/android/server/am/BroadcastLoopers.java +++ b/services/core/java/com/android/server/am/BroadcastLoopers.java @@ -25,8 +25,6 @@ import android.os.SystemClock; import android.util.ArraySet; import android.util.Slog; -import com.android.internal.annotations.GuardedBy; - import java.io.PrintWriter; import java.util.Objects; import java.util.concurrent.CountDownLatch; @@ -39,7 +37,6 @@ import java.util.concurrent.CountDownLatch; public class BroadcastLoopers { private static final String TAG = "BroadcastLoopers"; - @GuardedBy("sLoopers") private static final ArraySet<Looper> sLoopers = new ArraySet<>(); /** diff --git a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java index 21700a3a08ca..9e9eb71db4e5 100644 --- a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +++ b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java @@ -144,6 +144,14 @@ class BroadcastQueueModernImpl extends BroadcastQueue { mRunning = new BroadcastProcessQueue[mConstants.MAX_RUNNING_PROCESS_QUEUES]; } + // TODO: add support for replacing pending broadcasts + // TODO: add support for merging pending broadcasts + + // TODO: consider reordering foreground broadcasts within queue + + // TODO: pause queues when background services are running + // TODO: pause queues when processes are frozen + /** * Map from UID to per-process broadcast queues. If a UID hosts more than * one process, each additional process is stored as a linked list using @@ -501,8 +509,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { if (queue != null) { // If queue was running a broadcast, fail it if (queue.isActive()) { - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_FAILURE, - "onApplicationCleanupLocked"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_FAILURE); } // Skip any pending registered receivers, since the old process @@ -654,8 +661,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { // Ignore registered receivers from a previous PID if (receiver instanceof BroadcastFilter) { mRunningColdStart = null; - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED, - "BroadcastFilter for cold app"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED); return; } @@ -677,8 +683,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { hostingRecord, zygotePolicyFlags, allowWhileBooting, false); if (queue.app == null) { mRunningColdStart = null; - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_FAILURE, - "startProcessLocked failed"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_FAILURE); return; } } @@ -709,30 +714,29 @@ class BroadcastQueueModernImpl extends BroadcastQueue { // If someone already finished this broadcast, finish immediately final int oldDeliveryState = getDeliveryState(r, index); if (isDeliveryStateTerminal(oldDeliveryState)) { - finishReceiverLocked(queue, oldDeliveryState, "already terminal state"); + finishReceiverLocked(queue, oldDeliveryState); return; } // Consider additional cases where we'd want to finish immediately if (app.isInFullBackup()) { - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED, "isInFullBackup"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED); return; } if (mSkipPolicy.shouldSkip(r, receiver)) { - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED, "mSkipPolicy"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED); return; } final Intent receiverIntent = r.getReceiverIntent(receiver); if (receiverIntent == null) { - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED, "isInFullBackup"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED); return; } // Ignore registered receivers from a previous PID if ((receiver instanceof BroadcastFilter) && ((BroadcastFilter) receiver).receiverList.pid != app.getPid()) { - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED, - "BroadcastFilter for mismatched PID"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_SKIPPED); return; } @@ -764,8 +768,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { } if (DEBUG_BROADCAST) logv("Scheduling " + r + " to warm " + app); - setDeliveryState(queue, app, r, index, receiver, BroadcastRecord.DELIVERY_SCHEDULED, - "scheduleReceiverWarmLocked"); + setDeliveryState(queue, app, r, index, receiver, BroadcastRecord.DELIVERY_SCHEDULED); final IApplicationThread thread = app.getOnewayThread(); if (thread != null) { @@ -780,8 +783,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { // TODO: consider making registered receivers of unordered // broadcasts report results to detect ANRs if (!r.ordered) { - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_DELIVERED, - "assuming delivered"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_DELIVERED); } } else { notifyScheduleReceiver(app, r, (ResolveInfo) receiver); @@ -795,11 +797,10 @@ class BroadcastQueueModernImpl extends BroadcastQueue { logw(msg); app.scheduleCrashLocked(msg, CannotDeliverBroadcastException.TYPE_ID, null); app.setKilled(true); - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_FAILURE, "remote app"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_FAILURE); } } else { - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_FAILURE, - "missing IApplicationThread"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_FAILURE); } } @@ -843,8 +844,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { } private void deliveryTimeoutHardLocked(@NonNull BroadcastProcessQueue queue) { - finishReceiverLocked(queue, BroadcastRecord.DELIVERY_TIMEOUT, - "deliveryTimeoutHardLocked"); + finishReceiverLocked(queue, BroadcastRecord.DELIVERY_TIMEOUT); } @Override @@ -871,16 +871,16 @@ class BroadcastQueueModernImpl extends BroadcastQueue { if (r.resultAbort) { for (int i = r.terminalCount + 1; i < r.receivers.size(); i++) { setDeliveryState(null, null, r, i, r.receivers.get(i), - BroadcastRecord.DELIVERY_SKIPPED, "resultAbort"); + BroadcastRecord.DELIVERY_SKIPPED); } } } - return finishReceiverLocked(queue, BroadcastRecord.DELIVERY_DELIVERED, "remote app"); + return finishReceiverLocked(queue, BroadcastRecord.DELIVERY_DELIVERED); } private boolean finishReceiverLocked(@NonNull BroadcastProcessQueue queue, - @DeliveryState int deliveryState, @NonNull String reason) { + @DeliveryState int deliveryState) { checkState(queue.isActive(), "isActive"); final ProcessRecord app = queue.app; @@ -888,7 +888,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { final int index = queue.getActiveIndex(); final Object receiver = r.receivers.get(index); - setDeliveryState(queue, app, r, index, receiver, deliveryState, reason); + setDeliveryState(queue, app, r, index, receiver, deliveryState); if (deliveryState == BroadcastRecord.DELIVERY_TIMEOUT) { r.anrCount++; @@ -935,7 +935,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { */ private void setDeliveryState(@Nullable BroadcastProcessQueue queue, @Nullable ProcessRecord app, @NonNull BroadcastRecord r, int index, - @NonNull Object receiver, @DeliveryState int newDeliveryState, String reason) { + @NonNull Object receiver, @DeliveryState int newDeliveryState) { final int oldDeliveryState = getDeliveryState(r, index); // Only apply state when we haven't already reached a terminal state; @@ -963,7 +963,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { logw("Delivery state of " + r + " to " + receiver + " via " + app + " changed from " + deliveryStateToString(oldDeliveryState) + " to " - + deliveryStateToString(newDeliveryState) + " because " + reason); + + deliveryStateToString(newDeliveryState)); } r.terminalCount++; @@ -1053,8 +1053,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { * of it matching a predicate. */ private final BroadcastConsumer mBroadcastConsumerSkip = (r, i) -> { - setDeliveryState(null, null, r, i, r.receivers.get(i), BroadcastRecord.DELIVERY_SKIPPED, - "mBroadcastConsumerSkip"); + setDeliveryState(null, null, r, i, r.receivers.get(i), BroadcastRecord.DELIVERY_SKIPPED); }; /** @@ -1062,8 +1061,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { * cancelled, usually as a result of it matching a predicate. */ private final BroadcastConsumer mBroadcastConsumerSkipAndCanceled = (r, i) -> { - setDeliveryState(null, null, r, i, r.receivers.get(i), BroadcastRecord.DELIVERY_SKIPPED, - "mBroadcastConsumerSkipAndCanceled"); + setDeliveryState(null, null, r, i, r.receivers.get(i), BroadcastRecord.DELIVERY_SKIPPED); r.resultCode = Activity.RESULT_CANCELED; r.resultData = null; r.resultExtras = null; |