summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2012-06-24 12:15:38 -0700
committerJeff Brown <jeffbrown@google.com>2012-06-24 13:51:41 -0700
commit780c46fc9197f7ecb258e2c229824749f9e93806 (patch)
tree3b1d4d9ee8870eadb6aeac0d34f8b5f8d1b4b2e1
parent08a746a0c60d19eb2211924ffd9fe1e452a261a6 (diff)
downloadframeworks_base-780c46fc9197f7ecb258e2c229824749f9e93806.zip
frameworks_base-780c46fc9197f7ecb258e2c229824749f9e93806.tar.gz
frameworks_base-780c46fc9197f7ecb258e2c229824749f9e93806.tar.bz2
Don't wait until boot timeout if there is no wallpaper.
When launching only core apps, the wallpaper service is not started. Without this change the WM waits up to 30 seconds for the wallpaper window to be created even though it will never happen. This introduces a significant delay before the boot animation is dismissed so the user can enter a decryption password. Bug: 6263070 Change-Id: Ia975127a0bf09cf99818f7cc4fd6c0264b740ec6
-rw-r--r--services/java/com/android/server/SystemServer.java2
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java25
2 files changed, 19 insertions, 8 deletions
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index eaecd4c..9dd4a91 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -229,7 +229,7 @@ class ServerThread extends Thread {
Slog.i(TAG, "Window Manager");
wm = WindowManagerService.main(context, power,
factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL,
- !firstBoot);
+ !firstBoot, onlyCore);
ServiceManager.addService(Context.WINDOW_SERVICE, wm);
inputManager = wm.getInputManagerService();
ServiceManager.addService(Context.INPUT_SERVICE, inputManager);
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index f84451e..6906ed9 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -758,9 +758,15 @@ public class WindowManagerService extends IWindowManager.Stub
// The desired scaling factor for compatible apps.
float mCompatibleScreenScale;
+ // If true, only the core apps and services are being launched because the device
+ // is in a special boot mode, such as being encrypted or waiting for a decryption password.
+ // For example, when this flag is true, there will be no wallpaper service.
+ final boolean mOnlyCore;
+
public static WindowManagerService main(Context context,
- PowerManagerService pm, boolean haveInputMethods, boolean allowBootMsgs) {
- WMThread thr = new WMThread(context, pm, haveInputMethods, allowBootMsgs);
+ PowerManagerService pm, boolean haveInputMethods, boolean allowBootMsgs,
+ boolean onlyCore) {
+ WMThread thr = new WMThread(context, pm, haveInputMethods, allowBootMsgs, onlyCore);
thr.start();
synchronized (thr) {
@@ -781,21 +787,23 @@ public class WindowManagerService extends IWindowManager.Stub
private final PowerManagerService mPM;
private final boolean mHaveInputMethods;
private final boolean mAllowBootMessages;
+ private final boolean mOnlyCore;
public WMThread(Context context, PowerManagerService pm,
- boolean haveInputMethods, boolean allowBootMsgs) {
+ boolean haveInputMethods, boolean allowBootMsgs, boolean onlyCore) {
super("WindowManager");
mContext = context;
mPM = pm;
mHaveInputMethods = haveInputMethods;
mAllowBootMessages = allowBootMsgs;
+ mOnlyCore = onlyCore;
}
@Override
public void run() {
Looper.prepare();
WindowManagerService s = new WindowManagerService(mContext, mPM,
- mHaveInputMethods, mAllowBootMessages);
+ mHaveInputMethods, mAllowBootMessages, mOnlyCore);
android.os.Process.setThreadPriority(
android.os.Process.THREAD_PRIORITY_DISPLAY);
android.os.Process.setCanSelfBackground(false);
@@ -858,10 +866,11 @@ public class WindowManagerService extends IWindowManager.Stub
}
private WindowManagerService(Context context, PowerManagerService pm,
- boolean haveInputMethods, boolean showBootMsgs) {
+ boolean haveInputMethods, boolean showBootMsgs, boolean onlyCore) {
mContext = context;
mHaveInputMethods = haveInputMethods;
mAllowBootMessages = showBootMsgs;
+ mOnlyCore = onlyCore;
mLimitedAlphaCompositing = context.getResources().getBoolean(
com.android.internal.R.bool.config_sf_limitedAlpha);
mHeadless = "1".equals(SystemProperties.get(SYSTEM_HEADLESS, "0"));
@@ -5191,7 +5200,8 @@ public class WindowManagerService extends IWindowManager.Stub
Slog.i(TAG, "performEnableScreen: mDisplayEnabled=" + mDisplayEnabled
+ " mForceDisplayEnabled=" + mForceDisplayEnabled
+ " mShowingBootMessages=" + mShowingBootMessages
- + " mSystemBooted=" + mSystemBooted, here);
+ + " mSystemBooted=" + mSystemBooted
+ + " mOnlyCore=" + mOnlyCore, here);
}
if (mDisplayEnabled) {
return;
@@ -5209,7 +5219,8 @@ public class WindowManagerService extends IWindowManager.Stub
// wallpaper, don't bother waiting for it
boolean haveWallpaper = false;
boolean wallpaperEnabled = mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_enableWallpaperService);
+ com.android.internal.R.bool.config_enableWallpaperService)
+ && !mOnlyCore;
boolean haveKeyguard = true;
final int N = mWindows.size();
for (int i=0; i<N; i++) {