diff options
Diffstat (limited to 'services/java')
-rw-r--r-- | services/java/com/android/server/SystemServer.java | 783 |
1 files changed, 409 insertions, 374 deletions
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 60f201ff4aac..75bb5e4f8a6b 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -26,6 +26,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources.Theme; +import android.database.sqlite.SQLiteCompatibilityWalFlags; import android.os.BaseBundle; import android.os.Binder; import android.os.Build; @@ -35,9 +36,9 @@ import android.os.FileUtils; import android.os.IIncidentManager; import android.os.Looper; import android.os.Message; +import android.os.Parcel; import android.os.PowerManager; import android.os.Process; -import android.os.RemoteException; import android.os.ServiceManager; import android.os.StrictMode; import android.os.SystemClock; @@ -45,31 +46,31 @@ import android.os.SystemProperties; import android.os.Trace; import android.os.UserHandle; import android.os.storage.IStorageManager; -import android.util.TimingsTraceLog; import android.util.DisplayMetrics; import android.util.EventLog; import android.util.Slog; +import android.util.TimingsTraceLog; import android.view.WindowManager; import com.android.internal.R; -import com.android.internal.app.NightDisplayController; +import com.android.internal.app.ColorDisplayController; import com.android.internal.logging.MetricsLogger; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.BinderInternal; -import com.android.internal.util.EmergencyAffordanceManager; import com.android.internal.util.ConcurrentUtils; +import com.android.internal.util.EmergencyAffordanceManager; import com.android.internal.widget.ILockSettings; import com.android.server.accessibility.AccessibilityManagerService; import com.android.server.am.ActivityManagerService; import com.android.server.audio.AudioService; +import com.android.server.broadcastradio.BroadcastRadioService; import com.android.server.camera.CameraServiceProxy; -import com.android.server.car.CarServiceHelperService; import com.android.server.clipboard.ClipboardService; import com.android.server.connectivity.IpConnectivityMetrics; import com.android.server.coverage.CoverageService; import com.android.server.devicepolicy.DevicePolicyManagerService; +import com.android.server.display.ColorDisplayService; import com.android.server.display.DisplayManagerService; -import com.android.server.display.NightDisplayService; import com.android.server.dreams.DreamManagerService; import com.android.server.emergency.EmergencyAffordanceService; import com.android.server.fingerprint.FingerprintService; @@ -79,16 +80,19 @@ import com.android.server.job.JobSchedulerService; import com.android.server.lights.LightsService; import com.android.server.media.MediaResourceMonitorService; import com.android.server.media.MediaRouterService; +import com.android.server.media.MediaUpdateService; import com.android.server.media.MediaSessionService; import com.android.server.media.projection.MediaProjectionManagerService; import com.android.server.net.NetworkPolicyManagerService; import com.android.server.net.NetworkStatsService; +import com.android.server.net.watchlist.NetworkWatchlistService; import com.android.server.notification.NotificationManagerService; import com.android.server.oemlock.OemLockService; import com.android.server.om.OverlayManagerService; import com.android.server.os.DeviceIdentifiersPolicyService; import com.android.server.os.SchedulingPolicyService; import com.android.server.pm.BackgroundDexOptService; +import com.android.server.pm.CrossProfileAppsService; import com.android.server.pm.Installer; import com.android.server.pm.LauncherAppsService; import com.android.server.pm.OtaDexoptService; @@ -98,14 +102,15 @@ import com.android.server.pm.UserManagerService; import com.android.server.policy.PhoneWindowManager; import com.android.server.power.PowerManagerService; import com.android.server.power.ShutdownThread; -import com.android.server.broadcastradio.BroadcastRadioService; import com.android.server.restrictions.RestrictionsManagerService; import com.android.server.security.KeyAttestationApplicationIdProviderService; import com.android.server.security.KeyChainSystemService; import com.android.server.soundtrigger.SoundTriggerService; +import com.android.server.stats.StatsCompanionService; import com.android.server.statusbar.StatusBarManagerService; import com.android.server.storage.DeviceStorageMonitorService; import com.android.server.telecom.TelecomLoaderService; +import com.android.server.textclassifier.TextClassificationManagerService; import com.android.server.trust.TrustManagerService; import com.android.server.tv.TvInputManagerService; import com.android.server.tv.TvRemoteService; @@ -124,6 +129,10 @@ import java.util.Timer; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Future; +import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_CRITICAL; +import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_HIGH; +import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_NORMAL; +import static android.os.IServiceManager.DUMP_FLAG_PROTO; import static android.view.Display.DEFAULT_DISPLAY; public final class SystemServer { @@ -188,6 +197,8 @@ public final class SystemServer { "com.google.android.clockwork.ThermalObserver"; private static final String WEAR_CONNECTIVITY_SERVICE_CLASS = "com.google.android.clockwork.connectivity.WearConnectivityService"; + private static final String WEAR_SIDEKICK_SERVICE_CLASS = + "com.google.android.clockwork.sidekick.SidekickService"; private static final String WEAR_DISPLAY_SERVICE_CLASS = "com.google.android.clockwork.display.WearDisplayService"; private static final String WEAR_LEFTY_SERVICE_CLASS = @@ -204,6 +215,12 @@ public final class SystemServer { "com.android.server.autofill.AutofillManagerService"; private static final String TIME_ZONE_RULES_MANAGER_SERVICE_CLASS = "com.android.server.timezone.RulesManagerService$Lifecycle"; + private static final String IOT_SERVICE_CLASS = + "com.google.android.things.services.IoTSystemService"; + private static final String SLICE_MANAGER_SERVICE_CLASS = + "com.android.server.slice.SliceManagerService$Lifecycle"; + private static final String CAR_SERVICE_HELPER_SERVICE_CLASS = + "com.android.internal.car.CarServiceHelperService"; private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst"; @@ -314,6 +331,8 @@ public final class SystemServer { // The system server should never make non-oneway calls Binder.setWarnOnBlocking(true); + // Deactivate SQLiteCompatibilityWalFlags until settings provider is initialized + SQLiteCompatibilityWalFlags.init(null); // Here we go! Slog.i(TAG, "Entered the Android system server!"); @@ -351,6 +370,9 @@ public final class SystemServer { // to avoid throwing BadParcelableException. BaseBundle.setShouldDefuse(true); + // Within the system server, when parceling exceptions, include the stack trace + Parcel.setStackTraceParceling(true); + // Ensure binder calls into the system always run at foreground priority. BinderInternal.disableBackgroundScheduling(true); @@ -398,10 +420,8 @@ public final class SystemServer { traceEnd(); } - // For debug builds, log event loop stalls to dropbox for analysis. - if (StrictMode.conditionallyEnableDebugLogging()) { - Slog.i(TAG, "Enabled StrictMode for system server main thread."); - } + StrictMode.initVmDefaults(null); + if (!mRuntimeRestart && !isFirstBootOrUpgrade()) { int uptimeMillis = (int) SystemClock.elapsedRealtime(); MetricsLogger.histogram(null, "boot_system_server_ready", uptimeMillis); @@ -539,11 +559,9 @@ public final class SystemServer { traceEnd(); // Bring up recovery system in case a rescue party needs a reboot - if (!SystemProperties.getBoolean("config.disable_noncore", false)) { - traceBeginAndSlog("StartRecoverySystemService"); - mSystemServiceManager.startService(RecoverySystemService.class); - traceEnd(); - } + traceBeginAndSlog("StartRecoverySystemService"); + mSystemServiceManager.startService(RecoverySystemService.class); + traceEnd(); // Now that we have the bare essentials of the OS up and running, take // note that we just booted, which might send out a rescue party if @@ -555,6 +573,13 @@ public final class SystemServer { mSystemServiceManager.startService(LightsService.class); traceEnd(); + traceBeginAndSlog("StartSidekickService"); + // Package manager isn't started yet; need to use SysProp not hardware feature + if (SystemProperties.getBoolean("config.enable_sidekick_graphics", false)) { + mSystemServiceManager.startService(WEAR_SIDEKICK_SERVICE_CLASS); + } + traceEnd(); + // Display manager is needed to provide display metrics before package manager // starts up. traceBeginAndSlog("StartDisplayManager"); @@ -667,9 +692,11 @@ public final class SystemServer { traceEnd(); // Tracks whether the updatable WebView is in a ready state and watches for update installs. - traceBeginAndSlog("StartWebViewUpdateService"); - mWebViewUpdateService = mSystemServiceManager.startService(WebViewUpdateService.class); - traceEnd(); + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_WEBVIEW)) { + traceBeginAndSlog("StartWebViewUpdateService"); + mWebViewUpdateService = mSystemServiceManager.startService(WebViewUpdateService.class); + traceEnd(); + } } /** @@ -697,31 +724,18 @@ public final class SystemServer { MmsServiceBroker mmsService = null; HardwarePropertiesManagerService hardwarePropertiesService = null; - boolean disableStorage = SystemProperties.getBoolean("config.disable_storage", false); - boolean disableBluetooth = SystemProperties.getBoolean("config.disable_bluetooth", false); - boolean disableLocation = SystemProperties.getBoolean("config.disable_location", false); - boolean disableSystemUI = SystemProperties.getBoolean("config.disable_systemui", false); - boolean disableNonCoreServices = SystemProperties.getBoolean("config.disable_noncore", false); - boolean disableNetwork = SystemProperties.getBoolean("config.disable_network", false); - boolean disableNetworkTime = SystemProperties.getBoolean("config.disable_networktime", false); - boolean disableRtt = SystemProperties.getBoolean("config.disable_rtt", false); - boolean disableMediaProjection = SystemProperties.getBoolean("config.disable_mediaproj", - false); - boolean disableSerial = SystemProperties.getBoolean("config.disable_serial", false); - boolean disableSearchManager = SystemProperties.getBoolean("config.disable_searchmanager", - false); - boolean disableTrustManager = SystemProperties.getBoolean("config.disable_trustmanager", - false); - boolean disableTextServices = SystemProperties.getBoolean("config.disable_textservices", - false); - boolean disableConsumerIr = SystemProperties.getBoolean("config.disable_consumerir", false); - boolean disableVrManager = SystemProperties.getBoolean("config.disable_vrmanager", false); + boolean disableSystemTextClassifier = SystemProperties.getBoolean( + "config.disable_systemtextclassifier", false); boolean disableCameraService = SystemProperties.getBoolean("config.disable_cameraservice", false); + boolean disableSlices = SystemProperties.getBoolean("config.disable_slices", false); boolean enableLeftyService = SystemProperties.getBoolean("config.enable_lefty", false); boolean isEmulator = SystemProperties.get("ro.kernel.qemu").equals("1"); + boolean isWatch = context.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_WATCH); + // For debugging RescueParty if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean("debug.crash_system", false)) { throw new RuntimeException(); @@ -787,6 +801,8 @@ public final class SystemServer { traceBeginAndSlog("InstallSystemProviders"); mActivityManagerService.installSystemProviders(); + // Now that SettingsProvider is ready, reactivate SQLiteCompatibilityWalFlags + SQLiteCompatibilityWalFlags.reset(); traceEnd(); traceBeginAndSlog("StartVibratorService"); @@ -794,7 +810,7 @@ public final class SystemServer { ServiceManager.addService("vibrator", vibrator); traceEnd(); - if (!disableConsumerIr) { + if (!isWatch) { traceBeginAndSlog("StartConsumerIrService"); consumerIr = new ConsumerIrService(context); ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr); @@ -821,10 +837,19 @@ public final class SystemServer { wm = WindowManagerService.main(context, inputManager, mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL, !mFirstBoot, mOnlyCore, new PhoneWindowManager()); - ServiceManager.addService(Context.WINDOW_SERVICE, wm); + ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false, + DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PROTO); ServiceManager.addService(Context.INPUT_SERVICE, inputManager); traceEnd(); + traceBeginAndSlog("SetWindowManagerService"); + mActivityManagerService.setWindowManager(wm); + traceEnd(); + + traceBeginAndSlog("WindowManagerServiceOnInitReady"); + wm.onInitReady(); + traceEnd(); + // Start receiving calls from HIDL services. Start in in a separate thread // because it need to connect to SensorManager. This have to start // after START_SENSOR_SERVICE is done. @@ -836,16 +861,12 @@ public final class SystemServer { traceLog.traceEnd(); }, START_HIDL_SERVICES); - if (!disableVrManager) { + if (!isWatch) { traceBeginAndSlog("StartVrManagerService"); mSystemServiceManager.startService(VrManagerService.class); traceEnd(); } - traceBeginAndSlog("SetWindowManagerService"); - mActivityManagerService.setWindowManager(wm); - traceEnd(); - traceBeginAndSlog("StartInputManager"); inputManager.setWindowManagerCallbacks(wm.getInputMonitor()); inputManager.start(); @@ -866,8 +887,6 @@ public final class SystemServer { } else if (!context.getPackageManager().hasSystemFeature (PackageManager.FEATURE_BLUETOOTH)) { Slog.i(TAG, "No Bluetooth Service (Bluetooth Hardware Not Present)"); - } else if (disableBluetooth) { - Slog.i(TAG, "Bluetooth Service disabled by config"); } else { traceBeginAndSlog("StartBluetoothService"); mSystemServiceManager.startService(BluetoothService.class); @@ -878,6 +897,10 @@ public final class SystemServer { mSystemServiceManager.startService(IpConnectivityMetrics.class); traceEnd(); + traceBeginAndSlog("NetworkWatchlistService"); + mSystemServiceManager.startService(NetworkWatchlistService.Lifecycle.class); + traceEnd(); + traceBeginAndSlog("PinnerService"); mSystemServiceManager.startService(PinnerService.class); traceEnd(); @@ -918,8 +941,7 @@ public final class SystemServer { traceEnd(); if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) { - if (!disableStorage && - !"0".equals(SystemProperties.get("system_init.startmountservice"))) { + if (!"0".equals(SystemProperties.get("system_init.startmountservice"))) { traceBeginAndSlog("StartStorageManagerService"); try { /* @@ -969,43 +991,41 @@ public final class SystemServer { traceEnd(); if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) { - if (!disableNonCoreServices) { - traceBeginAndSlog("StartLockSettingsService"); - try { - mSystemServiceManager.startService(LOCK_SETTINGS_SERVICE_CLASS); - lockSettings = ILockSettings.Stub.asInterface( - ServiceManager.getService("lock_settings")); - } catch (Throwable e) { - reportWtf("starting LockSettingsService service", e); - } - traceEnd(); - - final boolean hasPdb = !SystemProperties.get(PERSISTENT_DATA_BLOCK_PROP).equals(""); - if (hasPdb) { - traceBeginAndSlog("StartPersistentDataBlock"); - mSystemServiceManager.startService(PersistentDataBlockService.class); - traceEnd(); - } - - if (hasPdb || OemLockService.isHalPresent()) { - // Implementation depends on pdb or the OemLock HAL - traceBeginAndSlog("StartOemLockService"); - mSystemServiceManager.startService(OemLockService.class); - traceEnd(); - } + traceBeginAndSlog("StartLockSettingsService"); + try { + mSystemServiceManager.startService(LOCK_SETTINGS_SERVICE_CLASS); + lockSettings = ILockSettings.Stub.asInterface( + ServiceManager.getService("lock_settings")); + } catch (Throwable e) { + reportWtf("starting LockSettingsService service", e); + } + traceEnd(); - traceBeginAndSlog("StartDeviceIdleController"); - mSystemServiceManager.startService(DeviceIdleController.class); + final boolean hasPdb = !SystemProperties.get(PERSISTENT_DATA_BLOCK_PROP).equals(""); + if (hasPdb) { + traceBeginAndSlog("StartPersistentDataBlock"); + mSystemServiceManager.startService(PersistentDataBlockService.class); traceEnd(); + } - // Always start the Device Policy Manager, so that the API is compatible with - // API8. - traceBeginAndSlog("StartDevicePolicyManager"); - mSystemServiceManager.startService(DevicePolicyManagerService.Lifecycle.class); + if (hasPdb || OemLockService.isHalPresent()) { + // Implementation depends on pdb or the OemLock HAL + traceBeginAndSlog("StartOemLockService"); + mSystemServiceManager.startService(OemLockService.class); traceEnd(); } - if (!disableSystemUI) { + traceBeginAndSlog("StartDeviceIdleController"); + mSystemServiceManager.startService(DeviceIdleController.class); + traceEnd(); + + // Always start the Device Policy Manager, so that the API is compatible with + // API8. + traceBeginAndSlog("StartDevicePolicyManager"); + mSystemServiceManager.startService(DevicePolicyManagerService.Lifecycle.class); + traceEnd(); + + if (!isWatch) { traceBeginAndSlog("StartStatusBarManagerService"); try { statusBar = new StatusBarManagerService(context, wm); @@ -1016,193 +1036,186 @@ public final class SystemServer { traceEnd(); } - if (!disableNonCoreServices) { - traceBeginAndSlog("StartClipboardService"); - mSystemServiceManager.startService(ClipboardService.class); - traceEnd(); - } + traceBeginAndSlog("StartClipboardService"); + mSystemServiceManager.startService(ClipboardService.class); + traceEnd(); - if (!disableNetwork) { - traceBeginAndSlog("StartNetworkManagementService"); - try { - networkManagement = NetworkManagementService.create(context); - ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement); - } catch (Throwable e) { - reportWtf("starting NetworkManagement Service", e); - } - traceEnd(); + traceBeginAndSlog("StartNetworkManagementService"); + try { + networkManagement = NetworkManagementService.create(context); + ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement); + } catch (Throwable e) { + reportWtf("starting NetworkManagement Service", e); + } + traceEnd(); - traceBeginAndSlog("StartIpSecService"); - try { - ipSecService = IpSecService.create(context); - ServiceManager.addService(Context.IPSEC_SERVICE, ipSecService); - } catch (Throwable e) { - reportWtf("starting IpSec Service", e); - } - traceEnd(); + traceBeginAndSlog("StartIpSecService"); + try { + ipSecService = IpSecService.create(context); + ServiceManager.addService(Context.IPSEC_SERVICE, ipSecService); + } catch (Throwable e) { + reportWtf("starting IpSec Service", e); } + traceEnd(); + + traceBeginAndSlog("StartTextServicesManager"); + mSystemServiceManager.startService(TextServicesManagerService.Lifecycle.class); + traceEnd(); - if (!disableNonCoreServices && !disableTextServices) { - traceBeginAndSlog("StartTextServicesManager"); - mSystemServiceManager.startService(TextServicesManagerService.Lifecycle.class); + if (!disableSystemTextClassifier) { + traceBeginAndSlog("StartTextClassificationManagerService"); + mSystemServiceManager.startService(TextClassificationManagerService.Lifecycle.class); traceEnd(); } - if (!disableNetwork) { - traceBeginAndSlog("StartNetworkScoreService"); - try { - networkScore = new NetworkScoreService(context); - ServiceManager.addService(Context.NETWORK_SCORE_SERVICE, networkScore); - } catch (Throwable e) { - reportWtf("starting Network Score Service", e); - } - traceEnd(); + traceBeginAndSlog("StartNetworkScoreService"); + try { + networkScore = new NetworkScoreService(context); + ServiceManager.addService(Context.NETWORK_SCORE_SERVICE, networkScore); + } catch (Throwable e) { + reportWtf("starting Network Score Service", e); + } + traceEnd(); - traceBeginAndSlog("StartNetworkStatsService"); - try { - networkStats = NetworkStatsService.create(context, networkManagement); - ServiceManager.addService(Context.NETWORK_STATS_SERVICE, networkStats); - } catch (Throwable e) { - reportWtf("starting NetworkStats Service", e); - } - traceEnd(); + traceBeginAndSlog("StartNetworkStatsService"); + try { + networkStats = NetworkStatsService.create(context, networkManagement); + ServiceManager.addService(Context.NETWORK_STATS_SERVICE, networkStats); + } catch (Throwable e) { + reportWtf("starting NetworkStats Service", e); + } + traceEnd(); - traceBeginAndSlog("StartNetworkPolicyManagerService"); - try { - networkPolicy = new NetworkPolicyManagerService(context, - mActivityManagerService, networkStats, networkManagement); - ServiceManager.addService(Context.NETWORK_POLICY_SERVICE, networkPolicy); - } catch (Throwable e) { - reportWtf("starting NetworkPolicy Service", e); - } - traceEnd(); + traceBeginAndSlog("StartNetworkPolicyManagerService"); + try { + networkPolicy = new NetworkPolicyManagerService(context, + mActivityManagerService, networkStats, networkManagement); + ServiceManager.addService(Context.NETWORK_POLICY_SERVICE, networkPolicy); + } catch (Throwable e) { + reportWtf("starting NetworkPolicy Service", e); + } + traceEnd(); + if (context.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_WIFI)) { // Wifi Service must be started first for wifi-related services. traceBeginAndSlog("StartWifi"); mSystemServiceManager.startService(WIFI_SERVICE_CLASS); traceEnd(); traceBeginAndSlog("StartWifiScanning"); mSystemServiceManager.startService( - "com.android.server.wifi.scanner.WifiScanningService"); + "com.android.server.wifi.scanner.WifiScanningService"); traceEnd(); + } - if (!disableRtt) { - traceBeginAndSlog("StartWifiRtt"); - mSystemServiceManager.startService("com.android.server.wifi.RttService"); - traceEnd(); - } - - if (context.getPackageManager().hasSystemFeature( - PackageManager.FEATURE_WIFI_AWARE)) { - traceBeginAndSlog("StartWifiAware"); - mSystemServiceManager.startService(WIFI_AWARE_SERVICE_CLASS); - traceEnd(); - } else { - Slog.i(TAG, "No Wi-Fi Aware Service (Aware support Not Present)"); - } - - if (context.getPackageManager().hasSystemFeature( - PackageManager.FEATURE_WIFI_DIRECT)) { - traceBeginAndSlog("StartWifiP2P"); - mSystemServiceManager.startService(WIFI_P2P_SERVICE_CLASS); - traceEnd(); - } - - if (context.getPackageManager().hasSystemFeature( - PackageManager.FEATURE_LOWPAN)) { - traceBeginAndSlog("StartLowpan"); - mSystemServiceManager.startService(LOWPAN_SERVICE_CLASS); - traceEnd(); - } - - if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_ETHERNET) || - mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)) { - traceBeginAndSlog("StartEthernet"); - mSystemServiceManager.startService(ETHERNET_SERVICE_CLASS); - traceEnd(); - } + if (context.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_WIFI_RTT)) { + traceBeginAndSlog("StartRttService"); + mSystemServiceManager.startService( + "com.android.server.wifi.rtt.RttService"); + traceEnd(); + } - traceBeginAndSlog("StartConnectivityService"); - try { - connectivity = new ConnectivityService( - context, networkManagement, networkStats, networkPolicy); - ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity); - networkStats.bindConnectivityManager(connectivity); - networkPolicy.bindConnectivityManager(connectivity); - } catch (Throwable e) { - reportWtf("starting Connectivity Service", e); - } + if (context.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_WIFI_AWARE)) { + traceBeginAndSlog("StartWifiAware"); + mSystemServiceManager.startService(WIFI_AWARE_SERVICE_CLASS); traceEnd(); + } - traceBeginAndSlog("StartNsdService"); - try { - serviceDiscovery = NsdService.create(context); - ServiceManager.addService( - Context.NSD_SERVICE, serviceDiscovery); - } catch (Throwable e) { - reportWtf("starting Service Discovery Service", e); - } + if (context.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_WIFI_DIRECT)) { + traceBeginAndSlog("StartWifiP2P"); + mSystemServiceManager.startService(WIFI_P2P_SERVICE_CLASS); traceEnd(); } - if (!disableNonCoreServices) { - traceBeginAndSlog("StartUpdateLockService"); - try { - ServiceManager.addService(Context.UPDATE_LOCK_SERVICE, - new UpdateLockService(context)); - } catch (Throwable e) { - reportWtf("starting UpdateLockService", e); - } + if (context.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_LOWPAN)) { + traceBeginAndSlog("StartLowpan"); + mSystemServiceManager.startService(LOWPAN_SERVICE_CLASS); traceEnd(); } - /* - * StorageManagerService has a few dependencies: Notification Manager and - * AppWidget Provider. Make sure StorageManagerService is completely started - * first before continuing. - */ - if (storageManager != null && !mOnlyCore) { - traceBeginAndSlog("WaitForAsecScan"); - try { - storageManager.waitForAsecScan(); - } catch (RemoteException ignored) { - } + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_ETHERNET) || + mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)) { + traceBeginAndSlog("StartEthernet"); + mSystemServiceManager.startService(ETHERNET_SERVICE_CLASS); traceEnd(); } + traceBeginAndSlog("StartConnectivityService"); + try { + connectivity = new ConnectivityService( + context, networkManagement, networkStats, networkPolicy); + ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity, + /* allowIsolated= */ false, + DUMP_FLAG_PRIORITY_HIGH | DUMP_FLAG_PRIORITY_NORMAL); + networkStats.bindConnectivityManager(connectivity); + networkPolicy.bindConnectivityManager(connectivity); + } catch (Throwable e) { + reportWtf("starting Connectivity Service", e); + } + traceEnd(); + + traceBeginAndSlog("StartNsdService"); + try { + serviceDiscovery = NsdService.create(context); + ServiceManager.addService( + Context.NSD_SERVICE, serviceDiscovery); + } catch (Throwable e) { + reportWtf("starting Service Discovery Service", e); + } + traceEnd(); + + traceBeginAndSlog("StartSystemUpdateManagerService"); + try { + ServiceManager.addService(Context.SYSTEM_UPDATE_SERVICE, + new SystemUpdateManagerService(context)); + } catch (Throwable e) { + reportWtf("starting SystemUpdateManagerService", e); + } + traceEnd(); + + traceBeginAndSlog("StartUpdateLockService"); + try { + ServiceManager.addService(Context.UPDATE_LOCK_SERVICE, + new UpdateLockService(context)); + } catch (Throwable e) { + reportWtf("starting UpdateLockService", e); + } + traceEnd(); + traceBeginAndSlog("StartNotificationManager"); mSystemServiceManager.startService(NotificationManagerService.class); SystemNotificationChannels.createAll(context); notification = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE)); - networkPolicy.bindNotificationManager(notification); traceEnd(); traceBeginAndSlog("StartDeviceMonitor"); mSystemServiceManager.startService(DeviceStorageMonitorService.class); traceEnd(); - if (!disableLocation) { - traceBeginAndSlog("StartLocationManagerService"); - try { - location = new LocationManagerService(context); - ServiceManager.addService(Context.LOCATION_SERVICE, location); - } catch (Throwable e) { - reportWtf("starting Location Manager", e); - } - traceEnd(); + traceBeginAndSlog("StartLocationManagerService"); + try { + location = new LocationManagerService(context); + ServiceManager.addService(Context.LOCATION_SERVICE, location); + } catch (Throwable e) { + reportWtf("starting Location Manager", e); + } + traceEnd(); - traceBeginAndSlog("StartCountryDetectorService"); - try { - countryDetector = new CountryDetectorService(context); - ServiceManager.addService(Context.COUNTRY_DETECTOR, countryDetector); - } catch (Throwable e) { - reportWtf("starting Country Detector", e); - } - traceEnd(); + traceBeginAndSlog("StartCountryDetectorService"); + try { + countryDetector = new CountryDetectorService(context); + ServiceManager.addService(Context.COUNTRY_DETECTOR, countryDetector); + } catch (Throwable e) { + reportWtf("starting Country Detector", e); } + traceEnd(); - if (!disableNonCoreServices && !disableSearchManager) { + if (!isWatch) { traceBeginAndSlog("StartSearchManagerService"); try { mSystemServiceManager.startService(SEARCH_MANAGER_SERVICE_CLASS); @@ -1212,8 +1225,7 @@ public final class SystemServer { traceEnd(); } - if (!disableNonCoreServices && context.getResources().getBoolean( - R.bool.config_enableWallpaperService)) { + if (context.getResources().getBoolean(R.bool.config_enableWallpaperService)) { traceBeginAndSlog("StartWallpaperManagerService"); mSystemServiceManager.startService(WALLPAPER_SERVICE_CLASS); traceEnd(); @@ -1229,16 +1241,14 @@ public final class SystemServer { traceEnd(); } - if (!disableNonCoreServices) { - traceBeginAndSlog("StartDockObserver"); - mSystemServiceManager.startService(DockObserver.class); - traceEnd(); + traceBeginAndSlog("StartDockObserver"); + mSystemServiceManager.startService(DockObserver.class); + traceEnd(); - if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { - traceBeginAndSlog("StartThermalObserver"); - mSystemServiceManager.startService(THERMAL_OBSERVER_CLASS); - traceEnd(); - } + if (isWatch) { + traceBeginAndSlog("StartThermalObserver"); + mSystemServiceManager.startService(THERMAL_OBSERVER_CLASS); + traceEnd(); } traceBeginAndSlog("StartWiredAccessoryManager"); @@ -1251,53 +1261,51 @@ public final class SystemServer { } traceEnd(); - if (!disableNonCoreServices) { - if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_MIDI)) { - // Start MIDI Manager service - traceBeginAndSlog("StartMidiManager"); - mSystemServiceManager.startService(MIDI_SERVICE_CLASS); - traceEnd(); - } - - if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST) - || mPackageManager.hasSystemFeature( - PackageManager.FEATURE_USB_ACCESSORY)) { - // Manage USB host and device support - traceBeginAndSlog("StartUsbService"); - mSystemServiceManager.startService(USB_SERVICE_CLASS); - traceEnd(); - } + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_MIDI)) { + // Start MIDI Manager service + traceBeginAndSlog("StartMidiManager"); + mSystemServiceManager.startService(MIDI_SERVICE_CLASS); + traceEnd(); + } - if (!disableSerial) { - traceBeginAndSlog("StartSerialService"); - try { - // Serial port support - serial = new SerialService(context); - ServiceManager.addService(Context.SERIAL_SERVICE, serial); - } catch (Throwable e) { - Slog.e(TAG, "Failure starting SerialService", e); - } - traceEnd(); - } + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST) + || mPackageManager.hasSystemFeature( + PackageManager.FEATURE_USB_ACCESSORY)) { + // Manage USB host and device support + traceBeginAndSlog("StartUsbService"); + mSystemServiceManager.startService(USB_SERVICE_CLASS); + traceEnd(); + } - traceBeginAndSlog("StartHardwarePropertiesManagerService"); + if (!isWatch) { + traceBeginAndSlog("StartSerialService"); try { - hardwarePropertiesService = new HardwarePropertiesManagerService(context); - ServiceManager.addService(Context.HARDWARE_PROPERTIES_SERVICE, - hardwarePropertiesService); + // Serial port support + serial = new SerialService(context); + ServiceManager.addService(Context.SERIAL_SERVICE, serial); } catch (Throwable e) { - Slog.e(TAG, "Failure starting HardwarePropertiesManagerService", e); + Slog.e(TAG, "Failure starting SerialService", e); } traceEnd(); } + traceBeginAndSlog("StartHardwarePropertiesManagerService"); + try { + hardwarePropertiesService = new HardwarePropertiesManagerService(context); + ServiceManager.addService(Context.HARDWARE_PROPERTIES_SERVICE, + hardwarePropertiesService); + } catch (Throwable e) { + Slog.e(TAG, "Failure starting HardwarePropertiesManagerService", e); + } + traceEnd(); + traceBeginAndSlog("StartTwilightService"); mSystemServiceManager.startService(TwilightService.class); traceEnd(); - if (NightDisplayController.isAvailable(context)) { + if (ColorDisplayController.isAvailable(context)) { traceBeginAndSlog("StartNightDisplay"); - mSystemServiceManager.startService(NightDisplayService.class); + mSystemServiceManager.startService(ColorDisplayService.class); traceEnd(); } @@ -1309,47 +1317,43 @@ public final class SystemServer { mSystemServiceManager.startService(SoundTriggerService.class); traceEnd(); - if (!disableNonCoreServices) { - if (!disableTrustManager) { - traceBeginAndSlog("StartTrustManager"); - mSystemServiceManager.startService(TrustManagerService.class); - traceEnd(); - } - - if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_BACKUP)) { - traceBeginAndSlog("StartBackupManager"); - mSystemServiceManager.startService(BACKUP_MANAGER_SERVICE_CLASS); - traceEnd(); - } - - if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_APP_WIDGETS) - || context.getResources().getBoolean(R.bool.config_enableAppWidgetService)) { - traceBeginAndSlog("StartAppWidgerService"); - mSystemServiceManager.startService(APPWIDGET_SERVICE_CLASS); - traceEnd(); - } + traceBeginAndSlog("StartTrustManager"); + mSystemServiceManager.startService(TrustManagerService.class); + traceEnd(); - // We need to always start this service, regardless of whether the - // FEATURE_VOICE_RECOGNIZERS feature is set, because it needs to take care - // of initializing various settings. It will internally modify its behavior - // based on that feature. - traceBeginAndSlog("StartVoiceRecognitionManager"); - mSystemServiceManager.startService(VOICE_RECOGNITION_MANAGER_SERVICE_CLASS); + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_BACKUP)) { + traceBeginAndSlog("StartBackupManager"); + mSystemServiceManager.startService(BACKUP_MANAGER_SERVICE_CLASS); traceEnd(); + } - if (GestureLauncherService.isGestureLauncherEnabled(context.getResources())) { - traceBeginAndSlog("StartGestureLauncher"); - mSystemServiceManager.startService(GestureLauncherService.class); - traceEnd(); - } - traceBeginAndSlog("StartSensorNotification"); - mSystemServiceManager.startService(SensorNotificationService.class); + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_APP_WIDGETS) + || context.getResources().getBoolean(R.bool.config_enableAppWidgetService)) { + traceBeginAndSlog("StartAppWidgerService"); + mSystemServiceManager.startService(APPWIDGET_SERVICE_CLASS); traceEnd(); + } + + // We need to always start this service, regardless of whether the + // FEATURE_VOICE_RECOGNIZERS feature is set, because it needs to take care + // of initializing various settings. It will internally modify its behavior + // based on that feature. + traceBeginAndSlog("StartVoiceRecognitionManager"); + mSystemServiceManager.startService(VOICE_RECOGNITION_MANAGER_SERVICE_CLASS); + traceEnd(); - traceBeginAndSlog("StartContextHubSystemService"); - mSystemServiceManager.startService(ContextHubSystemService.class); + if (GestureLauncherService.isGestureLauncherEnabled(context.getResources())) { + traceBeginAndSlog("StartGestureLauncher"); + mSystemServiceManager.startService(GestureLauncherService.class); traceEnd(); } + traceBeginAndSlog("StartSensorNotification"); + mSystemServiceManager.startService(SensorNotificationService.class); + traceEnd(); + + traceBeginAndSlog("StartContextHubSystemService"); + mSystemServiceManager.startService(ContextHubSystemService.class); + traceEnd(); traceBeginAndSlog("StartDiskStatsService"); try { @@ -1372,7 +1376,7 @@ public final class SystemServer { traceEnd(); } - if (!disableNetwork && !disableNetworkTime) { + if (!isWatch) { traceBeginAndSlog("StartNetworkTimeUpdateService"); try { networkTimeUpdater = new NetworkTimeUpdateService(context); @@ -1392,38 +1396,32 @@ public final class SystemServer { } traceEnd(); - if (!disableNetwork) { - traceBeginAndSlog("CertBlacklister"); - try { - CertBlacklister blacklister = new CertBlacklister(context); - } catch (Throwable e) { - reportWtf("starting CertBlacklister", e); - } - traceEnd(); + traceBeginAndSlog("CertBlacklister"); + try { + CertBlacklister blacklister = new CertBlacklister(context); + } catch (Throwable e) { + reportWtf("starting CertBlacklister", e); } + traceEnd(); - if (!disableNetwork && !disableNonCoreServices && EmergencyAffordanceManager.ENABLED) { + if (EmergencyAffordanceManager.ENABLED) { // EmergencyMode service traceBeginAndSlog("StartEmergencyAffordanceService"); mSystemServiceManager.startService(EmergencyAffordanceService.class); traceEnd(); } - if (!disableNonCoreServices) { - // Dreams (interactive idle-time views, a/k/a screen savers, and doze mode) - traceBeginAndSlog("StartDreamManager"); - mSystemServiceManager.startService(DreamManagerService.class); - traceEnd(); - } + // Dreams (interactive idle-time views, a/k/a screen savers, and doze mode) + traceBeginAndSlog("StartDreamManager"); + mSystemServiceManager.startService(DreamManagerService.class); + traceEnd(); - if (!disableNonCoreServices) { - traceBeginAndSlog("AddGraphicsStatsService"); - ServiceManager.addService(GraphicsStatsService.GRAPHICS_STATS_SERVICE, - new GraphicsStatsService(context)); - traceEnd(); - } + traceBeginAndSlog("AddGraphicsStatsService"); + ServiceManager.addService(GraphicsStatsService.GRAPHICS_STATS_SERVICE, + new GraphicsStatsService(context)); + traceEnd(); - if (!disableNonCoreServices && CoverageService.ENABLED) { + if (CoverageService.ENABLED) { traceBeginAndSlog("AddCoverageService"); ServiceManager.addService(CoverageService.COVERAGE_SERVICE, new CoverageService()); traceEnd(); @@ -1449,6 +1447,10 @@ public final class SystemServer { mSystemServiceManager.startService(MediaSessionService.class); traceEnd(); + traceBeginAndSlog("StartMediaUpdateService"); + mSystemServiceManager.startService(MediaUpdateService.class); + traceEnd(); + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_HDMI_CEC)) { traceBeginAndSlog("StartHdmiControlService"); mSystemServiceManager.startService(HdmiControlService.class); @@ -1474,38 +1476,37 @@ public final class SystemServer { traceEnd(); } - if (!disableNonCoreServices) { - traceBeginAndSlog("StartMediaRouterService"); - try { - mediaRouter = new MediaRouterService(context); - ServiceManager.addService(Context.MEDIA_ROUTER_SERVICE, mediaRouter); - } catch (Throwable e) { - reportWtf("starting MediaRouterService", e); - } - traceEnd(); - - if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) { - traceBeginAndSlog("StartFingerprintSensor"); - mSystemServiceManager.startService(FingerprintService.class); - traceEnd(); - } + traceBeginAndSlog("StartMediaRouterService"); + try { + mediaRouter = new MediaRouterService(context); + ServiceManager.addService(Context.MEDIA_ROUTER_SERVICE, mediaRouter); + } catch (Throwable e) { + reportWtf("starting MediaRouterService", e); + } + traceEnd(); - traceBeginAndSlog("StartBackgroundDexOptService"); - try { - BackgroundDexOptService.schedule(context); - } catch (Throwable e) { - reportWtf("starting StartBackgroundDexOptService", e); - } + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) { + traceBeginAndSlog("StartFingerprintSensor"); + mSystemServiceManager.startService(FingerprintService.class); traceEnd(); + } - traceBeginAndSlog("StartPruneInstantAppsJobService"); - try { - PruneInstantAppsJobService.schedule(context); - } catch (Throwable e) { - reportWtf("StartPruneInstantAppsJobService", e); - } - traceEnd(); + traceBeginAndSlog("StartBackgroundDexOptService"); + try { + BackgroundDexOptService.schedule(context); + } catch (Throwable e) { + reportWtf("starting StartBackgroundDexOptService", e); } + traceEnd(); + + traceBeginAndSlog("StartPruneInstantAppsJobService"); + try { + PruneInstantAppsJobService.schedule(context); + } catch (Throwable e) { + reportWtf("StartPruneInstantAppsJobService", e); + } + traceEnd(); + // LauncherAppsService uses ShortcutService. traceBeginAndSlog("StartShortcutServiceLifecycle"); mSystemServiceManager.startService(ShortcutService.Lifecycle.class); @@ -1514,39 +1515,58 @@ public final class SystemServer { traceBeginAndSlog("StartLauncherAppsService"); mSystemServiceManager.startService(LauncherAppsService.class); traceEnd(); + + traceBeginAndSlog("StartCrossProfileAppsService"); + mSystemServiceManager.startService(CrossProfileAppsService.class); + traceEnd(); } - if (!disableNonCoreServices && !disableMediaProjection) { + if (!isWatch) { traceBeginAndSlog("StartMediaProjectionManager"); mSystemServiceManager.startService(MediaProjectionManagerService.class); traceEnd(); } - if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { + if (isWatch) { traceBeginAndSlog("StartWearConnectivityService"); mSystemServiceManager.startService(WEAR_CONNECTIVITY_SERVICE_CLASS); traceEnd(); - if (!disableNonCoreServices) { - traceBeginAndSlog("StartWearTimeService"); - mSystemServiceManager.startService(WEAR_DISPLAY_SERVICE_CLASS); - mSystemServiceManager.startService(WEAR_TIME_SERVICE_CLASS); - traceEnd(); + traceBeginAndSlog("StartWearTimeService"); + mSystemServiceManager.startService(WEAR_DISPLAY_SERVICE_CLASS); + mSystemServiceManager.startService(WEAR_TIME_SERVICE_CLASS); + traceEnd(); - if (enableLeftyService) { - traceBeginAndSlog("StartWearLeftyService"); - mSystemServiceManager.startService(WEAR_LEFTY_SERVICE_CLASS); - traceEnd(); - } + if (enableLeftyService) { + traceBeginAndSlog("StartWearLeftyService"); + mSystemServiceManager.startService(WEAR_LEFTY_SERVICE_CLASS); + traceEnd(); } } + if (!disableSlices) { + traceBeginAndSlog("StartSliceManagerService"); + mSystemServiceManager.startService(SLICE_MANAGER_SERVICE_CLASS); + traceEnd(); + } + if (!disableCameraService) { traceBeginAndSlog("StartCameraServiceProxy"); mSystemServiceManager.startService(CameraServiceProxy.class); traceEnd(); } + if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_EMBEDDED)) { + traceBeginAndSlog("StartIoTSystemService"); + mSystemServiceManager.startService(IOT_SERVICE_CLASS); + traceEnd(); + } + + // Statsd helper + traceBeginAndSlog("StartStatsCompanionService"); + mSystemServiceManager.startService(StatsCompanionService.Lifecycle.class); + traceEnd(); + // Before things start rolling, be sure we have decided whether // we are in safe mode. final boolean safeMode = wm.detectSafeMode(); @@ -1640,11 +1660,7 @@ public final class SystemServer { traceEnd(); traceBeginAndSlog("MakePackageManagerServiceReady"); - try { - mPackageManagerService.systemReady(); - } catch (Throwable e) { - reportWtf("making Package Manager Service ready", e); - } + mPackageManagerService.systemReady(); traceEnd(); traceBeginAndSlog("MakeDisplayManagerServiceReady"); @@ -1658,6 +1674,25 @@ public final class SystemServer { mSystemServiceManager.setSafeMode(safeMode); + // Start device specific services + traceBeginAndSlog("StartDeviceSpecificServices"); + final String[] classes = mSystemContext.getResources().getStringArray( + R.array.config_deviceSpecificSystemServices); + for (final String className : classes) { + traceBeginAndSlog("StartDeviceSpecificServices " + className); + try { + mSystemServiceManager.startService(className); + } catch (Throwable e) { + reportWtf("starting " + className, e); + } + traceEnd(); + } + traceEnd(); + + traceBeginAndSlog("StartBootPhaseDeviceSpecificServicesReady"); + mSystemServiceManager.startBootPhase(SystemService.PHASE_DEVICE_SPECIFIC_SERVICES_READY); + traceEnd(); + // These are needed to propagate to the runnable below. final NetworkManagementService networkManagementF = networkManagement; final NetworkStatsService networkStatsF = networkStats; @@ -1695,10 +1730,10 @@ public final class SystemServer { traceEnd(); // No dependency on Webview preparation in system server. But this should - // be completed before allowring 3rd party + // be completed before allowing 3rd party final String WEBVIEW_PREPARATION = "WebViewFactoryPreparation"; Future<?> webviewPrep = null; - if (!mOnlyCore) { + if (!mOnlyCore && mWebViewUpdateService != null) { webviewPrep = SystemServerInitThreadPool.get().submit(() -> { Slog.i(TAG, WEBVIEW_PREPARATION); TimingsTraceLog traceLog = new TimingsTraceLog( @@ -1713,7 +1748,7 @@ public final class SystemServer { if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) { traceBeginAndSlog("StartCarServiceHelperService"); - mSystemServiceManager.startService(CarServiceHelperService.class); + mSystemServiceManager.startService(CAR_SERVICE_HELPER_SERVICE_CLASS); traceEnd(); } @@ -1864,7 +1899,7 @@ public final class SystemServer { // TODO: Switch from checkService to getService once it's always // in the build and should reliably be there. final IIncidentManager incident = IIncidentManager.Stub.asInterface( - ServiceManager.checkService("incident")); + ServiceManager.getService(Context.INCIDENT_SERVICE)); if (incident != null) incident.systemRunning(); } catch (Throwable e) { reportWtf("Notifying incident daemon running", e); |