在dumpsys gfxinfo报告中,“Total frames”和“Janky frames”的含义是什么?

8
我正在使用dumpsys gfxinfo命令计算应用程序的性能。在对我的应用程序代码进行性能改进后,我观察到“总帧数”和“不稳定帧数”的数量显着减少。
“总帧数”和“不稳定帧数”数量的减少意味着什么?这是性能的良好指标吗?
附上性能报告。 性能改善后
################################
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
######################################
3个回答

6

"Total Frames":创建用于渲染的帧数。 "Janky Frames":丢失的帧数。 "Actual Frames rendered":实际渲染的帧数为 Total Frames - Janky Frames。

尽管总帧数增加和 Janky 帧数减少是性能的良好指标,但这还不够。屏幕上每秒实际渲染的帧数是决定性能健康状况的计算。每秒渲染的帧数越多,意味着性能越好。


3
在使用"dumpsys gfxinfo"之前,您需要使用"adb shell dumpsys gfxinfo reset"重置系统中的帧度量数据。然后,在您改进的屏幕上进行一些操作。最后使用"dumpsys gfxinfo"。
总渲染帧数:从“reset”到“dumpsys gfxinfo”渲染的帧数。 延迟帧数:超过16毫秒的帧数,而不是丢帧数。
延迟帧率是您可以用来比较性能改进的非常好的数据。在您的情况下,您将延迟帧率从62.28%降低到37.87%,这非常出色。

超过16毫秒的帧不是会被丢弃吗?那么“卡顿帧”和“丢帧”之间有什么区别呢? - Shanker
1
一个帧需要64毫秒来渲染,这意味着会丢失4个帧。 - hotpro
重置时使用以下命令: adb shell dumpsys gfxinfo <PACKAGE_NAME> reset - Vladislav Shcherbakov
@hotpro,如果一个帧需要64毫秒才能渲染。这不应该意味着我们有1个卡顿帧和3个丢失的帧吗?并非你所指出的所有4个帧都丢失了。 - Andrii Bogachenko

1

adb shell dumpsys gfxinfo <PACKAGE_NAME> 命令提供了有关整个进程生命周期内帧渲染的聚合统计信息。

在解释输出时应注意以下两点:

  • 在您提供的示例中,不清楚执行了两个测试的时间长度,因此对于任何解释都是无用的。 gfxinfo 输出还提供了时间信息 uptimerealtimestats since。要计算记录的总时间,需要计算 stats since - realtimestats since - uptimerealtimeuptime 很可能是相同的值(两者之间的差异是另一个 topic
  • 只有在有内容可渲染时,总渲染帧数才会增加。如果查询静态用户界面的 gfxinfo 并且没有交互或动画帧被渲染,则渲染的帧数非常低。因此,仅当执行相同的测试(完全相同的 UI 交互或动画)时,两个输出才是可比较的。

回答您的问题:

"总帧数"和"卡顿帧数"减少意味着什么?

总帧数的减少可能是由于交互较少或gfxinfo记录时间较短。卡顿帧数的减少基本上是相同的,也就是更多的帧可能已经被渲染并且没有被丢弃。只有在两个示例中应用了相同的测试时,这种解释才有意义。

这是性能的好指标吗?

如果(且仅当)对于比较两个不同实现(例如动画)的相同测试导致优化版本的两个实现中卡顿帧数减少,则卡顿帧数的减少是性能的好指标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接