• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 com.android.car.pm;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.junit.runners.JUnit4;
24 
25 @RunWith(JUnit4.class)
26 public class WindowDumpParserTest {
27     private static final String WINDOW_DUMP = "WINDOW MANAGER WINDOWS (dumpsys window windows)\n"
28             + "  Window #0 Window{ccae0fb u10 com.app1}:\n"
29             + "    mDisplayId=0 rootTaskId=1000006 mSession=Session{ef1bfd2 2683:u10a10088} "
30             + "mClient=android.os.BinderProxy@46bd28a\n"
31             + "    mOwnerUid=1010088 showForAllUsers=false package=com.app1 "
32             + "appop=SYSTEM_ALERT_WINDOW\n"
33             + "    mAttrs={(0,0)(0x0) gr=TOP RIGHT CENTER sim={adjust=pan} ty=APPLICATION_OVERLAY"
34             + " fmt=TRANSPARENT\n"
35             + "    isOnScreen=true\n"
36             + "    isVisible=true\n"
37 
38             + "  Window #1 Window{17aaef4 u0 App 2}:\n"
39             + "    mDisplayId=1 rootTaskId=1000006 mSession=Session{629ba4e 2235:u0a10120} "
40             + "mClient=android.os.Binderproxy@3f3ea06\n"
41             + "    mOwnerUid=10120 showForAllUsers=true package=com.app2 appop=NONE\n"
42             + "    mAttrs={(24,0)(84x419) gr=BOTTOM RIGHT CENTER sim={adjust=pan} "
43             + "ty=DISPLAY_OVERLAY fmt=TRANSLUCENT\n"
44             + "      fl=NOT_FOCUSABLE LAYOUT_NO_LIMITS HARDWARE_ACCELERATED\n"
45             + "      pfl=NO_MOVE_ANIMATION USE_BLAST INSET_PARENT_FRAME_BY_IME\n"
46             + "      bhv=DEFAULT\n"
47             + "      fitTypes=STATUS_BARS NAVIGATION_BARS CAPTION_BAR}\n"
48             + "    Requested w=1080 h=1920 mLayoutSeq=154\n"
49             + "    mBaseLayer=21000 mSubLayer=0    mToken=AppWindowToken{546fe66 token=Token"
50             + "{8b7a6c1 ActivityRecord{2789ba8 u0 com.app2/.MainActivity t5}}}\n"
51             + "    mAppToken=AppWindowToken{546fe66 token=Token{8b7a6c1 ActivityRecord{2789ba8 u0"
52             + " com.app2/.MainActivity t5}}}\n"
53 
54             + ".BinderProxy@3f3ea06}\n"
55             + "    Frames: containing=[0,0][1080,600] parent=[0,0][1080,600] display=[-10000,"
56             + "-10000][10000,10000]\n"
57             + "    mFrame=[972,181][1056,600] last=[0,0][0,0]\n"
58             + "     surface=[0,0][0,0]\n"
59             + "    WindowStateAnimator{8edd4a7 HVAC Passenger Temp}:\n"
60             + "      mDrawState=NO_SURFACE       mLastHidden=false\n"
61             + "      mEnterAnimationPending=false      mSystemDecorRect=[0,0][0,0]\n"
62             + "      mShownAlpha=0.0 mAlpha=1.0 mLastAlpha=0.0\n"
63             + "    mForceSeamlesslyRotate=false seamlesslyRotate: pending=null "
64             + "finishedFrameNumber=0\n"
65             + "    isOnScreen=false\n"
66             + "    isVisible=false\n"
67 
68             + "  Window #2 Window{1c5571 u0 HVAC Driver Temp}:\n"
69             + "    mDisplayId=1 rootTaskId=1000006 mSession=Session{629ba4e 2235:u0a10120} "
70             + "mClient=android.os.BinderProxy@99ccafb\n"
71             + "    mOwnerUid=10120 showForAllUsers=true package=com.app2 appop=NONE\n"
72             + "    mAttrs={(24,0)(84x419) gr=BOTTOM LEFT CENTER sim={adjust=pan} "
73             + "ty=DISPLAY_OVERLAY fmt=TRANSLUCENT\n"
74             + "      fl=NOT_FOCUSABLE LAYOUT_NO_LIMITS HARDWARE_ACCELERATED\n"
75             + "      pfl=NO_MOVE_ANIMATION USE_BLAST INSET_PARENT_FRAME_BY_IME\n"
76             + "      bhv=DEFAULT\n"
77             + "      fitTypes=STATUS_BARS NAVIGATION_BARS CAPTION_BAR}\n"
78             + "    Requested w=84 h=419 mLayoutSeq=143\n"
79             + "    mBaseLayer=21000 mSubLayer=0    mToken=ActivityRecord{b44066 u10 com.app2/"
80             + "SecondActivity t1000031}\n"
81             + "    mActivityRecord=ActivityRecord{b44066 u10 com.app2/SecondActivity t1000031}\n"
82             + ".BinderProxy@99ccafb}\n"
83             + "    mViewVisibility=0x4 mHaveFrame=true mObscured=false\n"
84             + "    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]\n"
85             + "    isOnScreen=false\n"
86             + "    isVisible=false\n"
87 
88             + "  Window #3 Window{1c5571 u0 HVAC Driver Temp}:\n"
89             + "    mDisplayId=2 rootTaskId=1000006 mSession=Session{629ba4e 2235:u0a10120} "
90             + "mClient=android.os.BinderProxy@99ccafb\n"
91             + "    mOwnerUid=10120 showForAllUsers=true package=com.app3 appop=NONE\n"
92             + "    mAttrs={(24,0)(84x419) gr=BOTTOM LEFT CENTER sim={adjust=pan} "
93             + "ty=DISPLAY_OVERLAY fmt=TRANSLUCENT\n"
94             + "      fl=NOT_FOCUSABLE LAYOUT_NO_LIMITS HARDWARE_ACCELERATED\n"
95             + "      pfl=NO_MOVE_ANIMATION USE_BLAST INSET_PARENT_FRAME_BY_IME\n"
96             + "      bhv=DEFAULT\n"
97             + "      fitTypes=STATUS_BARS NAVIGATION_BARS CAPTION_BAR}\n"
98             + "    Requested w=84 h=419 mLayoutSeq=143\n"
99             + "    mBaseLayer=291000 mSubLayer=0    mToken=WindowToken{6bd1718 android.os"
100             + "    mActivityRecord=ActivityRecord{a3f066 u10 com.app3/MainActivity t1000031}\n"
101             + ".BinderProxy@99ccafb}\n"
102             + "    mViewVisibility=0x4 mHaveFrame=true mObscured=false\n"
103             + "    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]\n"
104             + "    isOnScreen=false\n"
105             + "    isVisible=false\n"
106 
107             + "  Window #4 Window{1c5571 u0 HVAC Driver Temp}:\n"
108             + "    mDisplayId=2 rootTaskId=1000006 mSession=Session{629ba4e 2235:u0a10120} "
109             + "mClient=android.os.BinderProxy@99ccafb\n"
110             + "    mOwnerUid=10120 showForAllUsers=true package=com.app3 appop=NONE\n"
111             + "    mAttrs={(24,0)(84x419) gr=BOTTOM LEFT CENTER sim={adjust=pan} "
112             + "ty=APPLICATION_STARTING fmt=TRANSLUCENT\n"
113             + "      fl=NOT_FOCUSABLE LAYOUT_NO_LIMITS HARDWARE_ACCELERATED\n"
114             + "      pfl=NO_MOVE_ANIMATION USE_BLAST INSET_PARENT_FRAME_BY_IME\n"
115             + "      bhv=DEFAULT\n"
116             + "      fitTypes=STATUS_BARS NAVIGATION_BARS CAPTION_BAR}\n"
117             + "    Requested w=84 h=419 mLayoutSeq=143\n"
118             + "    mBaseLayer=291000 mSubLayer=0    mToken=WindowToken{6bd1718 android.os"
119             + ".BinderProxy@99ccafb}\n"
120             + "    mViewVisibility=0x4 mHaveFrame=true mObscured=false\n"
121             + "    mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]\n"
122             + "    isOnScreen=false\n"
123             + "    isVisible=false\n";
124 
125     private static final WindowDumpParser.Window APP_1_WINDOW = new WindowDumpParser.Window(
126             "com.app1", 0, null);
127     private static final WindowDumpParser.Window APP_2_WINDOW = new WindowDumpParser.Window(
128             "com.app2", 1, "2789ba8 u0 com.app2/.MainActivity t5");
129     private static final WindowDumpParser.Window APP_2_WINDOW_2 = new WindowDumpParser.Window(
130             "com.app2", 1, "b44066 u10 com.app2/SecondActivity t1000031");
131     private static final WindowDumpParser.Window APP_3_WINDOW = new WindowDumpParser.Window(
132             "com.app3", 2, "a3f066 u10 com.app3/MainActivity t1000031");
133 
134     @Test
testWindowDumpParsing()135     public void testWindowDumpParsing() {
136         assertThat(WindowDumpParser.getParsedAppWindows(WINDOW_DUMP, "com.app1")).containsExactly(
137                 APP_1_WINDOW);
138         assertThat(WindowDumpParser.getParsedAppWindows(WINDOW_DUMP, "com.app2")).containsExactly(
139                 APP_2_WINDOW, APP_2_WINDOW_2);
140         assertThat(WindowDumpParser.getParsedAppWindows(WINDOW_DUMP, "com.app3")).containsExactly(
141                 APP_3_WINDOW);
142     }
143 }
144