Systrace 学习笔记
和你一起终身学习,这里是程序员 Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、Systrace 红绿黄 frame 代表意义?
绿色: 一帧耗时在 1 个 vsync 周期内完成。
黄色: 一帧耗时在 1-2 个 vsync 周期内完成。
红色: 一帧耗时在 2 个 vsync 周期以上完成。
二、Systrace 中 如何判断丢帧?
SurfaceFlinger 是判断丢帧的关键
1.SurfaceFlinger 的 UIThread 在每个 Vsync-SF 的时候是否没有合成?
2.如果没有合成操作,那么需要看没有合成的原因:
- a.因为 SurfaceFlinger 检查发现没有可用的 Buffer 而没有合成操作?
- b.因为 SurfaceFlinger 被其他的工作占用(比如截图、HWC 等)?
3.如果有合成操作,那么需要看对应的 App 的 可用 Buffer 个数是否正常:
如果 App 此时可用 Buffer 为 0,那么看 App 端为何没有及时 queueBuffer(这就一般是应用自身的问题了),因为 SurfaceFlinger 合成操作触发可能是其他的进程有可用的 Buffer .
三、Vsync 是什么?
Vsync (Vertical Synchronization ) 垂直同期, 将 FPS 与 屏幕刷新率同步起来,避免撕裂现象发生。
四、Systrace 中 Input 事件有哪些关键字?
- InputReader: System_server 中,负责从 EventHub 中读取出 input 事件,并放入 InboundQueue
- InboundQueue :存放input 事件,交给 InputDispatcher处理。
- InputDispatcher: System_server 中,对input事件进行包装分发
- OutboundQueue:即将要被派发给对应 AppConnection 的事件
- WaitQueue:已经派发给 AppConnection 但是 App 还在处理没有返回处理成功的事件
- PendingInputEventQueue:记录的是 App 需要处理的 Input 事件
- deliverInputEvent : App UI Thread 被 Input 事件唤醒
- InputResponse:标识 Input 事件区域,这里可以看到一个 Input_Down 事件 + 若干个 Input_Move 事件 + 一个 Input_Up 事件的处理阶段都被算到了这里
五、 抓取/打开 Systrace 的方法是怎样的?
抓取:
1.Android SDK monitor
Android Device Moniter -- capture system wide trace using Android systrace
2.手机开发者模式自带
Developer Options --System Tracing ( 文件保存路径:data/local/traces )
3.pyhton 命令
python systrace.py -o trace.html -t 77 gfx am input view wm res idle freq sched camera -b 102400 --time=10
打开:
chrome://tracing/
https://ui.perfetto.dev/#!/viewer
六、Systrace 中的线程状态有哪些?
绿色: Running 运行中,点击可查看 CPU 运行状态,运行时间等。
蓝色: Runnable 待运行,等待CPU调度,时间越长表示 CPU 调度越繁忙。
白色: Sleeping
至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!