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
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 9d4af00..1b76cb1 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -211,7 +211,7 @@
     /**
      * 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 36b2446..8ccd6fe 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardService.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardService.java
@@ -68,6 +68,8 @@
     }
 
     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 void setHidden(boolean isHidden) {
             checkPermission();
+            if (mSetHiddenCalled && mIsHidden == isHidden) return;
             mKeyguardViewMediator.setHidden(isHidden);
+            mSetHiddenCalled = true;
+            mIsHidden = isHidden;
         }
         public void dismiss() {
             mKeyguardViewMediator.dismiss();