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

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章