面试系列——内存,CPU,帧率采集原理总结

Posted BridgeGeorge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试系列——内存,CPU,帧率采集原理总结相关的知识,希望对你有一定的参考价值。

内存 采集原理

  • 统计原理:
    • 单个进程内存信息:最终都是读取 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 命令来间接获取 读取返回结果.
    • 工具命令:adb shell dumpsys cpuinfo [pkg]

帧率采集原理

  • 统计原理:
    即 Frame Rate,单位 fps,是指 gpu 生成帧的速率,如 33 fps,60fps,越高越好。但是对于快速变化的游戏而言,你的FPS很难一直保持同样的数值,他会随着你所看到的显示卡所要描画的画面的复杂程度而变化。
    安卓系统中有 2 种 VSync 信号:
    • 屏幕产生的硬件 VSync: 硬件 VSync 是一个脉冲信号,起到开关或触发某种操作的作用。
    • 由 SurfaceFlinger 将其转成的软件 Vsync 信号:经由 Binder 传递给 Choreographer。

利用Choreographer.FrameCallback的fun doFrame(frameTimeNanos: Long)方法 当触发一次VSYNC 信号 则会收到回调,表示收到一帧 ,每秒种累计收到的回调次数则表示每秒的帧数有多少。
版本要求: > =Android 4.1

  • 统计方法:
  1. 软件统计
Choreographer.getInstance().postFrameCallback(new Choreographer.FrameCallback() 
            @Override
            public void doFrame(long frameTimeNanos) 
                // do something                
                Choreographer.getInstance().postFrameCallback(this);
            
        );

X Hz 屏幕刷新率手机 大致每秒回调X 次,高刷手机 刷新率也更高 回调也更加频繁。

  1. 工具统计
    adb shell dumpsys gfxinfo [pkg] 结合脚本来统计帧率。

以上是关于面试系列——内存,CPU,帧率采集原理总结的主要内容,如果未能解决你的问题,请参考以下文章

面试系列——系统资源调度平台设计和实现总结

Martrix源码分析系列-如何监控帧率变化

音视频功能测面试题目

录屏卡顿,可能是WINDOWS刷新频率有关

多个软件一齐录屏时卡顿,可能是WINDOWS刷新频率有关

app专项测试