android.cts.jank.ui.CtsDeviceJankUi--testScrolling失败原因总结和debug方法介绍

在Compatibility Test Package:com.android.cts.jank2 这个包里面的android.cts.jank.ui.CtsDeviceJankUi--testScrolling测项,经常会遇到

junit.framework.AssertionFailedError: Too few frames received. Monitor: WindowContentFrameStatsMonitorImpl, Expected: 50, Received: xxx. at junit.framework.Assert.fail(Assert.java:50)

上面的xxx,有的时候是一个小于50的数字,有的时候是0  

这个cts 测项的过程和目的是:
在/cts/suite/cts/deviceTests/jank2/src/android/cts/jank/ui/CtsDeviceJankUi.java中启动 com.android.cts.ui/com.android.cts.ui.ScrollingActivity这个activity,然后模拟scroll down滑动list列表,
在list列表滑动动画过程中,统计2s内更新的帧数,是否达到50帧,若未达到50帧则fail

下面介绍这个cts fail的通常原因,还有对应的debug手法


android.cts.jank.ui.CtsDeviceJankUi--testScrolling测项 fail的原因通常有如下几种原因

1.收到的frame count 小于或接近50,如46这样的数字
=>fail原因:滑动listview的时候,因为view system和listview滑动相关的参数被修改了,导致滑动的性能受到影响
=>debug手法:

1)请检查如下2支文件相比于原始版本,做了哪些改动
frameworks/base / core/java/android/view/ViewConfiguration.java 文件中,通常关注 private static final float SCROLL_FRICTION
 frameworks/base / core/java/android/widget/AbsListView.java       文件中,通常关注 private float mVelocityScale
除了上述列出通常关注的两个变量外,其他变量也都要关注,看做了哪些改动

2)请检查LCM 刷新率是否达标?系统performance是否受到影响而降低?=>可观察手机通常的使用场景下,UI刷新是否卡顿,若有要先解决系统performance低的问题


2.收到的frame count为0,Received: 0
=>fail原因:cts 模拟scroll down后,由于客户客制化原因,使得画面更新的区域并不在listview的区域内,导致并未收到listview更新的任何帧,故fail
=>debug手法:
    1)请确认手机是否有硬体按键?检查是否有对Navigationbar的显示做过客制化?若有,请恢复成原始设计
    2)若对第1)条未做改动,那么需要在eng或userdebug版本上,adb命令打开debug开关,查看为何没有更新listview所在区域?

需要打开的debug开关如下:
adb shell setprop debug.viewroot.enable e0002
 adb shell setprop debug.listview.dumpinfo 1111111
 adb shell "stop;start"

然后抓取cts test fail的完整mtklog来分析
分析的时候,主要在com.android.cts.ui.ScrollingActivit的进程中search 如下这样的关键log:
01-01 05:29:46.945 13767 13767 V ViewRootImpl: Invalidate child: Rect(0, 1140 - 720, 1184),this = ViewRoot{e5c0e9b com.android.cts.ui/com.android.cts.ui.ScrollingActivity,ident = 0}
然后观察下面画面刷新的callstack是由谁触发的
01-01 05:29:46.945 13767 13767 V ViewRootImpl: java.lang.Throwable: invalidateChildInParent
01-01 05:29:46.945 13767 13767 V ViewRootImpl: at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1109)

cts 所跑的时间段可以通过如下log来确认:
TestRunner: started: testScrolling(android.cts.jank.ui.CtsDeviceJankUi)
TestRunner: finished: testScrolling(android.cts.jank.ui.CtsDeviceJankUi)
 
3.cts fail的log与frame count无关
例如下面的fail log:
   <FailedScene message="java.lang.reflect.InvocationTargetException&#13;&#10;at java.lang.reflect.Method.invoke(Native Method)&#13;">
 <StackTrace>java.lang.reflect.InvocationTargetException
 at java.lang.reflect.Method.invoke(Native Method)
 at android.support.test.jank.JankTestBase.runTest(JankTestBase.java:116)
 at junit.framework.TestCase.runBare(TestCase.java:134)
 at junit.framework.TestResult$1.protect(TestResult.java:115)
 at android.support.test.internal.runner.junit3.AndroidTestResult.runProtected(AndroidTestResult.java:77)
 at junit.framework.TestResult.run(TestResult.java:118)
 at android.support.test.internal.runner.junit3.AndroidTestResult.run(AndroidTestResult.java:55)
 at junit.framework.TestCase.run(TestCase.java:124)
 at android.support.test.internal.runner.junit3.NonLeakyTestSuite$NonLeakyTest.run(NonLeakyTestSuite.java:63)
 at android.support.test.internal.runner.junit3.AndroidTestSuite$1.run(AndroidTestSuite.java:98)
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
 at java.util.concurrent.FutureTask.run(FutureTask.java:237)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
 at java.lang.Thread.run(Thread.java:818)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.test.uiautomator.UiObject2.fling(android.support.test.uiautomator.Direction)' on a null object reference
 at android.cts.jank.ui.CtsDeviceJankUi.testScrolling(CtsDeviceJankUi.java:58)
 ... 15 more
 </StackTrace>

=>fail原因:不明原因的客制化引起cts的测试过程出错,还未跑入该项具体的cts test 流程
=>debug手法:
1)先check view system的几支主要文件是否做过改,然后再请cts framework的人做进一步做分析,因为该结果显示TestRunner都没跑起来
/frameworks/base/core/java/android/view/View.java
 /frameworks/base/core/java/android/view/ViewGroup.java
 /frameworks/base/core/java/android/view/ViewRootImpl.java

2)再检查是否只有这一项cts test fail?根据这种fail log,应该是有非常多的test都会fail,需要从cts test的测试注意事项和流程方面入手分析

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值