OSDN Git Service

Avoid unecessary IPC during scrim animation
authorLucas Dupin <dupin@google.com>
Mon, 18 Dec 2017 21:47:14 +0000 (13:47 -0800)
committerLucas Dupin <dupin@google.com>
Tue, 19 Dec 2017 00:48:58 +0000 (16:48 -0800)
Bug: 69931869
Test: runtest systemui-jank -c android.platform.systemui.tests.jank.SystemUiJankTests -m testUnlock
Change-Id: Ifb6cf0baef4a0c68bd7c7e0ac33e57a4168ef027

packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java

index 8abc3f4..14329b5 100644 (file)
@@ -255,8 +255,13 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
             mKeyguardFadeoutAnimation.cancel();
         }
 
-        // Do not let the device sleep until we're done with all animations
-        holdWakeLock();
+        // The device might sleep if it's entering AOD, we need to make sure that
+        // the animation plays properly until the last frame.
+        // It's important to avoid holding the wakelock unless necessary because
+        // WakeLock#aqcuire will trigger an IPC and will cause jank.
+        if (mState == ScrimState.AOD) {
+            holdWakeLock();
+        }
 
         // AOD wallpapers should fade away after a while
         if (mWallpaperSupportsAmbientMode && mDozeParameters.getAlwaysOn()
index 9b7efe9..6d2691c 100644 (file)
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import android.animation.Animator;
@@ -275,7 +276,7 @@ public class ScrimControllerTest extends SysuiTestCase {
     }
 
     @Test
-    public void testHoldsWakeLock() {
+    public void testHoldsWakeLock_whenAOD() {
         mScrimController.transitionTo(ScrimState.AOD);
         verify(mWakeLock).acquire();
         verify(mWakeLock, never()).release();
@@ -284,6 +285,13 @@ public class ScrimControllerTest extends SysuiTestCase {
     }
 
     @Test
+    public void testDoesNotHoldWakeLock_whenUnlocking() {
+        mScrimController.transitionTo(ScrimState.UNLOCKED);
+        mScrimController.finishAnimationsImmediately();
+        verifyZeroInteractions(mWakeLock);
+    }
+
+    @Test
     public void testCallbackInvokedOnSameStateTransition() {
         mScrimController.transitionTo(ScrimState.UNLOCKED);
         mScrimController.finishAnimationsImmediately();