• Android CTS Test failed to run to conmpletion 测试超时问题


    引用“Android cts all pass 全攻略 ”里面的一段话:

    ❀ testcase timeout

             测试某个testcase的时候一直出现 “........”,迟迟没有pass或者fail,等良久出现一个血淋淋的timeout,很让人伤心。有不少人笑嘻嘻的以为timeout 挺好,至少它不是fail。在我看来timeout 比 fail 还恐怖,因为它连进行测试到底是pass还是fail的权利都没有。想不被硬件设备厂商笑话,必须0 timeout ,然后再争取0 fail 。

    在使用CTS测试的时候经常会出现这样的提示错误:“Test failed to run to conmpletion.Reason: 'Failed to receive adb shell test output within 600000ms. 

    Test may have timed out, or adb connect to device became unresponsive'. Check device locat for details” 有时候会是1200000ms,单个测试用例这个超时等待时间是无法接受的。在我的开发板上出现这个问题的原因是我把camera service给裁剪掉了。

    日志显示测试用例testCameraFeatures一直等待camera service服务的响应:

    01-02 00:09:53.450 I/TestRunner( 4017): started: testCameraFeatures(android.app.cts.SystemFeaturesTest)
    01-02 00:09:53.450 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:09:54.450 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:09:55.450 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:09:56.450 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:09:57.450 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:09:58.450 W/Camera  ( 4017): CameraService not published, waiting...
    01-02 00:09:58.960 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:09:59.960 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:10:00.960 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:10:01.960 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:10:02.960 I/ServiceManager( 4017): Waiting for service media.camera...
    01-02 00:10:03.960 W/Camera  ( 4017): CameraService not published, waiting...

    看见这样的日志,就不难发现,肯定是下层掉入了死循环,跟踪framework代码,你会发现这样一段代码:

     1 // establish binder interface to camera service
     2 const sp<ICameraService>& Camera::getCameraService()
     3 {
     4     Mutex::Autolock _l(mLock);
     5     if (mCameraService.get() == 0) {
     6         sp<IServiceManager> sm = defaultServiceManager();
     7         sp<IBinder> binder;
     8         do {
     9             binder = sm->getService(String16("media.camera"));
    10             if (binder != 0)
    11                 break;
    12             ALOGW("CameraService not published, waiting...");
    13             usleep(500000); // 0.5 s
    14         } while(true);
    15         if (mDeathNotifier == NULL) {
    16             mDeathNotifier = new DeathNotifier();
    17         }
    18         binder->linkToDeath(mDeathNotifier);
    19         mCameraService = interface_cast<ICameraService>(binder);
    20     }
    21     ALOGE_IF(mCameraService==0, "no CameraService!?");
    22     return mCameraService;
    23 }

    这段代码的位置在“frameworks/av/camera/Camera.cpp”,一看见那个邪恶的while(true),就知道这个此处是万劫不复之地了。

    当然解决办法,你可以想办法在binder为NULL的情况下,跳出循环,并且保证不出问题也行。不知道谷歌写这段死循环是何用意,并不是每个拿你系统干活的人都需要camera,不要camera了,你也不至于让我陷入万劫不复之地吧 ?

    下面说说我在做CTS测试的时候的解决办法,很简单,把源码目录下面关于camera的东西注释掉,删除掉。下面是我的修改记录,可以作为参考:

    前面带“-”的是删除的文件,那个带笔型标记的是修改的文件,要修改的文件直接大文件,找camera或者testCamera关键字,见着就注释掉。

    做完,make cts -j4.

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

  • 相关阅读:
    记一次线上Kafka消息堆积踩坑总结
    golang Time to String
    转MongoDB 使用Skip和limit分页
    golang mongodb (mgo)插入或读取文档的字段值为空(nil)问题解决
    Golang 中操作 Mongo Update 的方法
    基础知识
    Linux安全之SSH 密钥创建及密钥登录
    ssh配置authorized_keys后仍然需要输入密码的问题
    SSH隧道技术----端口转发,socket代理
    社会信息化环境下的IT新战略
  • 原文地址:https://www.cnblogs.com/tangdoudou/p/3512307.html
Copyright © 2020-2023  润新知