Systrace 学习笔记

和你一起终身学习,这里是程序员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 线程组成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值