diff options
| -rw-r--r-- | services/core/java/com/android/server/am/BroadcastQueueModernImpl.java | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java index c3839a99ba52..6793876942f6 100644 --- a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +++ b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java @@ -599,6 +599,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { // If nothing to dispatch, send any pending result immediately if (r.receivers.isEmpty()) { scheduleResultTo(r); + notifyFinishBroadcast(r); } traceEnd(cookie); @@ -1402,30 +1403,34 @@ class BroadcastQueueModernImpl extends BroadcastQueue { final boolean recordFinished = (r.terminalCount == r.receivers.size()); if (recordFinished) { - mService.notifyBroadcastFinishedLocked(r); - mHistory.addBroadcastToHistoryLocked(r); - - r.finishTime = SystemClock.uptimeMillis(); - r.nextReceiver = r.receivers.size(); - BroadcastQueueImpl.logBootCompletedBroadcastCompletionLatencyIfPossible(r); + notifyFinishBroadcast(r); + } + } - if (r.intent.getComponent() == null && r.intent.getPackage() == null - && (r.intent.getFlags() & Intent.FLAG_RECEIVER_REGISTERED_ONLY) == 0) { - int manifestCount = 0; - int manifestSkipCount = 0; - for (int i = 0; i < r.receivers.size(); i++) { - if (r.receivers.get(i) instanceof ResolveInfo) { - manifestCount++; - if (r.delivery[i] == BroadcastRecord.DELIVERY_SKIPPED) { - manifestSkipCount++; - } + private void notifyFinishBroadcast(@NonNull BroadcastRecord r) { + mService.notifyBroadcastFinishedLocked(r); + mHistory.addBroadcastToHistoryLocked(r); + + r.finishTime = SystemClock.uptimeMillis(); + r.nextReceiver = r.receivers.size(); + BroadcastQueueImpl.logBootCompletedBroadcastCompletionLatencyIfPossible(r); + + if (r.intent.getComponent() == null && r.intent.getPackage() == null + && (r.intent.getFlags() & Intent.FLAG_RECEIVER_REGISTERED_ONLY) == 0) { + int manifestCount = 0; + int manifestSkipCount = 0; + for (int i = 0; i < r.receivers.size(); i++) { + if (r.receivers.get(i) instanceof ResolveInfo) { + manifestCount++; + if (r.delivery[i] == BroadcastRecord.DELIVERY_SKIPPED) { + manifestSkipCount++; } } - - final long dispatchTime = SystemClock.uptimeMillis() - r.enqueueTime; - mService.addBroadcastStatLocked(r.intent.getAction(), r.callerPackage, - manifestCount, manifestSkipCount, dispatchTime); } + + final long dispatchTime = SystemClock.uptimeMillis() - r.enqueueTime; + mService.addBroadcastStatLocked(r.intent.getAction(), r.callerPackage, + manifestCount, manifestSkipCount, dispatchTime); } } |