diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 71ebad91191fc..f516e99a79695 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -259,6 +259,11 @@ final class UserController { int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000); MetricsLogger.histogram(mInjector.getContext(), "framework_locked_boot_completed", uptimeSeconds); + final int MAX_UPTIME_SECONDS = 120; + if (uptimeSeconds > MAX_UPTIME_SECONDS) { + Slog.wtf("SystemServerTiming", + "finishUserBoot took too long. uptimeSeconds=" + uptimeSeconds); + } } mHandler.sendMessage(mHandler.obtainMessage(REPORT_LOCKED_BOOT_COMPLETE_MSG, diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 68cb0c5e3eaa1..5d2be6cc97014 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -381,8 +381,13 @@ public final class SystemServer { Slog.i(TAG, "Enabled StrictMode for system server main thread."); } if (!mRuntimeRestart && !mFirstBoot) { - MetricsLogger.histogram(null, "boot_system_server_ready", - (int) SystemClock.elapsedRealtime()); + int uptimeMillis = (int) SystemClock.elapsedRealtime(); + MetricsLogger.histogram(null, "boot_system_server_ready", uptimeMillis); + final int MAX_UPTIME_MILLIS = 60 * 1000; + if (uptimeMillis > MAX_UPTIME_MILLIS) { + Slog.wtf("SystemServerTiming", + "SystemServer init took too long. uptimeMillis=" + uptimeMillis); + } } // Loop forever.