Loading services/core/jni/com_android_server_SystemServer.cpp +1 −8 Original line number Diff line number Diff line Loading @@ -26,18 +26,11 @@ namespace android { static int start_sensor_service(void* /*unused*/) { SensorService::instantiate(); return 0; } static void android_server_SystemServer_startSensorService(JNIEnv* /* env */, jobject /* clazz */) { char propBuf[PROPERTY_VALUE_MAX]; property_get("system_init.startsensorservice", propBuf, "1"); if (strcmp(propBuf, "1") == 0) { // Start the sensor service in a new thread createThreadEtc(start_sensor_service, nullptr, "StartSensorThread", PRIORITY_FOREGROUND); SensorService::instantiate(); } } Loading services/java/com/android/server/SystemServer.java +28 −11 Original line number Diff line number Diff line Loading @@ -125,8 +125,13 @@ import static android.view.Display.DEFAULT_DISPLAY; public final class SystemServer { private static final String TAG = "SystemServer"; // Tag for timing measurement of main thread. private static final String SYSTEM_SERVER_TIMING_TAG = "SystemServerTiming"; // Tag for timing measurement of non-main asynchronous operations. private static final String SYSTEM_SERVER_TIMING_ASYNC_TAG = SYSTEM_SERVER_TIMING_TAG + "Async"; private static final BootTimingsTraceLog BOOT_TIMINGS_TRACE_LOG = new BootTimingsTraceLog("SystemServerTiming", Trace.TRACE_TAG_SYSTEM_SERVER); = new BootTimingsTraceLog(SYSTEM_SERVER_TIMING_TAG, Trace.TRACE_TAG_SYSTEM_SERVER); private static final String ENCRYPTING_STATE = "trigger_restart_min_framework"; private static final String ENCRYPTED_STATE = "1"; Loading Loading @@ -227,8 +232,11 @@ public final class SystemServer { private boolean mFirstBoot; private final boolean mRuntimeRestart; private static final String START_SENSOR_SERVICE = "StartSensorService"; private Future<?> mSensorServiceStart; /** * Start the sensor service. * Start the sensor service. This is a blocking call and can take time. */ private static native void startSensorService(); Loading Loading @@ -382,7 +390,7 @@ public final class SystemServer { MetricsLogger.histogram(null, "boot_system_server_ready", uptimeMillis); final int MAX_UPTIME_MILLIS = 60 * 1000; if (uptimeMillis > MAX_UPTIME_MILLIS) { Slog.wtf("SystemServerTiming", Slog.wtf(SYSTEM_SERVER_TIMING_TAG, "SystemServer init took too long. uptimeMillis=" + uptimeMillis); } } Loading Loading @@ -584,9 +592,15 @@ public final class SystemServer { // The sensor service needs access to package manager service, app ops // service, and permissions service, therefore we start it after them. traceBeginAndSlog("StartSensorService"); // Start sensor service in a separate thread. Completion should be checked // before using it. mSensorServiceStart = SystemServerInitThreadPool.get().submit(() -> { BootTimingsTraceLog traceLog = new BootTimingsTraceLog( SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER); traceLog.traceBegin(START_SENSOR_SERVICE); startSensorService(); traceEnd(); traceLog.traceEnd(); }, START_SENSOR_SERVICE); } /** Loading Loading @@ -742,6 +756,9 @@ public final class SystemServer { traceEnd(); traceBeginAndSlog("StartWindowManagerService"); // WMS needs sensor service ready ConcurrentUtils.waitForFutureNoInterrupt(mSensorServiceStart, START_SENSOR_SERVICE); mSensorServiceStart = null; wm = WindowManagerService.main(context, inputManager, mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL, !mFirstBoot, mOnlyCore, new PhoneWindowManager()); Loading Loading @@ -1590,7 +1607,7 @@ public final class SystemServer { webviewPrep = SystemServerInitThreadPool.get().submit(() -> { Slog.i(TAG, WEBVIEW_PREPARATION); BootTimingsTraceLog traceLog = new BootTimingsTraceLog( "SystemServerTiming", Trace.TRACE_TAG_SYSTEM_SERVER); SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER); traceLog.traceBegin(WEBVIEW_PREPARATION); mWebViewUpdateService.prepareWebViewInSystemServer(); traceLog.traceEnd(); Loading Loading @@ -1651,13 +1668,13 @@ public final class SystemServer { Watchdog.getInstance().start(); traceEnd(); if (webviewPrep != null) { ConcurrentUtils.waitForFutureNoInterrupt(webviewPrep, WEBVIEW_PREPARATION); } // 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(); Loading Loading
services/core/jni/com_android_server_SystemServer.cpp +1 −8 Original line number Diff line number Diff line Loading @@ -26,18 +26,11 @@ namespace android { static int start_sensor_service(void* /*unused*/) { SensorService::instantiate(); return 0; } static void android_server_SystemServer_startSensorService(JNIEnv* /* env */, jobject /* clazz */) { char propBuf[PROPERTY_VALUE_MAX]; property_get("system_init.startsensorservice", propBuf, "1"); if (strcmp(propBuf, "1") == 0) { // Start the sensor service in a new thread createThreadEtc(start_sensor_service, nullptr, "StartSensorThread", PRIORITY_FOREGROUND); SensorService::instantiate(); } } Loading
services/java/com/android/server/SystemServer.java +28 −11 Original line number Diff line number Diff line Loading @@ -125,8 +125,13 @@ import static android.view.Display.DEFAULT_DISPLAY; public final class SystemServer { private static final String TAG = "SystemServer"; // Tag for timing measurement of main thread. private static final String SYSTEM_SERVER_TIMING_TAG = "SystemServerTiming"; // Tag for timing measurement of non-main asynchronous operations. private static final String SYSTEM_SERVER_TIMING_ASYNC_TAG = SYSTEM_SERVER_TIMING_TAG + "Async"; private static final BootTimingsTraceLog BOOT_TIMINGS_TRACE_LOG = new BootTimingsTraceLog("SystemServerTiming", Trace.TRACE_TAG_SYSTEM_SERVER); = new BootTimingsTraceLog(SYSTEM_SERVER_TIMING_TAG, Trace.TRACE_TAG_SYSTEM_SERVER); private static final String ENCRYPTING_STATE = "trigger_restart_min_framework"; private static final String ENCRYPTED_STATE = "1"; Loading Loading @@ -227,8 +232,11 @@ public final class SystemServer { private boolean mFirstBoot; private final boolean mRuntimeRestart; private static final String START_SENSOR_SERVICE = "StartSensorService"; private Future<?> mSensorServiceStart; /** * Start the sensor service. * Start the sensor service. This is a blocking call and can take time. */ private static native void startSensorService(); Loading Loading @@ -382,7 +390,7 @@ public final class SystemServer { MetricsLogger.histogram(null, "boot_system_server_ready", uptimeMillis); final int MAX_UPTIME_MILLIS = 60 * 1000; if (uptimeMillis > MAX_UPTIME_MILLIS) { Slog.wtf("SystemServerTiming", Slog.wtf(SYSTEM_SERVER_TIMING_TAG, "SystemServer init took too long. uptimeMillis=" + uptimeMillis); } } Loading Loading @@ -584,9 +592,15 @@ public final class SystemServer { // The sensor service needs access to package manager service, app ops // service, and permissions service, therefore we start it after them. traceBeginAndSlog("StartSensorService"); // Start sensor service in a separate thread. Completion should be checked // before using it. mSensorServiceStart = SystemServerInitThreadPool.get().submit(() -> { BootTimingsTraceLog traceLog = new BootTimingsTraceLog( SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER); traceLog.traceBegin(START_SENSOR_SERVICE); startSensorService(); traceEnd(); traceLog.traceEnd(); }, START_SENSOR_SERVICE); } /** Loading Loading @@ -742,6 +756,9 @@ public final class SystemServer { traceEnd(); traceBeginAndSlog("StartWindowManagerService"); // WMS needs sensor service ready ConcurrentUtils.waitForFutureNoInterrupt(mSensorServiceStart, START_SENSOR_SERVICE); mSensorServiceStart = null; wm = WindowManagerService.main(context, inputManager, mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL, !mFirstBoot, mOnlyCore, new PhoneWindowManager()); Loading Loading @@ -1590,7 +1607,7 @@ public final class SystemServer { webviewPrep = SystemServerInitThreadPool.get().submit(() -> { Slog.i(TAG, WEBVIEW_PREPARATION); BootTimingsTraceLog traceLog = new BootTimingsTraceLog( "SystemServerTiming", Trace.TRACE_TAG_SYSTEM_SERVER); SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER); traceLog.traceBegin(WEBVIEW_PREPARATION); mWebViewUpdateService.prepareWebViewInSystemServer(); traceLog.traceEnd(); Loading Loading @@ -1651,13 +1668,13 @@ public final class SystemServer { Watchdog.getInstance().start(); traceEnd(); if (webviewPrep != null) { ConcurrentUtils.waitForFutureNoInterrupt(webviewPrep, WEBVIEW_PREPARATION); } // 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(); Loading