在Android上,我可以在不看屏幕的情况下检测屏幕抖动吗?

时间:2015-05-21 17:23:26

标签: android performance user-interface

我试图在自动测试期间使用systrace的输出来检测janky滚动:我想提前注意它,而不必坐在那里观看。

我花了一些时间试图了解这一痕迹,并发现这本电子书非常有用: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花费的时间超过了滴答来完成其处理 - 应用程序的错误是因为显示器非常复杂,或者是因为某些队列不空而发生的事情足够?

我宁愿错过一个可能的jank而不是声称已找到一个不存在的那个。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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