diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index a1305da0a5024..ce21db3356157 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -152,6 +152,8 @@ import android.os.Vibrator; import android.os.health.SystemHealthManager; import android.os.image.DynamicSystemManager; import android.os.image.IDynamicSystemService; +import android.os.incremental.IIncrementalManagerNative; +import android.os.incremental.IncrementalManager; import android.os.storage.StorageManager; import android.permission.PermissionControllerManager; import android.permission.PermissionManager; @@ -1225,6 +1227,20 @@ public final class SystemServiceRegistry { Context.DATA_LOADER_MANAGER_SERVICE); return new DataLoaderManager(IDataLoaderManager.Stub.asInterface(b)); }}); + //TODO(b/136132412): refactor this: 1) merge IIncrementalManager.aidl and + //IIncrementalManagerNative.aidl, 2) implement the binder interface in + //IncrementalManagerService.java, 3) use JNI to call native functions + registerService(Context.INCREMENTAL_SERVICE, IncrementalManager.class, + new CachedServiceFetcher() { + @Override + public IncrementalManager createService(ContextImpl ctx) { + IBinder b = ServiceManager.getService(Context.INCREMENTAL_SERVICE); + if (b == null) { + return null; + } + return new IncrementalManager( + IIncrementalManagerNative.Stub.asInterface(b)); + }}); //CHECKSTYLE:ON IndentationCheck sInitializing = true; diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index f3ac7d6d3cc98..1891fc71c5973 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -105,6 +105,7 @@ import com.android.server.emergency.EmergencyAffordanceService; import com.android.server.gpu.GpuService; import com.android.server.hdmi.HdmiControlService; import com.android.server.incident.IncidentCompanionService; +import com.android.server.incremental.IncrementalManagerService; import com.android.server.input.InputManagerService; import com.android.server.inputmethod.InputMethodManagerService; import com.android.server.inputmethod.InputMethodSystemProperty; @@ -323,6 +324,7 @@ public final class SystemServer { private ContentResolver mContentResolver; private EntropyMixer mEntropyMixer; private DataLoaderManagerService mDataLoaderManagerService; + private IncrementalManagerService mIncrementalManagerService; private boolean mOnlyCore; private boolean mFirstBoot; @@ -705,6 +707,11 @@ public final class SystemServer { DataLoaderManagerService.class); t.traceEnd(); + // Incremental service needs to be started before package manager + t.traceBegin("StartIncrementalManagerService"); + mIncrementalManagerService = IncrementalManagerService.start(mSystemContext); + t.traceEnd(); + // 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 // to handle incoming binder calls immediately (including being able to verify @@ -2061,6 +2068,12 @@ public final class SystemServer { mPackageManagerService.systemReady(); t.traceEnd(); + if (mIncrementalManagerService != null) { + t.traceBegin("MakeIncrementalManagerServiceReady"); + mIncrementalManagerService.systemReady(); + t.traceEnd(); + } + t.traceBegin("MakeDisplayManagerServiceReady"); try { // TODO: use boot phase and communicate these flags some other way