内存 采集原理
- 统计原理:
- 单个进程内存信息:最终都是读取 proc/[pid]/smaps
- 系统内存信息:最终是读取 proc/meminfo
- 统计方法
- API 层面通过 Debug.getMeminfo 或者 ActivityManager.getProcessMemoryInfo
- 工具命令 adb dumsys meminfo [pid]
CPU 采集原理
- 统计原理:
- jJiffies: 为Linux核心变数(unsigned long),它被用来记录系统自开机以来,已经过了多少tick。CPU 的利用率就是用执行用户态+系统态的Jiffies 除以总的Jiffies 来表示。
- 单个进程的CPU 使用率: proc/[pid]/stat
- 整个系统的CPU 使用率: proc/stat
- 统计方法:
小于 Android 8.0:程序直接 读取 proc/[pid]/stat 文件 解析返回结果 大于 Android 8.0:无权限读取proc文件,那么则通过 top 命令来间接获取 读取返回结果.
帧率采集原理
统计原理: 利用Choreographer.FrameCallback的fun doFrame(frameTimeNanos: Long)方法 当触发一次VSYNC 信号 则会收到回调,表示收到一帧 ,每秒种累计收到的回调次数则表示每秒的帧数有多少。 版本要求: > =Android 4.1 统计方法:
Choreographer.getInstance().postFrameCallback(new Choreographer.FrameCallback() {
@Override
public void doFrame(long frameTimeNanos) {
// do something
Choreographer.getInstance().postFrameCallback(this);
}
});
X Hz 屏幕刷新率手机 大致每秒回调X 次,高刷手机 刷新率也更高 回调也更加频繁。
|