我正在使用dumpsys gfxinfo命令计算我的应用程序性能。在我的应用程序代码中对性能改进进行更改后,我观察到帧总数和 Janky 帧数急剧减少。
">总帧数"计数和"简帧数"计数的减少意味着什么?它是性能的良好指标吗?
附加的性能报告。
性能改进后
################################
Total frames rendered: 1542
Janky frames: 584 (37.87%)
90th percentile: 81ms
95th percentile: 93ms
99th percentile: 129ms
Number Missed Vsync: 268
Number High input latency: 61
Number Slow UI thread: 471
Number Slow bitmap uploads: 15
Number Slow issue draw commands: 511
Total ViewRootImpl: 1
Total Views: 434
Total DisplayList: 505.57 kB
####################################
性能改进之前
###############################
Total frames rendered: 5185
Janky frames: 3229 (62.28%)
90th percentile: 101ms
95th percentile: 109ms
99th percentile: 121ms
Number Missed Vsync: 2487
Number High input latency: 65
Number Slow UI thread: 2088
Number Slow bitmap uploads: 75
Number Slow issue draw commands: 2967
Total ViewRootImpl: 1
Total Views: 435
Total DisplayList: 506.74 kB
######################################
"总帧数" :为渲染而创建的帧数。 "抖动帧数":丢帧数。 "渲染的实际帧数":总帧数 - 简帧数。
尽管总帧数的增加和简帧数的减少
是性能的良好指标,但这还不够。一秒钟内在屏幕上呈现的实际帧数是决定性能运行状况的计算。一秒钟内渲染的帧数越多,意味着性能越好。
在使用"dumpsys gfxinfo"之前,你可以使用"adb shell dumpsys gfxinfo reset"来重置系统中的帧度量数据。然后在您改进的屏幕上进行一些操作。然后使用 "dumpsys gfxinfo" 。
渲染的总帧数:从"重置"渲染到"dumpsys gfxinfo"的帧数。 抖乱帧数:是长度超过 16 毫秒的帧数,而不是丢弃的帧数。
Janky 帧速率是一个很好的数据,您可以在提高性能时进行比较。在您的情况下,您将卡顿帧速率从 62.28% 降低到 37.87%,这非常好。
adb shell dumpsys gfxinfo <PACKAGE_NAME>
命令提供有关进程整个生命周期内帧呈现的聚合统计信息。
在解释输出时,应牢记两件事:
- 在您提供的示例中,不清楚这两个测试执行了多长时间,因此对于任何解释都没有用。
gfxinfo
输出还提供时间信息uptime
、realtime
和stats since
。要计算总时间,需要计算stats since - realtime
或stats since - uptime
。realtime
和uptime
很可能是相同的值(两者的区别是另一个话题( - 仅当有任何要渲染的内容时,渲染的总帧数才会增加。如果查询 gfxinfo 以获取静态用户界面并且没有交互或动画,则渲染的帧非常非常少。因此,仅当执行相同的测试(完全相同的 UI 交互或动画(时,这两个输出才具有可比性。
要回答您的问题:
"总帧数">和"简帧数"计数的减少意味着什么?
总帧数的减少可能是交互减少或 gfxinfo 记录时间减少。 Janky 帧的减少基本相同,并且可以渲染更多帧而不会被删除。只有在两个示例中应用了相同的测试时,这种解释才有意义。
它是绩效的良好指标吗?
当(且仅当(用于比较两个不同实现(例如动画(的相同测试导致两个实现的优化版本减少时,卡顿帧的减少是一个很好的性能指标。