Android性能测试方法大放送(8)——功耗1

时间:2020-08-07 07:54:04 来源:互联网 阅读:-

今天讲讲功耗方面的知识,这部分将分为两个部分来说:系统功耗和单个应用的功耗。本篇先说说系统方面的功耗。

一、电量测试方法

A、安装电池管理的软件,管家、卫士一类的软件。

B、自己读取Android的内核日志,电量变化广播等。

C、物理设备,安培轮等

二、待机电流

A、通过adb log查看

adb logcat -v time > YearMounthDayHourMinute_logcat.txt //main log

adb logcat -v time -b events > YearMounthDayHourMinute_logcat_event.txt //event log

adb logcat -v time -b radio > YearMounthDayHourMinute_logcat_radio.txt //radio log

adb shell dmesg > YearMounthDayHourMinute_dmesg.txt //kernel log

可以采用功耗问题时间追踪表来精确追踪功耗异常。

可以使用如下命令来打开指定文件的kernel log(以qpnp-adc-tm.c和qpnp-adc-common.c为例):

adb shell mount -t debugfs none /sys/kernel/debug

adb shell "echo 8 > /proc/sys/kernel/printk"

adb shell "echo 'file qpnp-adc-tm.c +p' > /sys/kernel/debug/dynamic_debug/control"

adb shell "echo 'file qpnp-adc-common.c +p' > /sys/kernel/debug/dynamic_debug/control"

adb shell "echo 8 > /proc/sys/kernel/printk"

为指定的函数开启log,以qpnpint_handle_irq为例:

adb shell "echo 'func qpnpint_handle_irq +p' > /sys/kernel/debug/dynamic_debug/control"

*#logkit#*调出logkit apk,可以保存logcat、dmesg、crash、QXDM、GPU log等日志信息到手机里面。

B、top命令

通过top命令,可以查询到cpu占用较高的应用。如果一个应用一直在占用cpu,而此时并没有打开该应用,那么该应用很可能会导致待机异常。

adb shell top

“该场景下CPU使用率”是User+System+IOW+IRQ

“模块相关的CPU占用率”是模块相关进程占用CPU使用率的总和

C、运行

设置-->应用-->正在运行,可以看到正在运行的应用或者服务。禁止掉应用或者服务,观察待机电流变化。

D、wakeup debug mask

调试wakeup问题,可以使能debug功能,然后抓取log。Log中会增加一些debug信息。

mount -t debugfs none /sys/kernel/debug

echo 1 > /sys/kernel/debug/clk/debug_suspend

echo 1 > /sys/module/msm_show_resume_irq/parameters/debug_mask

echo 4 > /sys/module/wakelock/parameters/debug_mask

echo 1 > /sys/module/lpm_levels/parameters/debug_mask

echo 0x16 > /sys/module/smd/parameters/debug_mask

E、wakelock

(1)wakeup_sources

kernel wakelock和userspace wakelock都有可能阻止系统睡眠。所有的wakeup_sources均保存在sys节点/sys/kernel/debug/wakeup_sources里面。

该文件包含了如下信息:

the total amount of time a wakeup source has prevented suspend

the amount of time a wakelock has been active since the last activation etc. The unit of time is milliseconds.

(2)active_since

active_since值可以用来确认wakelock是否正在阻止休眠。如果该值不是零,那么这个wakelock正在工作并且阻止休眠。

(3) 获取wakeup_sources的命令

adb root 67754400

adb remount

adb shell

cat /sys/kernel/debug/wakeup_sources > /data/wakeup_sources.txt

adb pull /data/wakeup_sources.txt

获得wakeup_sources.txt以后,通过Excel打开,active_since不为0的项为wakeup source。以表2为例,msm_dwc3对应的active-since值481756>0,这意味着msm_dwc3驱动在阻止系统睡眠,下一步需要检查msm_dwc3驱动代码及相关log。

(4)power:wakeup_source_activate and power:wakeup_source_deactivate events

当一个wakeup source被acquire或者release时候,power:wakeup_source_activate和power:wakeup_source_deactivate event将随即被写到trace buffer里面,这样可以记录wakeup source被driver使用的频率。

F、powertop

powertop用来看CPU的运行统计以协助调试power问题。

获取powertop log的方法:

1. 通过USB连接手机到电脑

2. adb shell,然后执行如下命令:

sleep 10 && /data/powertop [-r] -d -t 30 > /data/powertop.log &

3. 拔掉USB线,等待10秒后开始功耗测试

4. 插上USB

5. adb pull /data/powertop.log

三、屏幕对功耗的影响

屏幕亮度等级不同,功耗不同。亮度越低,功耗越低。调低屏幕默认背光亮度等级和屏幕最高亮度设置时候的背光亮度等级,可以优化手机整体功耗表现。

LCD背光等级的设备节点:

/sys/class/leds/lcd-backlight/brightness

默认背光等级和最高亮度背光等级需要同时考虑到用户体验和功耗表现,需要一起评估。

另外,调试LCD的fps帧率,也可以优化功耗。

四、CPU/GPU DVFS

CPU/GPU的动态调频调压可以优化手机的功耗表现。该影响是整体性的,系统性的。

CPU降频主要通过两种方式实现,都可以达到降频的目标。

1、设置CPU工作在powersave模式。设置该模式后,CPU将一直工作在最低频率(300000hz)。此时手机最省电,但是有可能会出现手机运行变卡顿。

例如:将CPU0置为powersave模式,命令为:

echo "powersave" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

例如:将CPU1置为powersave模式,命令为:

echo "powersave" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor

ex780共有4个CPU(CPU0~CPU3),都可以这样处理

2、限制CPU最高频率,以限制CPU的运行频率上限

CPU(CPU0~CPU3)可以选择的频率值如下所列,即这些数值都可以用作CPU的频率上限。选择的频率上限可以根据实际场景需要来设置。在超级省电模式下,CPU工作的宗旨是:CPU工作频率低+运行不卡,两项都要保障。

CPU可以选择的频率:

300000 422400 652800 729600 883200 960000 1036800 1190400 1267200 1497600 1574400 1728000 1958400 2265600 2457600

例如:将CPU0的频率上限设置为960000

echo 960000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

例如:将CPU0的频率上限设置为422400

echo 422400 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

GPU相关调试与CPU类似,设备节点路径/sys/devices/fdb00000.qcom,kgsl-3d0/kgsl/kgsl-3d0

五、CPU占用率

应用对cpu的占有率,如果占有率过高,则该应用一般会导致功耗较大。

adb shell top -m 10

六、游戏功耗

可以从下面几个方面优化:

降低屏幕背光亮度等级;

采用CPU、GPU动态调频调压,并调低CPU、GPU频率下限;

采用thermal-engine.conf 。

七、Camera功耗偏大:

降低camera帧率;

降低屏幕背光亮度等级;

采用CPU、GPU动态调频调压,并调低CPU、GPU频率下限;

采用thermal-engine.conf 。

八、测试结论:

1、灭屏待机最省电:

A、任何App包括后台Service应该尽可能减少唤醒CPU的次数,比如IM类业务的长连接心跳、QQ提醒待机闹钟类业务的alarm硬时钟唤醒要严格控制;

B、每次唤醒CPU执行的代码应该尽可能少,从而让CPU迅速恢复休眠,比如申请wake lock的数量和持有时间要好好斟酌;

2、WiFi比蜂窝数据,包括2G(GPRS)、3G更省电:

A、尽量在WiFi下传输数据,当然这是废话,不过可以考虑在有WiFi的时候做预加载,比如应用中心的zip包、手Q web类应用的离线资源等;

B、非WiFi下,尽量减少网络访问,每一次后台交互都要考虑是否必须。虽然WiFi接入方式已经占到移动互联网用户的50%,但是是有些手机设置为待机关闭WiFi连接,即便有WiFi信号也只能切换到蜂窝数据

3、Alarm唤醒频繁会导致待机耗电增加:

alarm硬件闹钟。Google官方提供的解释是:Android提供的alarm services可以帮助应用开发者能够在将来某一指定的时刻去执行任务。当时间到达的时候,Android系统会通过一个Intent广播通知应用去完成这一指定任务。即便CPU休眠,也不影响alarm services的服务,这种情况下可以选择唤醒CPU。

4、Wake locks持有时间过长会导致耗电增加:

Wake locks是一种锁机制。简单说,灭屏CPU休眠还需要做一个判断,就是看是否还有任何应用持有wake locks。如果有,CPU将不会休眠。

下一篇继续。

推荐阅读:手机产业

(正文已结束)

免责声明及提醒:此文内容为本网所转载企业宣传资讯,该相关信息仅为宣传及传递更多信息之目的,不代表本网站观点,文章真实性请浏览者慎重核实!任何投资加盟均有风险,提醒广大民众投资需谨慎!