【AndroidFramework】【EMMC拷机】混合拷机时盒子待机

问题结论

暂时确定为误按键,不是故障。问题关闭。后续完全保证无按键(物理隔离)情况下如果出现待机,请反馈。

问题描述

【EMMC拷机】混合拷机时盒子待机---新版本引入
EMMC:东芝THGBMFG6C1LBAIL 容量为8GB
【故障描述】
1,拷机10台,全部杀了遥控器,拷机播放13H后发现一台出现问题
2,混合拷机时盒子待机

分析详细

  • grep确认事件现场
  • 确认日志产生机制
  • 确认盒子待机按钮
  • 确认自动待机接口
  • 确认测试部“杀遥控器”方法

  • grep确认事件现场
    拿到日志有53份,每份102400k,先放在服务器上,grep一下,结果如下:
  1. wanghongzhu@ubuntu:~/temp/182.16.90.24_2019-06-17-17-17-58$ grep 'sleep' * -nir
  2. Log_2019-06-17-17-17-58_53.log:467677:2019-06-17 21:00:29.344 I/PowerManagerService( 3246): Going to sleep due to power button (uid 1000)...
  3. Log_2019-06-17-17-17-58_53.log:467683:2019-06-17 21:00:29.344 I/PowerManagerService( 3246): Sleeping (uid 1000)...
  4. Log_2019-06-17-17-17-58_53.log:481099:2019-06-17 21:00:32.464 I/TV_Client.TagTv( 4374): [4585][playermgr.cpp (L7160)][StopallTVplay]:---[0]---iPlayerID[0];joinchannel is NOT running!exit Sleep!
  5. wanghongzhu@ubuntu:~/temp/182.16.90.24_2019-06-17-17-17-58$ grep 'screen off' * -nir
  6. Log_2019-06-17-17-17-58_53.log:467687:2019-06-17 21:00:29.344 I/DisplayPowerController( 3246): Blocking screen off
  7. Log_2019-06-17-17-17-58_53.log:467689:2019-06-17 21:00:29.344 I/DisplayPowerController( 3246): Unblocked screen off after 1 ms
  8. Log_2019-06-17-17-17-58_53.log:468063:2019-06-17 21:00:29.547 D/PowerManagerService-JNI( 3246): Excessive delay in setInteractive(false) while turning screen off

结果显示,待机只发生在最后一份日志,并且显示为power button,结果基本明晰。接下来,
1.确认框架代码,什么情况下会出现该打印(遥控器按到了?其他未知原因调用到了?)
2.是不是碰到盒子上‘待机按钮’引起的
3.是不是什么apk调用了自动待机的接口?

  • 确认日志产生机制
    代码路径/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
  1. /frameworks/base/services/core/java/com/android/server/power$ cat PowerManagerService.java |grep -nir 'Going to sleep due to'
  2. PowerManagerService.java:1407: Slog.i(TAG, "Going to sleep due to device administration policy "
  3. PowerManagerService.java:1411: Slog.i(TAG, "Going to sleep due to screen timeout (uid " + uid +")...");
  4. PowerManagerService.java:1414: Slog.i(TAG, "Going to sleep due to lid switch (uid " + uid +")...");
  5. PowerManagerService.java:1417: Slog.i(TAG, "Going to sleep due to power button (uid " + uid +")...");
  6. PowerManagerService.java:1420: Slog.i(TAG, "Going to sleep due to sleep button (uid " + uid +")...");
  7. PowerManagerService.java:1423: Slog.i(TAG, "Going to sleep due to HDMI standby (uid " + uid +")...");

跳转到打印处,调用的方法,梳理逻辑。

  1. // This method is called goToSleep for historical reasons but we actually start
  2. // dozing before really going to sleep.
  3. @SuppressWarnings("deprecation")
  4. private boolean goToSleepNoUpdateLocked(long eventTime, int reason, int flags, int uid) {
  5. if (DEBUG_SPEW) {
  6. Slog.d(TAG, "goToSleepNoUpdateLocked: eventTime=" + eventTime
  7. + ", reason=" + reason + ", flags=" + flags + ", uid=" + uid);
  8. }
  9. if (eventTime < mLastWakeTime
  10. || mWakefulness == WAKEFULNESS_ASLEEP
  11. || mWakefulness == WAKEFULNESS_DOZING
  12. || !mBootCompleted || !mSystemReady) {
  13. return false;
  14. }
  15. Trace.traceBegin(Trace.TRACE_TAG_POWER, "goToSleep");
  16. try {
  17. switch (reason) {
  18. case PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN:
  19. Slog.i(TAG, "Going to sleep due to device administration policy "
  20. + "(uid " + uid +")...");
  21. break;
  22. case PowerManager.GO_TO_SLEEP_REASON_TIMEOUT:
  23. Slog.i(TAG, "Going to sleep due to screen timeout (uid " + uid +")...");
  24. break;
  25. case PowerManager.GO_TO_SLEEP_REASON_LID_SWITCH:
  26. Slog.i(TAG, "Going to sleep due to lid switch (uid " + uid +")...");
  27. break;
  28. case PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON:
  29. Slog.i(TAG, "Going to sleep due to power button (uid " + uid +")...");
  30. break;
  31. case PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON:
  32. Slog.i(TAG, "Going to sleep due to sleep button (uid " + uid +")...");
  33. break;
  34. case PowerManager.GO_TO_SLEEP_REASON_HDMI:
  35. Slog.i(TAG, "Going to sleep due to HDMI standby (uid " + uid +")...");
  36. break;
  37. case PowerManager.GO_TO_SLEEP_REASON_ACCESSIBILITY:
  38. Slog.i(TAG, "Going to sleep by an accessibility service request (uid "
  39. + uid +")...");
  40. break;
  41. default:
  42. Slog.i(TAG, "Going to sleep by application request (uid " + uid +")...");
  43. reason = PowerManager.GO_TO_SLEEP_REASON_APPLICATION;
  44. break;
  45. }
  46. mLastSleepTime = eventTime;
  47. mSandmanSummoned = true;
  48. setWakefulnessLocked(WAKEFULNESS_DOZING, reason);
  49. // Report the number of wake locks that will be cleared by going to sleep.
  50. int numWakeLocksCleared = 0;
  51. final int numWakeLocks = mWakeLocks.size();
  52. for (int i = 0; i < numWakeLocks; i++) {
  53. final WakeLock wakeLock = mWakeLocks.get(i);
  54. switch (wakeLock.mFlags & PowerManager.WAKE_LOCK_LEVEL_MASK) {
  55. case PowerManager.FULL_WAKE_LOCK:
  56. case PowerManager.SCREEN_BRIGHT_WAKE_LOCK:
  57. case PowerManager.SCREEN_DIM_WAKE_LOCK:
  58. numWakeLocksCleared += 1;
  59. break;
  60. }
  61. }
  62. EventLogTags.writePowerSleepRequested(numWakeLocksCleared);
  63. // Skip dozing if requested.
  64. if ((flags & PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE) != 0) {
  65. reallyGoToSleepNoUpdateLocked(eventTime, uid);
  66. }
  67. } finally {
  68. Trace.traceEnd(Trace.TRACE_TAG_POWER);
  69. }
  70. return true;
  71. }

由以上代码可见,待机是由于power按键。不是由于某些应用程序调用。

  • 确认盒子待机按钮
    经按键盒子上的power键,是走的真待机重启流程,无以上打印。

  • 确认自动待机接口
    做实验:设置中修改自动待机,过段时间待机后看日志。
    实验结论:自动待机调用的接口与power button不同,该问题不是由调用自动待机接口导致。
    日志如下:
  1. sdcard/111.log |grep -nir 'sleep' <
  2. (standard input):451:01-01 03:20:50.225 D/SharedPreferencesLogger( 5198): Tried to log string preference MainSettings/sleepTime = 10800000
  3. (standard input):492:01-01 03:21:00.542 V/SettingsProvider( 3120): Notifying for 0: content://settings/secure/sleep_timeout
  4. (standard input):494:01-01 03:21:00.549 D/SharedPreferencesLogger( 5198): Tried to log string preference MainSettings/sleepTime = 1800000
  5. (standard input):1434:01-01 03:51:00.538 I/PowerManagerService( 3120): Going to sleep due to screen timeout (uid 1000)...
  6. (standard input):1437:01-01 03:51:00.540 I/PowerManagerService( 3120): Sleeping (uid 1000)...
  7. (standard input):1713:01-01 04:05:03.885 I/PowerManagerService( 3120): Waking up from sleep (uid=1000 reason=android.policy:POWER)...
  • 确认测试部“杀遥控器”方法
    经试验,在ATV9上无法屏蔽遥控器按键

【AndroidFramework】【EMMC拷机】混合拷机时盒子待机的更多相关文章

  1. Linux服务器压测/拷机软件收集

    最近公司采购了一批服务器,于是收集了一些拷机软件来压测服务器硬件性能.硬件的稳定相对来说比较重要,7x24小时无间断运行,主要看三个硬件:CPU.内存.硬盘. 下面是收集的一些教程,可能网址已经失效了 ...

  2. 数往知来C#之 String 集合 深拷与浅拷 序列化<五>

    C# 基础常用string方法篇 复习. 1.引用类型与值类型     -->文件的复制与快捷方式的复制 2.垃圾回收 3.静态与非静态   -->如何定义静态成员与静态类   --> ...

  3. set集合,深浅拷⻉以及部分知识点补充

    set集合,深浅拷⻉以及部分知识点补充内容:1. 基础数据类型补充2. set集合3. 深浅拷⻉主要内容: ⼀. 基础数据类型补充⾸先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的 ...

  4. python 學習深淺拷貝、集合、、作用域、函數

    python 學習深淺拷貝.集合..作用域.函數 2020開年新冠肺炎流行大部分人員.工廠.單位無法復工生產,人員隔離每天外出都要戴口罩,在家隔離期間悶壞了感覺把半年的口糧都幹掉了,嚴重考察大家的資本 ...

  5. 两个"�"="锟斤拷"?

    关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader.欢迎关注,交流和指导! 本文首发于微信公众号,原文链接,转载请全文保留. 以一首七言绝句 ...

  6. Inspiron 14 7000 系列 (7447) 游匣14 拆机图

    Inspiron 14 7000 系列 (7447)   游匣14 拆机图   游匣配置不多说,i5起步,标配4G GTX850M显卡,这么霸道的配置给我玩扫雷肯定不卡.配置高功耗就大,不过游匣的散热 ...

  7. 完成在本机远程连接HBase进行数据增删改查

    1.进行hbase与本机远程连接测试连接 1.1 修改虚拟机文件hbase-site.xml(cd/usr/local/hbase/conf)文件,把localhost换成你的虚拟机主机名字 1.2修 ...

  8. eMMC真能优化成UFS?谈谈手机闪存的文件系统

    和UFS闪存相比,eMMC的性能更弱,同一型号的手机混用这两种规格的闪存,让一些消费者感到了不满.对此,厂商称通过优化,eMMC的产品也可以获得优秀的体验.这个优化到底是怎么回事?根据以往的一些宣传, ...

  9. 【小米3使用经验】小米3联通版 miui7.2.11稳定版刷机

    1.我的手机是小米3联通版的,买来后为了配合公司的手机开发,将Android系统升级到4.4.4版本,MiUi为默认版本. 前段时间可能不小心开启了自动升级,结果Android系统升级到6.0.1版本 ...

随机推荐

  1. 《Java核心技术卷I》——第5章 继承

    在C++中,没有提供用于表示抽象类的特殊关键字.只要有一个纯虚函数,这个类就是抽象类. hashCode()方法是定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址. 绝大 ...

  2. Codeforces Round #426 (Div. 2) - C

    题目链接:http://codeforces.com/contest/834/problem/C 题意:两个在玩一个游戏,对于每一轮,选定一个自然是k,初始两人的分数都为1,每一个回合赢的人在他当前分 ...

  3. 为什么我选择用 flutter

    1. flutter 生成的是机器代码,他既不是 hybrid 也不是transpiler,  因此有很高的执行效率. 2. declarative ui,这不是什么新的概念,在 react vue ...

  4. noip2017简要题解。

    重新写了一下去年的题来看看自己到底是有多傻逼. 小凯的疑惑 打表. 时间复杂度 搞了一大坨题面,但是真正有用的信息只有几个: 判断他给你的复杂度是多少. 判断当前循环进不进的去. 判断当前循环产生的贡 ...

  5. LeetCode--064--最小路径和

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入:[  [1,3,1], [1,5,1], ...

  6. Spring Boot文件上传

    一.创建一个简单的包含WEB依赖的SpringBoot项目 二.配置文件上传的文件大小限制 # 上传文件总的最大值spring.servlet.multipart.max-request-size=1 ...

  7. requiredBackgroundModes

    申明需要后台运行的能力,类型为数组.目前支持以下项目: audio: 后台音乐播放如: { "pages": ["pages/index/index"], &q ...

  8. HDU 2825 Wireless Password ( Trie图 && 状态压缩DP )

    题意 : 输入n.m.k意思就是给你 m 个模式串,问你构建长度为 n 至少包含 k 个模式串的方案有多少种 分析 : ( 以下题解大多都是在和 POJ 2778 && POJ 162 ...

  9. Ubuntu 16.04下使用docker部署ceph集群

    ceph集群docker部署 通过docker可以快速部署小规模Ceph集群的流程,可用于开发测试. 以下的安装流程是通过linux shell来执行的:假设你只有一台机器,装了linux(如Ubun ...

  10. vim 复制

    要复制到别的地方,用 "+y 来复制,注意是三个字符.gg"+yG 1.复制 1)单行复制 在命令模式下,将光标移动到将要复制的行处,按“yy”进行复制: 2)多行复制 在命令模式 ...