Loading services/core/java/com/android/server/am/BroadcastDispatcher.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -725,6 +725,14 @@ public class BroadcastDispatcher { final Dumper dumper = new Dumper(pw, queueName, dumpPackage, sdf); final Dumper dumper = new Dumper(pw, queueName, dumpPackage, sdf); boolean printed = false; boolean printed = false; dumper.setHeading("Currently in flight"); dumper.setLabel("In-Flight Ordered Broadcast"); if (mCurrentBroadcast != null) { dumper.dump(mCurrentBroadcast); } else { pw.println(" (null)"); } dumper.setHeading("Active ordered broadcasts"); dumper.setHeading("Active ordered broadcasts"); dumper.setLabel("Active Ordered Broadcast"); dumper.setLabel("Active Ordered Broadcast"); for (Deferrals d : mAlarmBroadcasts) { for (Deferrals d : mAlarmBroadcasts) { Loading services/core/java/com/android/server/am/UserController.java +21 −13 Original line number Original line Diff line number Diff line Loading @@ -559,7 +559,7 @@ class UserController implements Handler.Callback { // Spin up app widgets prior to boot-complete, so they can be ready promptly // Spin up app widgets prior to boot-complete, so they can be ready promptly mInjector.startUserWidgets(userId); mInjector.startUserWidgets(userId); Slog.i(TAG, "Sending BOOT_COMPLETE user #" + userId); Slog.i(TAG, "Posting BOOT_COMPLETED user #" + userId); // Do not report secondary users, runtime restarts or first boot/upgrade // Do not report secondary users, runtime restarts or first boot/upgrade if (userId == UserHandle.USER_SYSTEM if (userId == UserHandle.USER_SYSTEM && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) { && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) { Loading @@ -572,18 +572,26 @@ class UserController implements Handler.Callback { bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_OFFLOAD); | Intent.FLAG_RECEIVER_OFFLOAD); mInjector.broadcastIntent(bootIntent, null, new IIntentReceiver.Stub() { // Widget broadcasts are outbound via FgThread, so to guarantee sequencing // we also send the boot_completed broadcast from that thread. final int callingUid = Binder.getCallingUid(); final int callingPid = Binder.getCallingPid(); FgThread.getHandler().post(() -> { mInjector.broadcastIntent(bootIntent, null, new IIntentReceiver.Stub() { @Override @Override public void performReceive(Intent intent, int resultCode, String data, public void performReceive(Intent intent, int resultCode, String data, Bundle extras, boolean ordered, boolean sticky, int sendingUser) Bundle extras, boolean ordered, boolean sticky, int sendingUser) throws RemoteException { throws RemoteException { Slog.i(UserController.TAG, "Finished processing BOOT_COMPLETED for u" + userId); Slog.i(UserController.TAG, "Finished processing BOOT_COMPLETED for u" + userId); mBootCompleted = true; mBootCompleted = true; } } }, 0, null, null, }, 0, null, null, new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED}, new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED}, AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, Binder.getCallingUid(), Binder.getCallingPid(), userId); callingUid, callingPid, userId); }); } } int restartUser(final int userId, final boolean foreground) { int restartUser(final int userId, final boolean foreground) { Loading Loading
services/core/java/com/android/server/am/BroadcastDispatcher.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -725,6 +725,14 @@ public class BroadcastDispatcher { final Dumper dumper = new Dumper(pw, queueName, dumpPackage, sdf); final Dumper dumper = new Dumper(pw, queueName, dumpPackage, sdf); boolean printed = false; boolean printed = false; dumper.setHeading("Currently in flight"); dumper.setLabel("In-Flight Ordered Broadcast"); if (mCurrentBroadcast != null) { dumper.dump(mCurrentBroadcast); } else { pw.println(" (null)"); } dumper.setHeading("Active ordered broadcasts"); dumper.setHeading("Active ordered broadcasts"); dumper.setLabel("Active Ordered Broadcast"); dumper.setLabel("Active Ordered Broadcast"); for (Deferrals d : mAlarmBroadcasts) { for (Deferrals d : mAlarmBroadcasts) { Loading
services/core/java/com/android/server/am/UserController.java +21 −13 Original line number Original line Diff line number Diff line Loading @@ -559,7 +559,7 @@ class UserController implements Handler.Callback { // Spin up app widgets prior to boot-complete, so they can be ready promptly // Spin up app widgets prior to boot-complete, so they can be ready promptly mInjector.startUserWidgets(userId); mInjector.startUserWidgets(userId); Slog.i(TAG, "Sending BOOT_COMPLETE user #" + userId); Slog.i(TAG, "Posting BOOT_COMPLETED user #" + userId); // Do not report secondary users, runtime restarts or first boot/upgrade // Do not report secondary users, runtime restarts or first boot/upgrade if (userId == UserHandle.USER_SYSTEM if (userId == UserHandle.USER_SYSTEM && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) { && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) { Loading @@ -572,18 +572,26 @@ class UserController implements Handler.Callback { bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_OFFLOAD); | Intent.FLAG_RECEIVER_OFFLOAD); mInjector.broadcastIntent(bootIntent, null, new IIntentReceiver.Stub() { // Widget broadcasts are outbound via FgThread, so to guarantee sequencing // we also send the boot_completed broadcast from that thread. final int callingUid = Binder.getCallingUid(); final int callingPid = Binder.getCallingPid(); FgThread.getHandler().post(() -> { mInjector.broadcastIntent(bootIntent, null, new IIntentReceiver.Stub() { @Override @Override public void performReceive(Intent intent, int resultCode, String data, public void performReceive(Intent intent, int resultCode, String data, Bundle extras, boolean ordered, boolean sticky, int sendingUser) Bundle extras, boolean ordered, boolean sticky, int sendingUser) throws RemoteException { throws RemoteException { Slog.i(UserController.TAG, "Finished processing BOOT_COMPLETED for u" + userId); Slog.i(UserController.TAG, "Finished processing BOOT_COMPLETED for u" + userId); mBootCompleted = true; mBootCompleted = true; } } }, 0, null, null, }, 0, null, null, new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED}, new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED}, AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, Binder.getCallingUid(), Binder.getCallingPid(), userId); callingUid, callingPid, userId); }); } } int restartUser(final int userId, final boolean foreground) { int restartUser(final int userId, final boolean foreground) { Loading