diff options
author | 2024-04-24 20:31:15 +0000 | |
---|---|---|
committer | 2024-04-24 20:31:15 +0000 | |
commit | 69b03fa374ab2160bcb3348a339bbf7711f10e15 (patch) | |
tree | d6d8312139ae15c0cbaf0b3eccf486f1d5fd20e6 | |
parent | 00f1fa612473f5fde7a106bec0e730e7e50b4fbd (diff) | |
parent | 8e7ebafd839507c2187eafb862067eb5c3373d30 (diff) |
Merge "Add tracing for receiver registration and un-registration." into main
-rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 76 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/flags.aconfig | 11 |
2 files changed, 87 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 628626365e70..cf09cfbb3072 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -14606,6 +14606,53 @@ public class ActivityManagerService extends IActivityManager.Stub public Intent registerReceiverWithFeature(IApplicationThread caller, String callerPackage, String callerFeatureId, String receiverId, IIntentReceiver receiver, IntentFilter filter, String permission, int userId, int flags) { + traceRegistrationBegin(receiverId, receiver, filter, userId); + try { + return registerReceiverWithFeatureTraced(caller, callerPackage, callerFeatureId, + receiverId, receiver, filter, permission, userId, flags); + } finally { + traceRegistrationEnd(); + } + } + + private static void traceRegistrationBegin(String receiverId, IIntentReceiver receiver, + IntentFilter filter, int userId) { + if (!Flags.traceReceiverRegistration()) { + return; + } + if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) { + final StringBuilder sb = new StringBuilder("registerReceiver: "); + sb.append(Binder.getCallingUid()); sb.append('/'); + sb.append(receiverId == null ? "null" : receiverId); sb.append('/'); + final int actionsCount = filter.countActions(); + if (actionsCount > 0) { + for (int i = 0; i < actionsCount; ++i) { + sb.append(filter.getAction(i)); + if (i != actionsCount - 1) sb.append(','); + } + } else { + sb.append("null"); + } + sb.append('/'); + sb.append('u'); sb.append(userId); sb.append('/'); + sb.append(receiver == null ? "null" : receiver.asBinder()); + Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, sb.toString()); + } + } + + private static void traceRegistrationEnd() { + if (!Flags.traceReceiverRegistration()) { + return; + } + if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) { + Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); + } + } + + private Intent registerReceiverWithFeatureTraced(IApplicationThread caller, + String callerPackage, String callerFeatureId, String receiverId, + IIntentReceiver receiver, IntentFilter filter, String permission, + int userId, int flags) { enforceNotIsolatedCaller("registerReceiver"); ArrayList<StickyBroadcast> stickyBroadcasts = null; ProcessRecord callerApp = null; @@ -14921,6 +14968,35 @@ public class ActivityManagerService extends IActivityManager.Stub } public void unregisterReceiver(IIntentReceiver receiver) { + traceUnregistrationBegin(receiver); + try { + unregisterReceiverTraced(receiver); + } finally { + traceUnregistrationEnd(); + } + } + + private static void traceUnregistrationBegin(IIntentReceiver receiver) { + if (!Flags.traceReceiverRegistration()) { + return; + } + if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) { + Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, + TextUtils.formatSimple("unregisterReceiver: %d/%s", Binder.getCallingUid(), + receiver == null ? "null" : receiver.asBinder())); + } + } + + private static void traceUnregistrationEnd() { + if (!Flags.traceReceiverRegistration()) { + return; + } + if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) { + Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); + } + } + + private void unregisterReceiverTraced(IIntentReceiver receiver) { if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST, "Unregister receiver: " + receiver); final long origId = Binder.clearCallingIdentity(); diff --git a/services/core/java/com/android/server/am/flags.aconfig b/services/core/java/com/android/server/am/flags.aconfig index e1ccf4d2a362..19be5f9a2623 100644 --- a/services/core/java/com/android/server/am/flags.aconfig +++ b/services/core/java/com/android/server/am/flags.aconfig @@ -95,3 +95,14 @@ flag { bug: "315468967" is_fixed_read_only: true } + +flag { + namespace: "backstage_power" + name: "trace_receiver_registration" + description: "Add tracing for broadcast receiver registration and un-registration" + bug: "336385821" + is_fixed_read_only: true + metadata { + purpose: PURPOSE_BUGFIX + } +} |