如何在Android应用开发过程中测量FPS

31

在 Android 应用程序开发中,有没有一种方法(例如某些应用程序、黑客、库)可以测量每秒帧数(FPS)?


猜测你的问题有点太笼统了。你是在谈论你正在使用的一些股票UI材料,还是正在运行OpenGL上下文或类似的东西?如果是后一种情况,我会自己计算帧数。 - Mario
4个回答

31
您可以使用TinyDancer库。
只需添加如下的代码:
public class DebugApplication extends Application {

  @Override public void onCreate() {

   // default config
   TinyDancer.create().show(this);

   //or customazed config
   TinyDancer.create()
      .redFlagPercentage(.1f) // set red indicator for 10%
      .startingGravity(Gravity.TOP)
      .startingXPosition(200)
      .startingYPosition(600)
      .show(this);
  }
}

你将看到一个交互式视图,其中包含有关屏幕顶部当前FPS的信息。

enter image description here


它非常易于使用,快速实现在现有代码中,并且运行得非常好。不错! - SMalpica
这是最好的解决方案。非常出色的结果! - Ray Li

19
请注意:使用调试器将会影响性能。
从我个人的安卓游戏经验来看,帧时间可以通过android.os.SystemClock来进行测量。也就是说,您每帧调用一次SystemClock.elapsedRealtime()并将其值与上一帧相减。由于elapsedRealtime()以毫秒为单位计量,因此计算帧率就像1000.0 / frametime这样简单。
如果针对API级别16或更高版本(Jelly Bean),您可以使用Choreographer#postFrameCallback将您的代码发送到正在进行的帧中。
另外请注意,帧时间通常比帧率更好地反映了性能。 1000fps和1200fps之间的差距与60fps和61fps之间的差距是相同的时间量(大约,可能少于那个值)。

5
1000到1200的差距大约是0.17秒,60帧和61帧之间的差距大约是0.017秒。因此这绝对是一个巨大的差别。 - Sietse
1
你的经过时间计算是以毫秒为单位的,正如你所说。那么帧速率计算不应该是1000.0 / frametime吗?我猜你的答案指定的单位不太清楚,但由于OP提到了每秒帧数,我认为你需要做1000.0的计算。 - Stealth Rabbi
1
@Dr.ABT 对于这个时钟,只需要在每帧的任何时候调用elapsedRealtime,第一帧之后你的FPS将会很准确。如果你想要更加严谨一些,在主循环之前调用并存储elapsedRealtime,然后在每一帧中,在你使用的任何框架中调用SwapBuffers之后就可以了。 - Robert Rouhani
通常情况下,没有内置的方法可以在帧渲染完成后触发某种事件或通知。您可以通过在SwapBuffers之后立即调用通知相关内容来自行构建它。 - Robert Rouhani
是的,那可能行得通。如果不行,那就需要针对你的第三方代码提出一个单独的问题。 - Robert Rouhani
显示剩余3条评论

6
我使用GameBench来分析安卓应用程序的FPS(帧率)情况(并不是游戏,我想要检查当我的应用程序开始运行动画时的FPS情况)。GameBench捕获关键帧速率(FPS)指标,这是评估用户体验流畅性的最佳客观指标。我的需求是验证当我的安卓应用程序动画开始运行时,FPS是否达到了30FPS。通过GameBench工具提供的图表报告,我已经验证了以下内容:当动画开始时,FPS从0 FPS上升到了30FPS;当动画结束时,FPS从30 FPS下降为0 FPS。请参见屏幕截图。

enter image description here

要使用此工具,您需要安装一个Android应用程序和桌面启动器。
  1. 在您的Android设备上安装GameBench应用程序。
  2. 使用电子邮件地址注册GameBench并安装桌面应用程序。
  3. 下载并安装GameBench桌面启动器。
  4. 将设备与桌面连接。您可能会在设备上收到一个弹出窗口,询问您是否允许USB调试。
  5. 在GameBench Android应用程序中,您可以选择应用程序进行分析(我已经在平板电脑上安装了该应用程序)。
  6. 然后,您可以记录每秒帧数并生成报告(在Web仪表板中也可用,包括FPS、屏幕截图、性能、电池等)。

参考:

  1. https://play.google.com/store/apps/details?id=com.gamebench.metricscollector
  2. https://www.gamebench.net/
  3. https://docs.gamebench.net/web-dashboard/getting-started
作为一个旁注,我也使用了FPS Meter app,但在我的情况下似乎不准确。当我的Android应用程序开始动画时,得到了29FPS到31FPS。预期的FPS是30FPS。

https://play.google.com/store/apps/details?id=com.ftpie.fpsmeter&hl=en


3
在Play商店中有应用程序可以测量游戏过程的FPS。请查看GameBench。它可以在游戏进行时测量任何游戏的性能,您可以将FPS下降与屏幕上渲染的内容相关联。

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