Loading core/java/android/app/BroadcastOptions.java +22 −0 Original line number Diff line number Diff line Loading @@ -528,6 +528,28 @@ public class BroadcastOptions extends ComponentOptions { return mIsAlarmBroadcast; } /** * Did this broadcast originate from a push message from the server? * * @return true if this broadcast is a push message, false otherwise. * @hide */ public boolean isPushMessagingBroadcast() { return mTemporaryAppAllowlistReasonCode == PowerExemptionManager.REASON_PUSH_MESSAGING; } /** * Did this broadcast originate from a push message from the server which was over the allowed * quota? * * @return true if this broadcast is a push message over quota, false otherwise. * @hide */ public boolean isPushMessagingOverQuotaBroadcast() { return mTemporaryAppAllowlistReasonCode == PowerExemptionManager.REASON_PUSH_MESSAGING_OVER_QUOTA; } /** {@hide} */ public long getRequireCompatChangeId() { return mRequireCompatChangeId; Loading services/core/java/com/android/server/am/BroadcastQueue.java +11 −2 Original line number Diff line number Diff line Loading @@ -1969,8 +1969,7 @@ public final class BroadcastQueue { info.activityInfo.applicationInfo, true, r.intent.getFlags() | Intent.FLAG_FROM_BACKGROUND, new HostingRecord(HostingRecord.HOSTING_TYPE_BROADCAST, r.curComponent, r.intent.getAction(), (r.alarm ? HostingRecord.TRIGGER_TYPE_ALARM : HostingRecord.TRIGGER_TYPE_UNKNOWN)), r.intent.getAction(), getHostingRecordTriggerType(r)), isActivityCapable ? ZYGOTE_POLICY_FLAG_LATENCY_SENSITIVE : ZYGOTE_POLICY_FLAG_EMPTY, (r.intent.getFlags() & Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0, false); if (r.curApp == null) { Loading @@ -1993,6 +1992,16 @@ public final class BroadcastQueue { mPendingBroadcastRecvIndex = recIdx; } private String getHostingRecordTriggerType(BroadcastRecord r) { if (r.alarm) { return HostingRecord.TRIGGER_TYPE_ALARM; } else if (r.pushMessage) { return HostingRecord.TRIGGER_TYPE_PUSH_MESSAGE; } else if (r.pushMessageOverQuota) { return HostingRecord.TRIGGER_TYPE_PUSH_MESSAGE_OVER_QUOTA; } return HostingRecord.TRIGGER_TYPE_UNKNOWN; } @Nullable private String getTargetPackage(BroadcastRecord r) { Loading services/core/java/com/android/server/am/BroadcastRecord.java +6 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,8 @@ final class BroadcastRecord extends Binder { final boolean ordered; // serialize the send to receivers? final boolean sticky; // originated from existing sticky data? final boolean alarm; // originated from an alarm triggering? final boolean pushMessage; // originated from a push message? final boolean pushMessageOverQuota; // originated from a push message which was over quota? final boolean initialSticky; // initial broadcast from register to sticky? final int userId; // user id this broadcast was for final String resolvedType; // the resolved data type Loading Loading @@ -320,6 +322,8 @@ final class BroadcastRecord extends Binder { mBackgroundActivityStartsToken = backgroundActivityStartsToken; this.timeoutExempt = timeoutExempt; alarm = options != null && options.isAlarmBroadcast(); pushMessage = options != null && options.isPushMessagingBroadcast(); pushMessageOverQuota = options != null && options.isPushMessagingOverQuotaBroadcast(); this.filterExtrasForReceiver = filterExtrasForReceiver; } Loading Loading @@ -374,6 +378,8 @@ final class BroadcastRecord extends Binder { mBackgroundActivityStartsToken = from.mBackgroundActivityStartsToken; timeoutExempt = from.timeoutExempt; alarm = from.alarm; pushMessage = from.pushMessage; pushMessageOverQuota = from.pushMessageOverQuota; filterExtrasForReceiver = from.filterExtrasForReceiver; } Loading services/core/java/com/android/server/am/HostingRecord.java +8 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__HO import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__HOSTING_TYPE_ID__HOSTING_TYPE_SERVICE; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__HOSTING_TYPE_ID__HOSTING_TYPE_SYSTEM; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__HOSTING_TYPE_ID__HOSTING_TYPE_TOP_ACTIVITY; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_PUSH_MESSAGE; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_PUSH_MESSAGE_OVER_QUOTA; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_TYPE_ALARM; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_TYPE_UNKNOWN; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TYPE__UNKNOWN; Loading Loading @@ -93,6 +95,8 @@ public final class HostingRecord { public static final String TRIGGER_TYPE_UNKNOWN = "unknown"; public static final String TRIGGER_TYPE_ALARM = "alarm"; public static final String TRIGGER_TYPE_PUSH_MESSAGE = "push_message"; public static final String TRIGGER_TYPE_PUSH_MESSAGE_OVER_QUOTA = "push_message_over_quota"; @NonNull private final String mHostingType; private final String mHostingName; Loading Loading @@ -308,6 +312,10 @@ public final class HostingRecord { switch(triggerType) { case TRIGGER_TYPE_ALARM: return PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_TYPE_ALARM; case TRIGGER_TYPE_PUSH_MESSAGE: return PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_PUSH_MESSAGE; case TRIGGER_TYPE_PUSH_MESSAGE_OVER_QUOTA: return PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_PUSH_MESSAGE_OVER_QUOTA; default: return PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_TYPE_UNKNOWN; } Loading Loading
core/java/android/app/BroadcastOptions.java +22 −0 Original line number Diff line number Diff line Loading @@ -528,6 +528,28 @@ public class BroadcastOptions extends ComponentOptions { return mIsAlarmBroadcast; } /** * Did this broadcast originate from a push message from the server? * * @return true if this broadcast is a push message, false otherwise. * @hide */ public boolean isPushMessagingBroadcast() { return mTemporaryAppAllowlistReasonCode == PowerExemptionManager.REASON_PUSH_MESSAGING; } /** * Did this broadcast originate from a push message from the server which was over the allowed * quota? * * @return true if this broadcast is a push message over quota, false otherwise. * @hide */ public boolean isPushMessagingOverQuotaBroadcast() { return mTemporaryAppAllowlistReasonCode == PowerExemptionManager.REASON_PUSH_MESSAGING_OVER_QUOTA; } /** {@hide} */ public long getRequireCompatChangeId() { return mRequireCompatChangeId; Loading
services/core/java/com/android/server/am/BroadcastQueue.java +11 −2 Original line number Diff line number Diff line Loading @@ -1969,8 +1969,7 @@ public final class BroadcastQueue { info.activityInfo.applicationInfo, true, r.intent.getFlags() | Intent.FLAG_FROM_BACKGROUND, new HostingRecord(HostingRecord.HOSTING_TYPE_BROADCAST, r.curComponent, r.intent.getAction(), (r.alarm ? HostingRecord.TRIGGER_TYPE_ALARM : HostingRecord.TRIGGER_TYPE_UNKNOWN)), r.intent.getAction(), getHostingRecordTriggerType(r)), isActivityCapable ? ZYGOTE_POLICY_FLAG_LATENCY_SENSITIVE : ZYGOTE_POLICY_FLAG_EMPTY, (r.intent.getFlags() & Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0, false); if (r.curApp == null) { Loading @@ -1993,6 +1992,16 @@ public final class BroadcastQueue { mPendingBroadcastRecvIndex = recIdx; } private String getHostingRecordTriggerType(BroadcastRecord r) { if (r.alarm) { return HostingRecord.TRIGGER_TYPE_ALARM; } else if (r.pushMessage) { return HostingRecord.TRIGGER_TYPE_PUSH_MESSAGE; } else if (r.pushMessageOverQuota) { return HostingRecord.TRIGGER_TYPE_PUSH_MESSAGE_OVER_QUOTA; } return HostingRecord.TRIGGER_TYPE_UNKNOWN; } @Nullable private String getTargetPackage(BroadcastRecord r) { Loading
services/core/java/com/android/server/am/BroadcastRecord.java +6 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,8 @@ final class BroadcastRecord extends Binder { final boolean ordered; // serialize the send to receivers? final boolean sticky; // originated from existing sticky data? final boolean alarm; // originated from an alarm triggering? final boolean pushMessage; // originated from a push message? final boolean pushMessageOverQuota; // originated from a push message which was over quota? final boolean initialSticky; // initial broadcast from register to sticky? final int userId; // user id this broadcast was for final String resolvedType; // the resolved data type Loading Loading @@ -320,6 +322,8 @@ final class BroadcastRecord extends Binder { mBackgroundActivityStartsToken = backgroundActivityStartsToken; this.timeoutExempt = timeoutExempt; alarm = options != null && options.isAlarmBroadcast(); pushMessage = options != null && options.isPushMessagingBroadcast(); pushMessageOverQuota = options != null && options.isPushMessagingOverQuotaBroadcast(); this.filterExtrasForReceiver = filterExtrasForReceiver; } Loading Loading @@ -374,6 +378,8 @@ final class BroadcastRecord extends Binder { mBackgroundActivityStartsToken = from.mBackgroundActivityStartsToken; timeoutExempt = from.timeoutExempt; alarm = from.alarm; pushMessage = from.pushMessage; pushMessageOverQuota = from.pushMessageOverQuota; filterExtrasForReceiver = from.filterExtrasForReceiver; } Loading
services/core/java/com/android/server/am/HostingRecord.java +8 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__HO import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__HOSTING_TYPE_ID__HOSTING_TYPE_SERVICE; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__HOSTING_TYPE_ID__HOSTING_TYPE_SYSTEM; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__HOSTING_TYPE_ID__HOSTING_TYPE_TOP_ACTIVITY; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_PUSH_MESSAGE; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_PUSH_MESSAGE_OVER_QUOTA; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_TYPE_ALARM; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_TYPE_UNKNOWN; import static com.android.internal.util.FrameworkStatsLog.PROCESS_START_TIME__TYPE__UNKNOWN; Loading Loading @@ -93,6 +95,8 @@ public final class HostingRecord { public static final String TRIGGER_TYPE_UNKNOWN = "unknown"; public static final String TRIGGER_TYPE_ALARM = "alarm"; public static final String TRIGGER_TYPE_PUSH_MESSAGE = "push_message"; public static final String TRIGGER_TYPE_PUSH_MESSAGE_OVER_QUOTA = "push_message_over_quota"; @NonNull private final String mHostingType; private final String mHostingName; Loading Loading @@ -308,6 +312,10 @@ public final class HostingRecord { switch(triggerType) { case TRIGGER_TYPE_ALARM: return PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_TYPE_ALARM; case TRIGGER_TYPE_PUSH_MESSAGE: return PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_PUSH_MESSAGE; case TRIGGER_TYPE_PUSH_MESSAGE_OVER_QUOTA: return PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_PUSH_MESSAGE_OVER_QUOTA; default: return PROCESS_START_TIME__TRIGGER_TYPE__TRIGGER_TYPE_UNKNOWN; } Loading