• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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