OSDN Git Service

Fixed Dimmer test
authorchaviw <chaviw@google.com>
Fri, 2 Feb 2018 00:06:52 +0000 (16:06 -0800)
committerchaviw <chaviw@google.com>
Fri, 2 Feb 2018 19:57:47 +0000 (11:57 -0800)
Updated code so Dimmer test can now run.

Change-Id: Ie6bebede752ff458732d659f63d5e16d95b5e2e7
Fixes: 72450130
Test: atest FrameworksServicesTests:com.android.server.wm.DimmerTests

services/core/java/com/android/server/wm/Dimmer.java
services/core/java/com/android/server/wm/SurfaceAnimator.java
services/core/java/com/android/server/wm/WindowManagerService.java
services/tests/servicestests/src/com/android/server/wm/DimmerTests.java
services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java

index 1e7cb24..4394a99 100644 (file)
@@ -129,10 +129,24 @@ class Dimmer {
      */
     private WindowContainer mHost;
     private WindowContainer mLastRequestedDimContainer;
-    private DimState mDimState;
+    @VisibleForTesting
+    DimState mDimState;
+
+    private final SurfaceAnimatorStarter mSurfaceAnimatorStarter;
+
+    @VisibleForTesting
+    interface SurfaceAnimatorStarter {
+        void startAnimation(SurfaceAnimator surfaceAnimator, SurfaceControl.Transaction t,
+                AnimationAdapter anim, boolean hidden);
+    }
 
     Dimmer(WindowContainer host) {
+        this(host, SurfaceAnimator::startAnimation);
+    }
+
+    Dimmer(WindowContainer host, SurfaceAnimatorStarter surfaceAnimatorStarter) {
         mHost = host;
+        mSurfaceAnimatorStarter = surfaceAnimatorStarter;
     }
 
     private SurfaceControl makeDimLayer() {
@@ -285,7 +299,7 @@ class Dimmer {
 
     private void startAnim(WindowContainer container, SurfaceAnimator animator,
             SurfaceControl.Transaction t, float startAlpha, float endAlpha) {
-        animator.startAnimation(t, new LocalAnimationAdapter(
+        mSurfaceAnimatorStarter.startAnimation(animator, t, new LocalAnimationAdapter(
                 new AlphaAnimationSpec(startAlpha, endAlpha, getDimDuration(container)),
                 mHost.mService.mSurfaceAnimationRunner), false /* hidden */);
     }
index 0512a08..83baee1 100644 (file)
@@ -53,7 +53,8 @@ class SurfaceAnimator {
     SurfaceControl mLeash;
     private final Animatable mAnimatable;
     private final OnAnimationFinishedCallback mInnerAnimationFinishedCallback;
-    private final Runnable mAnimationFinishedCallback;
+    @VisibleForTesting
+    final Runnable mAnimationFinishedCallback;
     private boolean mAnimationStartDelayed;
 
     /**
index 066e4e6..4fb2390 100644 (file)
@@ -907,16 +907,9 @@ public class WindowManagerService extends IWindowManager.Stub
     public static WindowManagerService main(final Context context, final InputManagerService im,
             final boolean haveInputMethods, final boolean showBootMsgs, final boolean onlyCore,
             WindowManagerPolicy policy) {
-        return main(context, im, haveInputMethods, showBootMsgs, onlyCore, policy,
-                new SurfaceAnimationRunner());
-    }
-
-    public static WindowManagerService main(final Context context, final InputManagerService im,
-            final boolean haveInputMethods, final boolean showBootMsgs, final boolean onlyCore,
-            WindowManagerPolicy policy, SurfaceAnimationRunner surfaceAnimationRunner) {
         DisplayThread.getHandler().runWithScissors(() ->
                 sInstance = new WindowManagerService(context, im, haveInputMethods, showBootMsgs,
-                        onlyCore, policy, surfaceAnimationRunner), 0);
+                        onlyCore, policy), 0);
         return sInstance;
     }
 
@@ -939,7 +932,7 @@ public class WindowManagerService extends IWindowManager.Stub
 
     private WindowManagerService(Context context, InputManagerService inputManager,
             boolean haveInputMethods, boolean showBootMsgs, boolean onlyCore,
-            WindowManagerPolicy policy, SurfaceAnimationRunner surfaceAnimationRunner) {
+            WindowManagerPolicy policy) {
         installLock(this, INDEX_WINDOW);
         mContext = context;
         mHaveInputMethods = haveInputMethods;
@@ -1066,7 +1059,7 @@ public class WindowManagerService extends IWindowManager.Stub
                 PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG_WM);
         mHoldingScreenWakeLock.setReferenceCounted(false);
 
-        mSurfaceAnimationRunner = surfaceAnimationRunner;
+        mSurfaceAnimationRunner = new SurfaceAnimationRunner();
 
         mAllowTheaterModeWakeFromLayout = context.getResources().getBoolean(
                 com.android.internal.R.bool.config_allowTheaterModeWakeFromWindowLayout);
index 396fef4..57dd808 100644 (file)
@@ -18,11 +18,9 @@ package com.android.server.wm;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 import android.graphics.Rect;
@@ -32,24 +30,17 @@ import android.view.SurfaceControl;
 import android.view.SurfaceSession;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.stubbing.Answer;
 
 /**
  * Build/Install/Run:
  * atest FrameworksServicesTests:com.android.server.wm.DimmerTests;
  */
 @Presubmit
-@Ignore("b/72450130")
 @RunWith(AndroidJUnit4.class)
 public class DimmerTests extends WindowTestsBase {
 
-    public DimmerTests() {
-        super(spy(new SurfaceAnimationRunner()));
-    }
-
     private class TestWindowContainer extends WindowContainer<TestWindowContainer> {
         final SurfaceControl mControl = mock(SurfaceControl.class);
         final SurfaceControl.Transaction mTransaction = mock(SurfaceControl.Transaction.class);
@@ -71,14 +62,11 @@ public class DimmerTests extends WindowTestsBase {
 
     private class MockSurfaceBuildingContainer extends WindowContainer<TestWindowContainer> {
         final SurfaceSession mSession = new SurfaceSession();
+        final SurfaceControl mHostControl = mock(SurfaceControl.class);
         final SurfaceControl.Transaction mHostTransaction = mock(SurfaceControl.Transaction.class);
 
         MockSurfaceBuildingContainer() {
             super(sWm);
-            mSurfaceControl = sWm.makeSurfaceBuilder(mSession)
-                    .setName("test surface")
-                    .setSize(1, 1)
-                    .build();
         }
 
         class MockSurfaceBuilder extends SurfaceControl.Builder {
@@ -88,23 +76,18 @@ public class DimmerTests extends WindowTestsBase {
 
             @Override
             public SurfaceControl build() {
-                return spy(sWm.makeSurfaceBuilder(mSession)
-                        .setName("test surface")
-                        .setSize(1, 1)
-                        .build());
+                return mock(SurfaceControl.class);
             }
         }
 
         @Override
-        SurfaceControl.Builder makeSurface() {
-            return sWm.makeSurfaceBuilder(mSession)
-                    .setName("test surface")
-                    .setSize(1, 1);
+        SurfaceControl.Builder makeChildSurface(WindowContainer child) {
+            return new MockSurfaceBuilder(mSession);
         }
 
         @Override
-        SurfaceControl.Builder makeChildSurface(WindowContainer child) {
-            return new MockSurfaceBuilder(mSession);
+        public SurfaceControl getSurfaceControl() {
+            return mHostControl;
         }
 
         @Override
@@ -113,9 +96,9 @@ public class DimmerTests extends WindowTestsBase {
         }
     }
 
-    MockSurfaceBuildingContainer mHost;
-    Dimmer mDimmer;
-    SurfaceControl.Transaction mTransaction;
+    private MockSurfaceBuildingContainer mHost;
+    private Dimmer mDimmer;
+    private SurfaceControl.Transaction mTransaction;
 
     @Before
     public void setUp() throws Exception {
@@ -123,13 +106,9 @@ public class DimmerTests extends WindowTestsBase {
         mHost = new MockSurfaceBuildingContainer();
 
         mTransaction = mock(SurfaceControl.Transaction.class);
-        mDimmer = new Dimmer(mHost);
-
-        doAnswer((Answer<Void>) invocation -> {
-            Runnable runnable = invocation.getArgument(3);
-            runnable.run();
-            return null;
-        }).when(sWm.mSurfaceAnimationRunner).startAnimation(any(), any(), any(), any());
+        mDimmer = new Dimmer(mHost,
+                (surfaceAnimator, t, anim, hidden) -> surfaceAnimator.mAnimationFinishedCallback
+                        .run());
     }
 
     @Test
@@ -137,7 +116,7 @@ public class DimmerTests extends WindowTestsBase {
         final float alpha = 0.8f;
         mDimmer.dimAbove(mTransaction, alpha);
 
-        SurfaceControl dimLayer = getDimLayer(null);
+        SurfaceControl dimLayer = getDimLayer();
 
         assertNotNull("Dimmer should have created a surface", dimLayer);
 
@@ -149,12 +128,12 @@ public class DimmerTests extends WindowTestsBase {
     public void testDimAboveNoChildRedundantlyUpdatesAlphaOnExistingSurface() throws Exception {
         float alpha = 0.8f;
         mDimmer.dimAbove(mTransaction, alpha);
-        final SurfaceControl firstSurface = getDimLayer(null);
+        final SurfaceControl firstSurface = getDimLayer();
 
         alpha = 0.9f;
         mDimmer.dimAbove(mTransaction, alpha);
 
-        assertEquals(firstSurface, getDimLayer(null));
+        assertEquals(firstSurface, getDimLayer());
         verify(mTransaction).setAlpha(firstSurface, 0.9f);
     }
 
@@ -167,18 +146,18 @@ public class DimmerTests extends WindowTestsBase {
         Rect bounds = new Rect(0, 0, width, height);
         mDimmer.updateDims(mTransaction, bounds);
 
-        verify(mTransaction).setSize(getDimLayer(null), width, height);
-        verify(mTransaction).show(getDimLayer(null));
+        verify(mTransaction).setSize(getDimLayer(), width, height);
+        verify(mTransaction).show(getDimLayer());
     }
 
     @Test
     public void testDimAboveNoChildNotReset() throws Exception {
         mDimmer.dimAbove(mTransaction, 0.8f);
-        SurfaceControl dimLayer = getDimLayer(null);
+        SurfaceControl dimLayer = getDimLayer();
         mDimmer.resetDimStates();
 
         mDimmer.updateDims(mTransaction, new Rect());
-        verify(mTransaction).show(getDimLayer(null));
+        verify(mTransaction).show(getDimLayer());
         verify(dimLayer, never()).destroy();
     }
 
@@ -189,12 +168,12 @@ public class DimmerTests extends WindowTestsBase {
 
         final float alpha = 0.8f;
         mDimmer.dimAbove(mTransaction, child, alpha);
-        SurfaceControl mDimLayer = getDimLayer(child);
+        SurfaceControl dimLayer = getDimLayer();
 
-        assertNotNull("Dimmer should have created a surface", mDimLayer);
+        assertNotNull("Dimmer should have created a surface", dimLayer);
 
-        verify(mTransaction).setAlpha(mDimLayer, alpha);
-        verify(mTransaction).setRelativeLayer(mDimLayer, child.mControl, 1);
+        verify(mTransaction).setAlpha(dimLayer, alpha);
+        verify(mTransaction).setRelativeLayer(dimLayer, child.mControl, 1);
     }
 
     @Test
@@ -204,12 +183,12 @@ public class DimmerTests extends WindowTestsBase {
 
         final float alpha = 0.8f;
         mDimmer.dimBelow(mTransaction, child, alpha);
-        SurfaceControl mDimLayer = getDimLayer(child);
+        SurfaceControl dimLayer = getDimLayer();
 
-        assertNotNull("Dimmer should have created a surface", mDimLayer);
+        assertNotNull("Dimmer should have created a surface", dimLayer);
 
-        verify(mTransaction).setAlpha(mDimLayer, alpha);
-        verify(mTransaction).setRelativeLayer(mDimLayer, child.mControl, -1);
+        verify(mTransaction).setAlpha(dimLayer, alpha);
+        verify(mTransaction).setRelativeLayer(dimLayer, child.mControl, -1);
     }
 
     @Test
@@ -219,7 +198,7 @@ public class DimmerTests extends WindowTestsBase {
 
         final float alpha = 0.8f;
         mDimmer.dimAbove(mTransaction, child, alpha);
-        SurfaceControl dimLayer = getDimLayer(child);
+        SurfaceControl dimLayer = getDimLayer();
         mDimmer.resetDimStates();
 
         mDimmer.updateDims(mTransaction, new Rect());
@@ -233,7 +212,7 @@ public class DimmerTests extends WindowTestsBase {
 
         final float alpha = 0.8f;
         mDimmer.dimAbove(mTransaction, child, alpha);
-        SurfaceControl dimLayer = getDimLayer(child);
+        SurfaceControl dimLayer = getDimLayer();
         mDimmer.resetDimStates();
         mDimmer.dimAbove(mTransaction, child, alpha);
 
@@ -242,7 +221,29 @@ public class DimmerTests extends WindowTestsBase {
         verify(dimLayer, never()).destroy();
     }
 
-    private SurfaceControl getDimLayer(WindowContainer windowContainer) {
-        return mDimmer.mDimLayerUsers.get(windowContainer).mDimLayer;
+    @Test
+    public void testDimUpdateWhileDimming() throws Exception {
+        Rect bounds = new Rect();
+        TestWindowContainer child = new TestWindowContainer();
+        mHost.addChild(child, 0);
+
+        final float alpha = 0.8f;
+        mDimmer.dimAbove(mTransaction, child, alpha);
+
+        SurfaceControl dimLayer = getDimLayer();
+        bounds.set(0, 0, 10, 10);
+        mDimmer.updateDims(mTransaction, bounds);
+        verify(mTransaction, times(1)).show(dimLayer);
+        verify(mTransaction).setSize(dimLayer, bounds.width(), bounds.height());
+        verify(mTransaction).setPosition(dimLayer, 0, 0);
+
+        bounds.set(10, 10, 30, 30);
+        mDimmer.updateDims(mTransaction, bounds);
+        verify(mTransaction).setSize(dimLayer, bounds.width(), bounds.height());
+        verify(mTransaction).setPosition(dimLayer, 10, 10);
+    }
+
+    private SurfaceControl getDimLayer() {
+        return mDimmer.mDimState.mDimLayer;
     }
 }
index 81fd889..000cf38 100644 (file)
@@ -69,11 +69,6 @@ class TestWindowManagerPolicy implements WindowManagerPolicy {
     private Runnable mRunnableWhenAddingSplashScreen;
 
     static synchronized WindowManagerService getWindowManagerService(Context context) {
-        return getWindowManagerService(context, new SurfaceAnimationRunner());
-    }
-
-    static synchronized WindowManagerService getWindowManagerService(Context context,
-            SurfaceAnimationRunner surfaceAnimationRunner) {
         if (sWm == null) {
             // We only want to do this once for the test process as we don't want WM to try to
             // register a bunch of local services again.
@@ -111,7 +106,7 @@ class TestWindowManagerPolicy implements WindowManagerPolicy {
             }
 
             sWm = WindowManagerService.main(context, ims, true, false,
-                    false, new TestWindowManagerPolicy(), surfaceAnimationRunner);
+                    false, new TestWindowManagerPolicy());
         }
         return sWm;
     }
index 7918901..69b1378 100644 (file)
@@ -84,16 +84,6 @@ class WindowTestsBase {
     WindowState mChildAppWindowBelow;
     HashSet<WindowState> mCommonWindows;
 
-    private final SurfaceAnimationRunner mSurfaceAnimationRunner;
-
-    public WindowTestsBase() {
-        this(new SurfaceAnimationRunner());
-    }
-
-    public WindowTestsBase(SurfaceAnimationRunner surfaceAnimationRunner) {
-        mSurfaceAnimationRunner = surfaceAnimationRunner;
-    }
-
     @Before
     public void setUp() throws Exception {
         if (!sOneTimeSetupDone) {
@@ -108,7 +98,7 @@ class WindowTestsBase {
         final Context context = InstrumentationRegistry.getTargetContext();
         AttributeCache.init(context);
 
-        sWm = TestWindowManagerPolicy.getWindowManagerService(context, mSurfaceAnimationRunner);
+        sWm = TestWindowManagerPolicy.getWindowManagerService(context);
         beforeCreateDisplay();
 
         context.getDisplay().getDisplayInfo(mDisplayInfo);