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

Commit 980af3e0 authored by Howard Chen's avatar Howard Chen Committed by android-build-merger
Browse files

Merge "Support starting gsid lazily" am: 41083886 am: c48af591

am: 49311a22

Change-Id: I1499c37a9687ee1f1535e4e2572e6577e0a42e4d
parents 4cb81efa 49311a22
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.IBinder.DeathRecipient;
import android.os.IDynamicAndroidService;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
import android.util.Slog;

/**
@@ -34,6 +35,7 @@ import android.util.Slog;
public class DynamicAndroidService extends IDynamicAndroidService.Stub implements DeathRecipient {
    private static final String TAG = "DynamicAndroidService";
    private static final String NO_SERVICE_ERROR = "no gsiservice";
    private static final int GSID_ROUGH_TIMEOUT_MS = 8192;

    private Context mContext;
    private volatile IGsiService mGsiService;
@@ -66,6 +68,17 @@ public class DynamicAndroidService extends IDynamicAndroidService.Stub implement

    private IGsiService getGsiService() throws RemoteException {
        checkPermission();
        if (!"running".equals(SystemProperties.get("init.svc.gsid"))) {
            SystemProperties.set("ctl.start", "gsid");
        }
        for (int sleepMs = 64; sleepMs <= (GSID_ROUGH_TIMEOUT_MS << 1); sleepMs <<= 1) {
            try {
                Thread.sleep(sleepMs);
            } catch (InterruptedException e) {
                Slog.e(TAG, "Interrupted when waiting for GSID");
                break;
            }
            if ("running".equals(SystemProperties.get("init.svc.gsid"))) {
                synchronized (this) {
                    if (mGsiService == null) {
                        mGsiService = connect(this);
@@ -73,6 +86,10 @@ public class DynamicAndroidService extends IDynamicAndroidService.Stub implement
                    return mGsiService;
                }
            }
        }
        Slog.e(TAG, "Unable to start gsid");
        return null;
    }

    private void checkPermission() {
        if (mContext.checkCallingOrSelfPermission(