Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae601bcb authored by Narayan Kamath's avatar Narayan Kamath Committed by Android Git Automerger
Browse files

am 3a35bf3f: am 72f9838c: am 222722ee: Merge "Tell installd when boot completes." into lmp-mr1-dev

* commit '3a35bf3f':
  Tell installd when boot completes.
parents 7bfd6bd3 3a35bf3f
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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.
+19 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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();
@@ -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);
+12 −0
Original line number Diff line number Diff line
@@ -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;
+3 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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();