如何确定阻止进入suspend的原因

系统没有进入suspend,主要的原因是因为系统有锁导致.

锁一般分为:APP透过PowerManager拿锁,以及kernel wakelock.

1分析上层持锁的问题:

目前PowerManagerService的log 默认不会打开,可以通过修改:

/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java

    private static final boolean DEBUG = true;private static final boolean DEBUG_SPEW = DEBUG && false;
修改为:private static final boolean DEBUG = true;private static final boolean DEBUG_SPEW = true;
打开上层的log

通过syslog:搜索关键字:total_time=来确定持锁的时间.

PowerManagerService: releaseWakeLockInternal: lock=31602562 [*job*/DownloadManager:com.android.providers.downloads], flags=0x0, total_time=600051ms

或者通过正则表达式:total_time=[\d]{4,}ms 过滤出持锁时间比较长的锁.

PowerManagerService: releaseWakeLockInternal: lock=31602562 [*job*/DownloadManager:com.android.providers.downloads], flags=0x0, total_time=600051ms
PowerManagerService: releaseWakeLockInternal: lock=56317918 [*job*/DownloadManager:com.android.providers.downloads], flags=0x0, total_time=283062ms
PowerManagerService: releaseWakeLockInternal: lock=216012597 [AudioMix], flags=0x0, total_time=120003ms
PowerManagerService: releaseWakeLockInternal: lock=41036921 [AudioMix], flags=0x0, total_time=167984ms
PowerManagerService: releaseWakeLockInternal: lock=70859243 [GsmInboundSmsHandler], flags=0x0, total_time=3206ms
PowerManagerService: releaseWakeLockInternal: lock=242046348 [AudioMix], flags=0x0, total_time=122205ms

2 kernel的锁

kernel 锁默认不会打印出来,一般是待机结束后通过节点来获取:

adb shell  cat /sys/kernel/debug/wakeup_sources >  wakeup_sources.log

active_count:对应wakeup source被激活的次数.
event_count:被信号唤醒的次数 
wakeup_count:中止suspend的次数. 
expire_count:对应wakeup source超时的次数. 
active_since:上一次还活跃的时间点.时间单位跟kernel log前缀时间是一样(kernel单调递增时间). 
total_time:对应wakeup source活跃的总时长. 
max_time:对应的wakeup source持续活跃最长的一次时间. 
last_change:上一次wakeup source变化的时间(从持锁到释放or释放到持锁),时间单位跟kernel log前缀时间是一样(kernel单调递增时间). 
prevent_suspend_time:对应wakeup source阻止进入autosleep的总累加时间.

一般情况下:
如果是复现机,前面没有捉log,也没有dump log,只有一份wakeup_sources.log
可以看下prevent_suspend_time,一般时间越大越可能是阻止系统进入suspend的wakeup sources.

如果测试前后,都有捉 wakeup_sources.log 请对两份wakeup_sources.log的total time的差值.
差值时间跟灭屏的时间对得上,一般就是这个锁引起的问题.

把捉出来的wakeup_sources.log复制到excel表格中,比较好对齐,一个是比较好计算.

其中dispsys_wakelock total_time的时间有697614mS 也就是总共有697s.

或者在待机测试结束后通过命令:

adb bugreport > bugreport.txt

搜索关键:

底层的锁:
All kernel wake locks: 
Kernel Wake lock ttyC0 : 1h 33m 15s 668ms (3856 times) realtime 
Kernel Wake lock radio-interface: 1h 20m 56s 210ms (3995 times) realtime 
Kernel Wake lock ccci3_at : 1h 9m 43s 491ms (2932 times) realtime 
Kernel Wake lock ccci_fs : 1h 0m 52s 818ms (3432 times) realtime 
Kernel Wake lock ccci3_at2 : 41m 16s 938ms (2465 times) realtime

上层的锁:
All partial wake locks: 
Wake lock 1001 RILJ: 5m 29s 768ms (13118 times) realtime 
Wake lock 1000 *alarm*: 4m 7s 823ms (2330 times) realtime 
Wake lock 1000 ConnectivityService: 59s 513ms (1 times) realtime 
Wake lock u0a111 *alarm*: 50s 334ms (751 times) realtime 
Wake lock u0a111 WakerLock:999603354: 28s 655ms (125 times) realtime 
Wake lock 1000 NetworkStats: 11s 434ms (569 times) realtime

Android 功耗(24)---不待机分析相关推荐

  1. Android 功耗(4)---MTK平台待机功耗分析流程

    MTK平台待机功耗分析流程 MTK平台待机功耗分析流程 1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法.  测试功耗数据之前,请先确认 ...

  2. android平板待机电流,Android 功耗(4)---MTK平台待机功耗分析流程

    MTK平台待机功耗分析流程 1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法. 测试功耗数据之前,请先确认以下配置: 1.关闭 WIFI ...

  3. Android功耗(8)---Camera功耗分析和拆解

    一.Camera功耗分析和拆解 Q:如何判断camera功耗是否偏高? A:camera功耗包含平台基础值.屏幕.模组.马达.feature.算法.camera app等部分,我们的camera在MT ...

  4. android 功耗(1)---android 功耗分析方法和优化

    android 功耗 高通平台   分类:功耗 1.底电流调试(Rock Bottom Current Optimization) 底电流在手机飞行模式下调试.每个平台的底电流数据可能不一样,具体可以 ...

  5. android 功耗分析方法和优化

    标签: android 功耗 高通平台   分类:功耗 1.底电流调试(Rock Bottom Current Optimization) 底电流在手机飞行模式下调试.每个平台的底电流数据可能不一样, ...

  6. Android 功耗(11)---Android 功耗分析之wakelock

    Android 功耗分析之wakelock 生活总是让我们遍体鳞伤,但到后来,那些受伤的地方一定会变成我们最强壮的地方.-海明威 WakeLock是什么 WakeLock作用 WakeLock有那些分 ...

  7. 【转载】Android功耗改进

    原文地址:<Android功耗改进> by 保罗的酒吧 最近几年中,Google在一直极力的改进Android系统的续航能力.在本文中,我们将看到Andrdoi自5.0到8.0这几个版本中 ...

  8. Android 功耗(14)----Android功耗 问题debug处理

    Android 功耗问题debug处理(主要是睡眠时"大"电流问题的debug方法示例) 1. 在手机进入sleep后,被上层apk唤醒的debug方法 请抓取相应的待机的mobi ...

  9. Android系统问题及日志分析

    这篇文章全是干货,我们一起聊聊安卓系统稳定性问题.部分性能问题.本篇列举了作者在某厂工作中遇到实际问题,大部分只有日志概率性问题,通过日志分析问题. 自己对这半年工作做个笔记,也希望对大家有用.方便你 ...

  10. Android 功耗(15)---Android系统耗电

    详解Android系统耗电 首先介绍一下为什么Android手机普遍有电池不耐用的问题. 作为一个开放系统,Android对于应用程序,特别是后台应用程序几乎完全不加以限制.导致了以下几个比较大的问题 ...

最新文章

  1. Hyperledger Fabric Docker 文件路径权限
  2. 【总结整理】如何做需求分析(转)
  3. String 堆内存和栈内存
  4. Java面向对象(四)final关键字
  5. 【BZOJ】【1086】 【SCOI2005】王室联邦
  6. python 数据库驱动开发实例_Python驱动概述
  7. python字符串追加字符_Python字符串追加
  8. Oracle RMAN完全恢复案例(二)
  9. img引用网络图片资源无法加载问题解决
  10. C. Memory and De-Evolution 逆向思维
  11. BAT算法工程师的成长之路,超详细的学习路线
  12. envi自定义坐标系
  13. 搭建php程序之Linux 安装PHP集成环境宝塔面板
  14. 微信支付之商户号以及appid以及密钥
  15. html把图片放到文章右边,怎么在文章中把图片放在文字的左边、右边、中 – 手机爱问...
  16. 将文本中的各个单词的字母顺序翻转(Java)
  17. 小米运维部14年校招笔试题A的个人答案
  18. 2022-2028全球与中国生物基聚氨酯(PU)市场现状及未来发展趋势
  19. 2020年4月20日 星期一 晴 晚餐
  20. 将输入的单词按首字母排序

热门文章

  1. 嵌入式Linux系统编程学习之十六用程序发送信号
  2. java 文件url地址_简单的解析文件,取URL地址,并根据地址抓下页面
  3. 如何查看linux服务器的白名单,linux服务器iptables防火墙白名单添加方式
  4. JavaScript中的类方法、对象方法、原型方法
  5. 非关系型数据库--MongoDB
  6. mysql 多列索引的生效规则,生成1000w数据的存储过程
  7. bootstrap中container类和container-fluid类的区别
  8. Python : *args和**kwargs是什么东东呢?
  9. CSS中的box-sizing
  10. sql server 事务与try catch