您的位置:首页 > 产品设计 > UI/UE

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

2016-12-14 15:29 519 查看
在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 at java.lang.reflect.Method.invoke(Native Method) ">

 <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的测试注意事项和流程方面入手分析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐