1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17 package android.server.wm; 18 19 import static android.app.ActivityTaskManager.INVALID_STACK_ID; 20 import static android.server.wm.CliIntentExtra.extraString; 21 import static android.server.wm.app.Components.MPP_ACTIVITY; 22 import static android.server.wm.app.Components.MPP_ACTIVITY2; 23 import static android.server.wm.app.Components.MPP_ACTIVITY3; 24 import static android.server.wm.app.Components.MinimalPostProcessingActivity.EXTRA_PREFER_MPP; 25 import static android.server.wm.app.Components.POPUP_MPP_ACTIVITY; 26 27 import static org.junit.Assert.assertNotEquals; 28 import static org.junit.Assert.assertTrue; 29 30 import android.content.ComponentName; 31 import android.platform.test.annotations.Presubmit; 32 33 import org.junit.Test; 34 35 @Presubmit 36 public class MinimalPostProcessingTests extends ActivityManagerTestBase { 37 private static final boolean PREFER_MPP = true; 38 private static final boolean NOT_PREFER_MPP = false; 39 launchMppActivity(ComponentName name, boolean preferMinimalPostProcessing)40 private void launchMppActivity(ComponentName name, boolean preferMinimalPostProcessing) { 41 if (preferMinimalPostProcessing) { 42 launchActivity(name, extraString(EXTRA_PREFER_MPP, "anything")); 43 } else { 44 launchActivity(name); 45 } 46 mWmState.waitForValidState(name); 47 48 final int stackId = mWmState.getRootTaskIdByActivity(name); 49 50 assertNotEquals(stackId, INVALID_STACK_ID); 51 52 mWmState.assertVisibility(name, true); 53 } 54 isMinimalPostProcessingSupported(int displayId)55 private boolean isMinimalPostProcessingSupported(int displayId) { 56 return mDm.getDisplay(displayId).isMinimalPostProcessingSupported(); 57 } 58 isMinimalPostProcessingRequested(int displayId)59 private boolean isMinimalPostProcessingRequested(int displayId) { 60 return mDm.isMinimalPostProcessingRequested(displayId); 61 } 62 getDisplayId(ComponentName name)63 private int getDisplayId(ComponentName name) { 64 return mWmState.getDisplayByActivity(name); 65 } 66 assertDisplayRequestedMinimalPostProcessing(ComponentName name, boolean on)67 private void assertDisplayRequestedMinimalPostProcessing(ComponentName name, boolean on) { 68 final int displayId = getDisplayId(name); 69 70 boolean supported = isMinimalPostProcessingSupported(displayId); 71 boolean requested = isMinimalPostProcessingRequested(displayId); 72 73 assertTrue(supported ? requested == on : !requested); 74 } 75 76 @Test testPreferMinimalPostProcessingSimple()77 public void testPreferMinimalPostProcessingSimple() throws Exception { 78 launchMppActivity(MPP_ACTIVITY, PREFER_MPP); 79 assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, PREFER_MPP); 80 } 81 82 @Test testPreferMinimalPostProcessingDefault()83 public void testPreferMinimalPostProcessingDefault() throws Exception { 84 launchMppActivity(MPP_ACTIVITY, NOT_PREFER_MPP); 85 assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, NOT_PREFER_MPP); 86 } 87 88 @Test testAttrPreferMinimalPostProcessingSimple()89 public void testAttrPreferMinimalPostProcessingSimple() throws Exception { 90 launchMppActivity(MPP_ACTIVITY3, NOT_PREFER_MPP); 91 assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY3, PREFER_MPP); 92 } 93 94 @Test testTwoVisibleWindowsNeitherPreferMinimalPostProcessing()95 public void testTwoVisibleWindowsNeitherPreferMinimalPostProcessing() throws Exception { 96 launchMppActivity(MPP_ACTIVITY, NOT_PREFER_MPP); 97 launchMppActivity(POPUP_MPP_ACTIVITY, NOT_PREFER_MPP); 98 99 mWmState.assertVisibility(MPP_ACTIVITY, true); 100 mWmState.assertVisibility(POPUP_MPP_ACTIVITY, true); 101 102 assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, NOT_PREFER_MPP); 103 } 104 105 @Test testTwoVisibleWindowsFirstOnePrefersMinimalPostProcessing()106 public void testTwoVisibleWindowsFirstOnePrefersMinimalPostProcessing() throws Exception { 107 launchMppActivity(MPP_ACTIVITY, PREFER_MPP); 108 launchMppActivity(POPUP_MPP_ACTIVITY, NOT_PREFER_MPP); 109 110 mWmState.assertVisibility(MPP_ACTIVITY, true); 111 mWmState.assertVisibility(POPUP_MPP_ACTIVITY, true); 112 113 assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, PREFER_MPP); 114 } 115 116 @Test testTwoVisibleWindowsSecondOnePrefersMinimalPostProcessing()117 public void testTwoVisibleWindowsSecondOnePrefersMinimalPostProcessing() throws Exception { 118 launchMppActivity(MPP_ACTIVITY, NOT_PREFER_MPP); 119 launchMppActivity(POPUP_MPP_ACTIVITY, PREFER_MPP); 120 121 mWmState.assertVisibility(MPP_ACTIVITY, true); 122 mWmState.assertVisibility(POPUP_MPP_ACTIVITY, true); 123 124 assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, PREFER_MPP); 125 } 126 127 @Test testTwoVisibleWindowsBothPreferMinimalPostProcessing()128 public void testTwoVisibleWindowsBothPreferMinimalPostProcessing() throws Exception { 129 launchMppActivity(MPP_ACTIVITY, PREFER_MPP); 130 launchMppActivity(POPUP_MPP_ACTIVITY, PREFER_MPP); 131 132 mWmState.assertVisibility(MPP_ACTIVITY, true); 133 mWmState.assertVisibility(POPUP_MPP_ACTIVITY, true); 134 135 assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, PREFER_MPP); 136 } 137 138 @Test testNewWindowTurnsOffMinimalPostProcessing()139 public void testNewWindowTurnsOffMinimalPostProcessing() throws Exception { 140 launchMppActivity(MPP_ACTIVITY, PREFER_MPP); 141 launchMppActivity(MPP_ACTIVITY2, NOT_PREFER_MPP); 142 143 mWmState.waitAndAssertVisibilityGone(MPP_ACTIVITY); 144 mWmState.assertVisibility(MPP_ACTIVITY2, true); 145 146 assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, NOT_PREFER_MPP); 147 } 148 } 149