CTS/GTS问题分析8 | weiinter105

今天发现一个初始设置错误可能导致的CTS问题,进行下记录

问题初探

测试命令: run cts -m CtsServicesHostTestCases -t android.server.cts.ActivityManagerDockedStackTests#testDockedStackToMinimizeWhenUnlocked

在host log中报错如下:


 

case的大致流程是:

启动TestActivity,将TestActivity放到stack 3,灭屏,重新点亮屏幕,观察当前window状态 (dumpsys window -a ) ,若mMinimizedDock = true,则case pass,否则fail

看了下bugreport中的event log,如下:

 

重新亮屏时并没有发现异常的event log,说明就是mMinimizedDock这个值为false导致的错误,先转给分屏看了下,发现关闭Skip Screen lock测试即可通过;因此分屏没有继续看下去,但是这其实是不符合正常的CTS测试设置的,因此还是有继续调研的必要。

问题分析

发现mMinimizedDock这个值可以等价于DividerView的mDockedStackMinimized属性,DividerView是分屏时中间的分割符,这样就可以将问题定位到DividerView的变化,其是由DockedStackDividerController控制的;因此,我们在其中的notifyDockedStackMinimizedChanged中打出调用栈

 

然后重新打包复现,可以发现如下log:

手机灭屏时关键log:

 

可以看到,这里会进行最小化的操作,也就是说到灭屏前是完全没问题的,那么我们将重点放在灭屏后

然后对比正常日志,

 

异常日志:

 

正常日志是将测试进程force-stop后再进行销毁工作,DividerView最小化,然后销毁;异常日志是DividerView最小化在前面执行,导致case fail;

然后我们仔细观察异常log,就可以看出原因:

首先,亮屏后(执行菜单键),可以看到提前最小化的栈在

 

是执行DockedStackDividerController.animate操作导致的最小化,在往前看看,找到原因了

 

 

10-25 09:46:49.258 2461 2461 D EventBus: [2461, u0] -> DividerView [0x284c897, P1] onBusEvent(RecentsDrawnEvent)
10-25 09:46:49.259 2461 2461 D EventBus: [2461, u0] onBusEvent(RecentsDrawnEvent) duration: 8 microseconds, avg: 68

 

可以很明显的看到,DividerView会执行一个滑动操作,那么应该会执行到animate,将状态从最小化状态还原。而我们MIUI默认将menu菜单键的功能设置为最近任务功能,怀疑是没有设置正确导致的问题

那么我们可以将Skip Screen lock开关打开来测试了,将菜单键置为本来功能,发现case果然pass;这里我们也可以看到为什么Skip Screen lock开关关闭也能过了,因为一直没有解锁,导致DividerView没有走后面的还原过程,虽然case也是pass的,但是这其实不符合case本身的用意

问题总结

问题本身不难,但是这样无用的分析是浪费资源的

1.再次强调,让所有测试都明确测试配置
2.建议维护一个wiki,维护没有正确设置可能造成的问题,防止这种情况再次发生,做无用的分析

作者: RESSRC

个人资源站

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据