Loading core/java/android/os/Process.java +14 −0 Original line number Diff line number Diff line Loading @@ -688,6 +688,20 @@ public class Process { } } /** * Tries to establish a connection to the zygote that handles a given {@code abi}. Might block and retry if the * zygote is unresponsive. This method is a no-op if a connection is already open. * * @hide */ public static void establishZygoteConnectionForAbi(String abi) { try { openZygoteSocketIfNeeded(abi); } catch (ZygoteStartFailedEx ex) { throw new RuntimeException("Unable to connect to zygote for abi: " + abi, ex); } } /** * Tries to open socket to Zygote process if not already open. If * already open, does nothing. May block and retry. Loading services/core/java/com/android/server/am/ActivityManagerService.java +19 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ import com.android.server.SystemServiceManager; import com.android.server.Watchdog; import com.android.server.am.ActivityStack.ActivityState; import com.android.server.firewall.IntentFirewall; import com.android.server.pm.Installer; import com.android.server.pm.UserManagerService; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.wm.AppTransition; Loading Loading @@ -372,6 +373,8 @@ public final class ActivityManagerService extends ActivityManagerNative /** All system services */ SystemServiceManager mSystemServiceManager; private Installer mInstaller; /** Run all ActivityStacks through this */ ActivityStackSupervisor mStackSupervisor; Loading Loading @@ -2169,6 +2172,10 @@ public final class ActivityManagerService extends ActivityManagerNative mSystemServiceManager = mgr; } public void setInstaller(Installer installer) { mInstaller = installer; } private void start() { Process.removeAllProcessGroups(); mProcessCpuThread.start(); Loading Loading @@ -6147,6 +6154,18 @@ public final class ActivityManagerService extends ActivityManagerNative mCallFinishBooting = false; } ArraySet<String> completedIsas = new ArraySet<String>(); for (String abi : Build.SUPPORTED_ABIS) { Process.establishZygoteConnectionForAbi(abi); final String instructionSet = VMRuntime.getInstructionSet(abi); if (!completedIsas.contains(instructionSet)) { if (mInstaller.markBootComplete(VMRuntime.getInstructionSet(abi)) != 0) { Slog.e(TAG, "Unable to mark boot complete for abi: " + abi); } completedIsas.add(instructionSet); } } // Register receivers to handle package update events mPackageMonitor.register(mContext, Looper.getMainLooper(), UserHandle.ALL, false); Loading services/core/java/com/android/server/pm/Installer.java +12 −0 Original line number Diff line number Diff line Loading @@ -216,6 +216,18 @@ public final class Installer extends SystemService { return mInstaller.execute(builder.toString()); } public int markBootComplete(String instructionSet) { if (!isValidInstructionSet(instructionSet)) { Slog.e(TAG, "Invalid instruction set: " + instructionSet); return -1; } StringBuilder builder = new StringBuilder("markbootcomplete"); builder.append(' '); builder.append(instructionSet); return mInstaller.execute(builder.toString()); } public boolean ping() { if (mInstaller.execute("ping") < 0) { return false; Loading services/java/com/android/server/SystemServer.java +3 −3 Original line number Diff line number Diff line Loading @@ -147,7 +147,6 @@ public final class SystemServer { private SystemServiceManager mSystemServiceManager; // TODO: remove all of these references by improving dependency resolution and boot phases private Installer mInstaller; private PowerManagerService mPowerManagerService; private ActivityManagerService mActivityManagerService; private DisplayManagerService mDisplayManagerService; Loading Loading @@ -309,12 +308,13 @@ public final class SystemServer { // Wait for installd to finish starting up so that it has a chance to // create critical directories such as /data/user with the appropriate // permissions. We need this to complete before we initialize other services. mInstaller = mSystemServiceManager.startService(Installer.class); Installer installer = mSystemServiceManager.startService(Installer.class); // Activity manager runs the show. mActivityManagerService = mSystemServiceManager.startService( ActivityManagerService.Lifecycle.class).getService(); mActivityManagerService.setSystemServiceManager(mSystemServiceManager); mActivityManagerService.setInstaller(installer); // Power manager needs to be started early because other services need it. // Native daemons may be watching for it to be registered so it must be ready Loading Loading @@ -345,7 +345,7 @@ public final class SystemServer { // Start the package manager. Slog.i(TAG, "Package Manager"); mPackageManagerService = PackageManagerService.main(mSystemContext, mInstaller, mPackageManagerService = PackageManagerService.main(mSystemContext, installer, mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore); mFirstBoot = mPackageManagerService.isFirstBoot(); mPackageManager = mSystemContext.getPackageManager(); Loading Loading
core/java/android/os/Process.java +14 −0 Original line number Diff line number Diff line Loading @@ -688,6 +688,20 @@ public class Process { } } /** * Tries to establish a connection to the zygote that handles a given {@code abi}. Might block and retry if the * zygote is unresponsive. This method is a no-op if a connection is already open. * * @hide */ public static void establishZygoteConnectionForAbi(String abi) { try { openZygoteSocketIfNeeded(abi); } catch (ZygoteStartFailedEx ex) { throw new RuntimeException("Unable to connect to zygote for abi: " + abi, ex); } } /** * Tries to open socket to Zygote process if not already open. If * already open, does nothing. May block and retry. Loading
services/core/java/com/android/server/am/ActivityManagerService.java +19 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ import com.android.server.SystemServiceManager; import com.android.server.Watchdog; import com.android.server.am.ActivityStack.ActivityState; import com.android.server.firewall.IntentFirewall; import com.android.server.pm.Installer; import com.android.server.pm.UserManagerService; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.wm.AppTransition; Loading Loading @@ -372,6 +373,8 @@ public final class ActivityManagerService extends ActivityManagerNative /** All system services */ SystemServiceManager mSystemServiceManager; private Installer mInstaller; /** Run all ActivityStacks through this */ ActivityStackSupervisor mStackSupervisor; Loading Loading @@ -2169,6 +2172,10 @@ public final class ActivityManagerService extends ActivityManagerNative mSystemServiceManager = mgr; } public void setInstaller(Installer installer) { mInstaller = installer; } private void start() { Process.removeAllProcessGroups(); mProcessCpuThread.start(); Loading Loading @@ -6147,6 +6154,18 @@ public final class ActivityManagerService extends ActivityManagerNative mCallFinishBooting = false; } ArraySet<String> completedIsas = new ArraySet<String>(); for (String abi : Build.SUPPORTED_ABIS) { Process.establishZygoteConnectionForAbi(abi); final String instructionSet = VMRuntime.getInstructionSet(abi); if (!completedIsas.contains(instructionSet)) { if (mInstaller.markBootComplete(VMRuntime.getInstructionSet(abi)) != 0) { Slog.e(TAG, "Unable to mark boot complete for abi: " + abi); } completedIsas.add(instructionSet); } } // Register receivers to handle package update events mPackageMonitor.register(mContext, Looper.getMainLooper(), UserHandle.ALL, false); Loading
services/core/java/com/android/server/pm/Installer.java +12 −0 Original line number Diff line number Diff line Loading @@ -216,6 +216,18 @@ public final class Installer extends SystemService { return mInstaller.execute(builder.toString()); } public int markBootComplete(String instructionSet) { if (!isValidInstructionSet(instructionSet)) { Slog.e(TAG, "Invalid instruction set: " + instructionSet); return -1; } StringBuilder builder = new StringBuilder("markbootcomplete"); builder.append(' '); builder.append(instructionSet); return mInstaller.execute(builder.toString()); } public boolean ping() { if (mInstaller.execute("ping") < 0) { return false; Loading
services/java/com/android/server/SystemServer.java +3 −3 Original line number Diff line number Diff line Loading @@ -147,7 +147,6 @@ public final class SystemServer { private SystemServiceManager mSystemServiceManager; // TODO: remove all of these references by improving dependency resolution and boot phases private Installer mInstaller; private PowerManagerService mPowerManagerService; private ActivityManagerService mActivityManagerService; private DisplayManagerService mDisplayManagerService; Loading Loading @@ -309,12 +308,13 @@ public final class SystemServer { // Wait for installd to finish starting up so that it has a chance to // create critical directories such as /data/user with the appropriate // permissions. We need this to complete before we initialize other services. mInstaller = mSystemServiceManager.startService(Installer.class); Installer installer = mSystemServiceManager.startService(Installer.class); // Activity manager runs the show. mActivityManagerService = mSystemServiceManager.startService( ActivityManagerService.Lifecycle.class).getService(); mActivityManagerService.setSystemServiceManager(mSystemServiceManager); mActivityManagerService.setInstaller(installer); // Power manager needs to be started early because other services need it. // Native daemons may be watching for it to be registered so it must be ready Loading Loading @@ -345,7 +345,7 @@ public final class SystemServer { // Start the package manager. Slog.i(TAG, "Package Manager"); mPackageManagerService = PackageManagerService.main(mSystemContext, mInstaller, mPackageManagerService = PackageManagerService.main(mSystemContext, installer, mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore); mFirstBoot = mPackageManagerService.isFirstBoot(); mPackageManager = mSystemContext.getPackageManager(); Loading