- android层
方法一:
1.用android studio打开android Profile工具
2.可以选择添加哪个进程进行监听:
3.点击第一个CPU进入CPU监听界面
4.点击record记录cpu使用情况:
5.以wifi为例,开始操作手机设置里面的wifi开关,操作完后,点击停止。这时候会生成cpu使用情况表:表是按照执行的顺序显示,将鼠标移动到上面可以看到具体类名和方法名以及耗时多少,然后对该方法进行修改。
Profile支持四种方式显示执行的方法。
- Call Chart:通过执行的顺序显示;
- Flame Chart:通过火焰图显示;
- Top Down:自顶向下调用显示;
- Bottom Up:自底向上调用显示;
6.也可以使用adb 查看cpu使用情况,如:
第一组数据的含义:
User 处于用户态的运行时间,不包含优先值为负进程
Nice 优先值为负的进程所占用的CPU时间
Sys 处于核心态的运行时间
Idle 除IO等待时间以外的其它等待时间
IOW IO等待时间
IRQ 硬中断时间
SIRQ 软中断时间
第二组数据的含义:
PID 进程id
PR 优先级
CPU% 当前瞬时CPU占用率
S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
#THR 程序当前所用的线程数
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
UID 进程所有者的用户id
Name 进程的名称
使用的命令是adb shell top –m 20 –s cpu
注:20表示显示cpu耗时前20的进程(可以改成10或者更少的数字),-s cpu表示按照cpu这一列排序
方法二:
1, 确定cpu过高进程
输入 adb shell top -m 10 确定排名前10的进程
然后按ctrl+c退出
- DDMS抓取进程调用函数
进入C:\Users\Administrator\AppData\Local\Android\Sdk\tools,双击monitor.bat
- 选中进程
如红色框所示
- 抓取调用函数
如红色框所示,数字表示几步,然后点击ok
- 停止抓取
点击红色框停止
停止后的界面如下,鼠标放到日志上面显示存放路径,该图表示存放在
C:\Users\Administrator\AppData\Local\Temp
- 分析数据
黑色区域表示cpu繁忙,一直在处理指令。通过分析进程调用堆栈,发现wifimanager处理wifi过滤结果非常耗时。
- native 层
1, 确定cpu过高进程
输入 adb shell top -m 10 确定排名前10的进程
2, 抓取进程数据
Perf record -p Pid --call-graph fp -o data/perf.data
3, 解析进程数据
Perf report -g -i data/perf.data > data/perf.log
从手机中拖出日志,可以直观的看出哪个函数消耗cpu比较高