OSDN Git Service

Merge commit 'e45e328821ba' into oc-dev-plus-aosp
authorNathan Harold <nharold@google.com>
Thu, 30 Mar 2017 00:05:10 +0000 (17:05 -0700)
committerNathan Harold <nharold@google.com>
Thu, 30 Mar 2017 00:05:10 +0000 (17:05 -0700)
Change-Id: I30ad9038be8faee57e5d6b1391d9e70a966a9a77

1  2 
Android.mk
core/java/android/app/SystemServiceRegistry.java
services/java/com/android/server/SystemServer.java

diff --cc Android.mk
Simple merge
@@@ -663,8 -527,9 +663,9 @@@ public final class SystemServer 
      private void startOtherServices() {
          final Context context = mSystemContext;
          VibratorService vibrator = null;
 -        IMountService mountService = null;
 +        IStorageManager storageManager = null;
          NetworkManagementService networkManagement = null;
+         IpSecService ipSecService = null;
          NetworkStatsService networkStats = null;
          NetworkPolicyManagerService networkPolicy = null;
          ConnectivityService connectivity = null;
                  } catch (Throwable e) {
                      reportWtf("starting NetworkManagement Service", e);
                  }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 +                traceEnd();
+                 traceBeginAndSlog("StartIpSecService");
+                 try {
+                     ipSecService = IpSecService.create(context);
+                     ServiceManager.addService(Context.IPSEC_SERVICE, ipSecService);
+                 } catch (Throwable e) {
+                     reportWtf("starting IpSec Service", e);
+                 }
+                 Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
              }
  
 +            if (!disableNonCoreServices) {
 +                traceBeginAndSlog("StartFontServiceManager");
 +                mSystemServiceManager.startService(FontManagerService.Lifecycle.class);
 +                traceEnd();
 +            }
 +
              if (!disableNonCoreServices && !disableTextServices) {
 +                traceBeginAndSlog("StartTextServicesManager");
                  mSystemServiceManager.startService(TextServicesManagerService.Lifecycle.class);
 +                traceEnd();
 +            }
 +
 +            if (!disableNonCoreServices) {
 +                traceBeginAndSlog("StartTextClassificationService");
 +                mSystemServiceManager.startService(TextClassificationService.Lifecycle.class);
 +                traceEnd();
              }
  
              if (!disableNetwork) {
          // where third party code can really run (but before it has actually
          // started launching the initial applications), for us to complete our
          // initialization.
 -        mActivityManagerService.systemReady(new Runnable() {
 -            @Override
 -            public void run() {
 -                Slog.i(TAG, "Making services ready");
 -                mSystemServiceManager.startBootPhase(
 -                        SystemService.PHASE_ACTIVITY_MANAGER_READY);
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "PhaseActivityManagerReady");
 -
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartObservingNativeCrashes");
 -                try {
 -                    mActivityManagerService.startObservingNativeCrashes();
 -                } catch (Throwable e) {
 -                    reportWtf("observing native crashes", e);
 -                }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 -
 -                if (!mOnlyCore) {
 -                    Slog.i(TAG, "WebViewFactory preparation");
 -                    Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "WebViewFactoryPreparation");
 +        mActivityManagerService.systemReady(() -> {
 +            Slog.i(TAG, "Making services ready");
 +            traceBeginAndSlog("StartActivityManagerReadyPhase");
 +            mSystemServiceManager.startBootPhase(
 +                    SystemService.PHASE_ACTIVITY_MANAGER_READY);
 +            traceEnd();
 +            traceBeginAndSlog("StartObservingNativeCrashes");
 +            try {
 +                mActivityManagerService.startObservingNativeCrashes();
 +            } catch (Throwable e) {
 +                reportWtf("observing native crashes", e);
 +            }
 +            traceEnd();
 +
 +            // No dependency on Webview preparation in system server. But this should
 +            // be completed before allowring 3rd party
 +            final String WEBVIEW_PREPARATION = "WebViewFactoryPreparation";
 +            Future<?> webviewPrep = null;
 +            if (!mOnlyCore) {
 +                webviewPrep = SystemServerInitThreadPool.get().submit(() -> {
 +                    Slog.i(TAG, WEBVIEW_PREPARATION);
 +                    BootTimingsTraceLog traceLog = new BootTimingsTraceLog(
 +                            SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER);
 +                    traceLog.traceBegin(WEBVIEW_PREPARATION);
 +                    ConcurrentUtils.waitForFutureNoInterrupt(mZygotePreload, "Zygote preload");
 +                    mZygotePreload = null;
                      mWebViewUpdateService.prepareWebViewInSystemServer();
 -                    Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 -                }
 +                    traceLog.traceEnd();
 +                }, WEBVIEW_PREPARATION);
 +            }
  
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartSystemUI");
 -                try {
 -                    startSystemUi(context);
 -                } catch (Throwable e) {
 -                    reportWtf("starting System UI", e);
 -                }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeNetworkScoreReady");
 -                try {
 -                    if (networkScoreF != null) networkScoreF.systemReady();
 -                } catch (Throwable e) {
 -                    reportWtf("making Network Score Service ready", e);
 -                }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeNetworkManagementServiceReady");
 -                try {
 -                    if (networkManagementF != null) networkManagementF.systemReady();
 -                } catch (Throwable e) {
 -                    reportWtf("making Network Managment Service ready", e);
 -                }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeIpSecServiceReady");
 -                try {
 -                    if (ipSecServiceF != null) ipSecServiceF.systemReady();
 -                } catch (Throwable e) {
 -                    reportWtf("making IpSec Service ready", e);
 -                }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeNetworkStatsServiceReady");
 -                try {
 -                    if (networkStatsF != null) networkStatsF.systemReady();
 -                } catch (Throwable e) {
 -                    reportWtf("making Network Stats Service ready", e);
 -                }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeNetworkPolicyServiceReady");
 -                try {
 -                    if (networkPolicyF != null) networkPolicyF.systemReady();
 -                } catch (Throwable e) {
 -                    reportWtf("making Network Policy Service ready", e);
 -                }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeConnectivityServiceReady");
 -                try {
 -                    if (connectivityF != null) connectivityF.systemReady();
 -                } catch (Throwable e) {
 -                    reportWtf("making Connectivity Service ready", e);
 +            traceBeginAndSlog("StartSystemUI");
 +            try {
 +                startSystemUi(context);
 +            } catch (Throwable e) {
 +                reportWtf("starting System UI", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeNetworkScoreReady");
 +            try {
 +                if (networkScoreF != null) networkScoreF.systemReady();
 +            } catch (Throwable e) {
 +                reportWtf("making Network Score Service ready", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeNetworkManagementServiceReady");
 +            try {
 +                if (networkManagementF != null) networkManagementF.systemReady();
 +            } catch (Throwable e) {
 +                reportWtf("making Network Managment Service ready", e);
 +            }
++            Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeIpSecServiceReady");
++            try {
++                if (ipSecServiceF != null) ipSecServiceF.systemReady();
++            } catch (Throwable e) {
++                reportWtf("making IpSec Service ready", e);
++            }
++            Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 +            CountDownLatch networkPolicyInitReadySignal = null;
 +            if (networkPolicyF != null) {
 +                networkPolicyInitReadySignal = networkPolicyF
 +                        .networkScoreAndNetworkManagementServiceReady();
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeNetworkStatsServiceReady");
 +            try {
 +                if (networkStatsF != null) networkStatsF.systemReady();
 +            } catch (Throwable e) {
 +                reportWtf("making Network Stats Service ready", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeConnectivityServiceReady");
 +            try {
 +                if (connectivityF != null) connectivityF.systemReady();
 +            } catch (Throwable e) {
 +                reportWtf("making Connectivity Service ready", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeNetworkPolicyServiceReady");
 +            try {
 +                if (networkPolicyF != null) {
 +                    networkPolicyF.systemReady(networkPolicyInitReadySignal);
                  }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 +            } catch (Throwable e) {
 +                reportWtf("making Network Policy Service ready", e);
 +            }
 +            traceEnd();
  
 -                Watchdog.getInstance().start();
 +            traceBeginAndSlog("StartWatchdog");
 +            Watchdog.getInstance().start();
 +            traceEnd();
  
 -                // It is now okay to let the various system services start their
 -                // third party code...
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 -                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "PhaseThirdPartyAppsCanStart");
 -                mSystemServiceManager.startBootPhase(
 -                        SystemService.PHASE_THIRD_PARTY_APPS_CAN_START);
 +            // Wait for all packages to be prepared
 +            mPackageManagerService.waitForAppDataPrepared();
  
 -                try {
 -                    if (locationF != null) locationF.systemRunning();
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying Location Service running", e);
 -                }
 -                try {
 -                    if (countryDetectorF != null) countryDetectorF.systemRunning();
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying CountryDetectorService running", e);
 -                }
 -                try {
 -                    if (networkTimeUpdaterF != null) networkTimeUpdaterF.systemRunning();
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying NetworkTimeService running", e);
 -                }
 -                try {
 -                    if (commonTimeMgmtServiceF != null) {
 -                        commonTimeMgmtServiceF.systemRunning();
 -                    }
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying CommonTimeManagementService running", e);
 -                }
 -                try {
 -                    if (atlasF != null) atlasF.systemRunning();
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying AssetAtlasService running", e);
 -                }
 -                try {
 -                    // TODO(BT) Pass parameter to input manager
 -                    if (inputManagerF != null) inputManagerF.systemRunning();
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying InputManagerService running", e);
 -                }
 -                try {
 -                    if (telephonyRegistryF != null) telephonyRegistryF.systemRunning();
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying TelephonyRegistry running", e);
 -                }
 -                try {
 -                    if (mediaRouterF != null) mediaRouterF.systemRunning();
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying MediaRouterService running", e);
 -                }
 +            // It is now okay to let the various system services start their
 +            // third party code...
 +            traceBeginAndSlog("PhaseThirdPartyAppsCanStart");
 +            // confirm webview completion before starting 3rd party
 +            if (webviewPrep != null) {
 +                ConcurrentUtils.waitForFutureNoInterrupt(webviewPrep, WEBVIEW_PREPARATION);
 +            }
 +            mSystemServiceManager.startBootPhase(
 +                    SystemService.PHASE_THIRD_PARTY_APPS_CAN_START);
 +            traceEnd();
  
 -                try {
 -                    if (mmsServiceF != null) mmsServiceF.systemRunning();
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying MmsService running", e);
 +            traceBeginAndSlog("MakeLocationServiceReady");
 +            try {
 +                if (locationF != null) locationF.systemRunning();
 +            } catch (Throwable e) {
 +                reportWtf("Notifying Location Service running", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeCountryDetectionServiceReady");
 +            try {
 +                if (countryDetectorF != null) countryDetectorF.systemRunning();
 +            } catch (Throwable e) {
 +                reportWtf("Notifying CountryDetectorService running", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeNetworkTimeUpdateReady");
 +            try {
 +                if (networkTimeUpdaterF != null) networkTimeUpdaterF.systemRunning();
 +            } catch (Throwable e) {
 +                reportWtf("Notifying NetworkTimeService running", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeCommonTimeManagementServiceReady");
 +            try {
 +                if (commonTimeMgmtServiceF != null) {
 +                    commonTimeMgmtServiceF.systemRunning();
                  }
 +            } catch (Throwable e) {
 +                reportWtf("Notifying CommonTimeManagementService running", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeInputManagerServiceReady");
 +            try {
 +                // TODO(BT) Pass parameter to input manager
 +                if (inputManagerF != null) inputManagerF.systemRunning();
 +            } catch (Throwable e) {
 +                reportWtf("Notifying InputManagerService running", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeTelephonyRegistryReady");
 +            try {
 +                if (telephonyRegistryF != null) telephonyRegistryF.systemRunning();
 +            } catch (Throwable e) {
 +                reportWtf("Notifying TelephonyRegistry running", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeMediaRouterServiceReady");
 +            try {
 +                if (mediaRouterF != null) mediaRouterF.systemRunning();
 +            } catch (Throwable e) {
 +                reportWtf("Notifying MediaRouterService running", e);
 +            }
 +            traceEnd();
 +            traceBeginAndSlog("MakeMmsServiceReady");
 +            try {
 +                if (mmsServiceF != null) mmsServiceF.systemRunning();
 +            } catch (Throwable e) {
 +                reportWtf("Notifying MmsService running", e);
 +            }
 +            traceEnd();
  
 -                try {
 -                    if (networkScoreF != null) networkScoreF.systemRunning();
 -                } catch (Throwable e) {
 -                    reportWtf("Notifying NetworkScoreService running", e);
 -                }
 -                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
 +            traceBeginAndSlog("MakeNetworkScoreServiceReady");
 +            try {
 +                if (networkScoreF != null) networkScoreF.systemRunning();
 +            } catch (Throwable e) {
 +                reportWtf("Notifying NetworkScoreService running", e);
              }
 -        });
 +            traceEnd();
 +            traceBeginAndSlog("IncidentDaemonReady");
 +            try {
 +                // 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"));
 +                if (incident != null) incident.systemRunning();
 +            } catch (Throwable e) {
 +                reportWtf("Notifying incident daemon running", e);
 +            }
 +            traceEnd();
 +        }, BOOT_TIMINGS_TRACE_LOG);
      }
  
      static final void startSystemUi(Context context) {