From e7c285725d1b6af76e7655a79a3e71f3809fdd9f Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Tue, 29 Oct 2013 14:23:51 -0400 Subject: [PATCH] Optimize sysui ui queue during keyguard unlock. Target the two biggest offenders: - Coalesce keyguard setHidden(false) calls during unlock. - Make sysui->WM call async. Found during investigation into b/11221659. Bug: 11221659 Change-Id: Icab48376bc356a933e0f9940bc2f924e2e77ab22 --- core/java/android/view/IWindowManager.aidl | 2 +- .../Keyguard/src/com/android/keyguard/KeyguardService.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 9d4af006258e2..1b76cb153cccb 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -211,7 +211,7 @@ interface IWindowManager /** * Called by the status bar to notify Views of changes to System UI visiblity. */ - void statusBarVisibilityChanged(int visibility); + oneway void statusBarVisibilityChanged(int visibility); /** * Block until the given window has been drawn to the screen. diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardService.java b/packages/Keyguard/src/com/android/keyguard/KeyguardService.java index 36b2446c6b68a..8ccd6fe1915b6 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardService.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardService.java @@ -68,6 +68,8 @@ public class KeyguardService extends Service { } private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() { + private boolean mSetHiddenCalled; + private boolean mIsHidden; public boolean isShowing() { return mKeyguardViewMediator.isShowing(); } @@ -89,7 +91,10 @@ public class KeyguardService extends Service { } public void setHidden(boolean isHidden) { checkPermission(); + if (mSetHiddenCalled && mIsHidden == isHidden) return; mKeyguardViewMediator.setHidden(isHidden); + mSetHiddenCalled = true; + mIsHidden = isHidden; } public void dismiss() { mKeyguardViewMediator.dismiss();