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);          }      }  |