• 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.assertEquals;
28 import static org.junit.Assert.assertNotEquals;
29 
30 import android.content.ComponentName;
31 import android.platform.test.annotations.Presubmit;
32 
33 import org.junit.Test;
34 
35 @Presubmit
36 @android.server.wm.annotation.Group2
37 public class MinimalPostProcessingTests extends ActivityManagerTestBase {
38     private static final boolean PREFER_MPP = true;
39     private static final boolean NOT_PREFER_MPP = false;
40 
launchMppActivity(ComponentName name, boolean preferMinimalPostProcessing)41     private void launchMppActivity(ComponentName name, boolean preferMinimalPostProcessing) {
42         if (preferMinimalPostProcessing) {
43             launchActivity(name, extraString(EXTRA_PREFER_MPP, "anything"));
44         } else {
45             launchActivity(name);
46         }
47         mWmState.waitForValidState(name);
48 
49         final int stackId = mWmState.getRootTaskIdByActivity(name);
50 
51         assertNotEquals(stackId, INVALID_STACK_ID);
52 
53         mWmState.assertVisibility(name, true);
54     }
55 
isMinimalPostProcessingSupported(int displayId)56     private boolean isMinimalPostProcessingSupported(int displayId) {
57         return mDm.getDisplay(displayId).isMinimalPostProcessingSupported();
58     }
59 
isMinimalPostProcessingRequested(int displayId)60     private boolean isMinimalPostProcessingRequested(int displayId) {
61         return mDm.isMinimalPostProcessingRequested(displayId);
62     }
63 
getDisplayId(ComponentName name)64     private int getDisplayId(ComponentName name) {
65         return mWmState.getDisplayByActivity(name);
66     }
67 
assertDisplayRequestedMinimalPostProcessing(ComponentName name, boolean on)68     private void assertDisplayRequestedMinimalPostProcessing(ComponentName name, boolean on) {
69         final int displayId = getDisplayId(name);
70 
71         // TODO(b/202378408) verify that minimal post-processing is requested only if
72         // it's supported once we have a separate API for disabling on-device processing.
73         boolean requested = isMinimalPostProcessingRequested(displayId);
74         assertEquals(requested, on);
75     }
76 
77     @Test
testPreferMinimalPostProcessingSimple()78     public void testPreferMinimalPostProcessingSimple() throws Exception {
79         launchMppActivity(MPP_ACTIVITY, PREFER_MPP);
80         assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, PREFER_MPP);
81     }
82 
83     @Test
testPreferMinimalPostProcessingDefault()84     public void testPreferMinimalPostProcessingDefault() throws Exception {
85         launchMppActivity(MPP_ACTIVITY, NOT_PREFER_MPP);
86         assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, NOT_PREFER_MPP);
87     }
88 
89     @Test
testAttrPreferMinimalPostProcessingSimple()90     public void testAttrPreferMinimalPostProcessingSimple() throws Exception {
91         launchMppActivity(MPP_ACTIVITY3, NOT_PREFER_MPP);
92         assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY3, PREFER_MPP);
93     }
94 
95     @Test
testTwoVisibleWindowsNeitherPreferMinimalPostProcessing()96     public void testTwoVisibleWindowsNeitherPreferMinimalPostProcessing() throws Exception {
97         launchMppActivity(MPP_ACTIVITY, NOT_PREFER_MPP);
98         launchMppActivity(POPUP_MPP_ACTIVITY, NOT_PREFER_MPP);
99 
100         mWmState.assertVisibility(MPP_ACTIVITY, true);
101         mWmState.assertVisibility(POPUP_MPP_ACTIVITY, true);
102 
103         assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, NOT_PREFER_MPP);
104     }
105 
106     @Test
testTwoVisibleWindowsFirstOnePrefersMinimalPostProcessing()107     public void testTwoVisibleWindowsFirstOnePrefersMinimalPostProcessing() throws Exception {
108         launchMppActivity(MPP_ACTIVITY, PREFER_MPP);
109         launchMppActivity(POPUP_MPP_ACTIVITY, NOT_PREFER_MPP);
110 
111         mWmState.assertVisibility(MPP_ACTIVITY, true);
112         mWmState.assertVisibility(POPUP_MPP_ACTIVITY, true);
113 
114         assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, PREFER_MPP);
115     }
116 
117     @Test
testTwoVisibleWindowsSecondOnePrefersMinimalPostProcessing()118     public void testTwoVisibleWindowsSecondOnePrefersMinimalPostProcessing() throws Exception {
119         launchMppActivity(MPP_ACTIVITY, NOT_PREFER_MPP);
120         launchMppActivity(POPUP_MPP_ACTIVITY, PREFER_MPP);
121 
122         mWmState.assertVisibility(MPP_ACTIVITY, true);
123         mWmState.assertVisibility(POPUP_MPP_ACTIVITY, true);
124 
125         assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, PREFER_MPP);
126     }
127 
128     @Test
testTwoVisibleWindowsBothPreferMinimalPostProcessing()129     public void testTwoVisibleWindowsBothPreferMinimalPostProcessing() throws Exception {
130         launchMppActivity(MPP_ACTIVITY, PREFER_MPP);
131         launchMppActivity(POPUP_MPP_ACTIVITY, PREFER_MPP);
132 
133         mWmState.assertVisibility(MPP_ACTIVITY, true);
134         mWmState.assertVisibility(POPUP_MPP_ACTIVITY, true);
135 
136         assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, PREFER_MPP);
137     }
138 
139     @Test
testNewWindowTurnsOffMinimalPostProcessing()140     public void testNewWindowTurnsOffMinimalPostProcessing() throws Exception {
141         launchMppActivity(MPP_ACTIVITY, PREFER_MPP);
142         launchMppActivity(MPP_ACTIVITY2, NOT_PREFER_MPP);
143 
144         mWmState.waitAndAssertVisibilityGone(MPP_ACTIVITY);
145         mWmState.assertVisibility(MPP_ACTIVITY2, true);
146 
147         assertDisplayRequestedMinimalPostProcessing(MPP_ACTIVITY, NOT_PREFER_MPP);
148     }
149 }
150