我正在尝试使用systrace的输出来检测自动化测试过程中的混乱滚动:我想提早注意到它,而不必坐在那里观察。

我花了一些时间试图弄清痕迹,发现这本电子书非常有用:https://www.safaribooksonline.com/library/view/high-performance-android/9781491913994/ch04.html

最有前途的假设是检查VSYNC-sf是否曾经在显示VSYNC-sf的电话上停止滴答。

在其他计算机上,SurfaceFlinger似乎是由HW_SYNC_0或VSYNC(有时其中一个或两个VSYNC停止了)启动的,但SurfaceFlinger也似乎与VsyncOn有关,有时似乎跟踪是否有未完成的活动缓冲区,有时是否有需要传递的输入事件。令人困惑的是,有时在没有表面翻转器活动,没有应用程序绘制甚至是VSYNC和HW_VSYNC信号决定暂停的情况下,输入事件都是在半秒的暂停期间传递的。

有人知道那里发生了什么吗?

我是否只希望看到Surface Flinger总是很忙-而不是每个刻度都交替忙/闲-总是与一个或其他VSYNC对齐?

我有时还会看到SurfaceFlinger花的时间超过一个滴答声来完成其处理-是该应用程序的错在于显示非常复杂,还是仅仅是因为某些队列不够空而发生了什么?

我宁愿错过一个可能的垃圾,也不愿声称发现了一个不存在的垃圾。

谢谢!

最佳答案

Testing Display Performance列出如何使用dumpsys中的new framestats命令来获取此类信息。它将提供有关您错过了哪些帧以及您错过了多少帧的信息。

还值得注意的是,SurfaceFlinger并不总是很忙。仅在需要更新部分屏幕时才激活。如果屏幕上的任何内容都不需要更新,则不会发生新的渲染,因此SurfaceFlinger应该处于空闲状态。

您可以使用Rendering Performance 101中的Android Performance Patterns视频获得Android渲染管道的更大图片。

关于android - 在Android上,是否可以不看屏幕就能检测到屏幕扭曲?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30380462/

10-10 23:33