1. cat /sys/kernel/debug/wakeup_sources 打印解释
active_since: 此唤醒源从上次持锁到cat这个文件时持续处于ative状态的时间。
解释:
active_since显示的是print_wakeup_source_stats()中变量active_time的值,即: now - ws->last_time
wakeup_source_activate():上锁的时候会对ws->last_time赋值。
wakeup_source_deactivate():释放锁的时候会对ws->last_time赋值。
print_wakeup_source_stats(): 只在唤醒源是avtive的时候active_time才为非0值,所以# cat /sys/kernel/debug/wakeup_sources显示的active_since值就是此唤醒源从上次持锁到cat这个文件时持续持锁的时间。
其它字段:
name: ws->name ==> 唤醒源的名字。
active_count: ws->active_count ==> 此唤醒源由非active状态变为active状态的次数。
event_count: ws->event_count ==> 此唤醒源代码流程中尝试持锁的次数,不论此唤醒源先前是否已经处于active状态了都计数了。
wakeup_count: ws->wakeup_count ==> 此唤醒源可能中止suspend流程的次数,只在系统当前没有任何唤醒源持锁时它持锁才加1。
expire_count: ws->expire_count ==> 此唤醒源超时的次数。
active_since: ktime_to_ms(active_time) ==> ktime_sub(now, ws->last_time) 此唤醒源从上次持锁到cat这个文件时持续处于ative状态的时间。
total_time: ktime_to_ms(total_time) ==> 此唤醒源处于active状态的全部时间 == 已经累计的持锁时间 + 当前active持续的时间。
max_time: ktime_to_ms(max_time) ==> 此唤醒源单次持锁的最大时间,ws->max_time和当前持锁时间二者较大的一个。
last_change: ktime_to_ms(ws->last_time) ==> 此唤醒源状态变化的时间点。
prevent_suspend_time: ktime_to_ms(prevent_sleep_time) ==> 使能了内核的autosleep功能才有效,可以理解为此唤醒阻止内核autosleep触发系统休眠流程的总时间。
注:时间的单位都是ms.
先打开一个空白的excel,然后在excel中打开wakeup_cources.txt文档,文本导入向导中选"分割符号",然后根据实际选择空格/tab,然后在数据预览中看列划分的是否ok,完成。
2. CPU功耗与电压频率的关系
P = C * V^2 * f P 是功耗 C 可以简单看作一个常数,它由制程和设计等因素决定 V 是电压 f 是频率
参考:https://blog.csdn.net/memory01/article/details/82972166
3.关闭Sensor开待机电流: adb shell dumpsys sensorservice restrict test
4.关闭上层进行调试
adb shell stop //关闭system server
adb shell start //拉起system server
可以看功耗差异是不是Android系统导致的,若是,可以抓systrace继续分析。