和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、Systrace 简介
二、Systrace 预备知识
三、Why 60 fps
四、SystemServer 解读
五、SurfaceFlinger 解读
六、Input 解读
七、Vsync 解读
八、Vsync-App :基于 Choreographer 的渲染机制详解
九、MainThread 和 RenderThread 解读
十、Binder 和锁竞争解读
十一、Triple Buffer 解读
十二、CPU Info 解读
前言
本文为学习systrace所做笔记、心得,学习资源为高兄的Systrace系列文章:Android Systrace 基础知识。
一、Systrace 简介
Systrace 是什么?
Android4.1 中新增的性能数据采样和分析工具,它可以按模块、按服务、按系统等来手收集数据,使开发者可以根据systrace展示的数据来对系统进行优化。
Systrace使用流程:
手机准备好你要进行抓取的界面
点击开始抓取(命令行的话就是开始执行命令)
手机上开始操作(不要太长时间)
设定好的时间到了之后,会将生成 Trace.html 文件,使用 Chrome 将这个文件打开进行分析
二、 Systrace 预备知识
状态不同的线程:
绿色 --> 运行中 Running
对于在CPU上执行的进程,需要查看其运行时间、是否跑在该跑的核上、频率是否够等。
蓝色 --> 可运行 Runnable
对于在等待序列中的进程,需要查看是否有过多任务在等待、等待时间是否过长等。
白色 --> 休眠中 Sleeping
这里一般是在等事件驱动。
橘色 --> 不可中断的睡眠态_IO_Block Uninterruptible Sleep | WakeKill - Block I/O
线程在I / O上被阻塞或等待磁盘操作完成。
紫色 --> 不可中断的睡眠态 Uninterruptible Sleep
线程在另一个内核操作(通常是内存管理)上被阻塞。
进程唤醒信息分析:
抓住从Sleeping --> Runnable的进程,利用systrace找到是谁唤醒的它,又是为什么花了这么久才唤醒。
信息区数据解析:
点击不同的位置,选择不同的slice信息展示。
快捷键使用:
W : 放大 Systrace , 放大可以更好地看清局部细节
S : 缩小 Systrace, 缩小以查看整体
A : 左移
D : 右移
M : 高亮选中当前鼠标点击的段(这个比较常用,可以快速标识出这个方法的左右边界和执行时间,方便上下查看)
数字键1 : 切换到 Selection 模式 , 这个模式下鼠标可以点击某一个段查看其详细信息, 一般打开 Systrace 默认就是这个模式 , 也是最常用的一个模式 , 配合 M 和 ASDW 可以做基本的操作
数字键2 : 切换到 Pan 模式 , 这个模式下长按鼠标可以左右拖动, 有时候会用到
数字键3 : 切换到 Zoom 模式 , 这个模式下长按鼠标可以放大和缩小, 有时候会用到
数字键4 : 切换到 Timing 模式 , 这个模式下主要是用来衡量时间的,比如选择一个起点, 选择一个终点, 查看起点和终点这中间的操作所花费的时间.
三、Why 60 fps
软件的渲染率和硬件的刷新率要一起搭配,才能做到用户使用时足够流畅。
为什么手机的屏幕刷新率不能太高呢?
限于手机电池、硬软件的技术,目前移动设备上使用的60HZ,也就是60帧每秒,虽然在硬件和软件上,都能做到120HZ的刷新率,但是单位时间内高刷新次数也会带来高消耗,而移动端设备是不可能随时充着电的,所以手机屏幕的刷新率现在还不能太高,当然未来肯定能行。
四、 SystemServer 解读
窗口动画:
启动流程:点击App时,首先Launcher会启动一个StartingWindow,等App中启动页面的第一帧绘制好了,就会马上从Launcher切换回App的窗口动画。
ActivityManagerService:
AMS 相关的 Trace 一般会用 TRACE_TAG_ACTIVITY_MANAGER 这个 TAG,在 Systrace 中的名字是 ActivityManager。
WindowManagerService:
一般会用 TRACE_TAG_WINDOW_MANAGER 这个 TAG,在 Systrace 中 WindowManagerService 在 SystemServer 中多在 对应的 Binder 中出现。
Input:
主要是由 InputReader 和 InputDispatcher 这两个 Native 线程组成。