Android如何以编程方式测量View或Application的FPS

时间:2016-03-30 15:23:50

标签: java android performance frame-rate

我想测量使用TextureView的某个Android视图的FPS(刷新率)。为此,我需要一些方法来以编程方式测量FPS(例如,不使用ADB.exe而不使用第三方应用程序或工具)。

我见过this question,但它没有回答记录帧时间的位置。

Android中是否有API可以在屏幕刷新或组合时获取事件?使用它,测量帧时间并因此计算FPS将相对简单。

CPU使用率相同的问题。任何或所有衡量绩效的API都会受到赞赏!

2 个答案:

答案 0 :(得分:2)

好吧,看起来TinyDancer可以做你想做的事情:

 //you can add a callback to get frame times and the calculated
 //number of dropped frames within that window
 TinyDancer.create()
     .addFrameDataCallback(new FrameDataCallback() {
        @Override
        public void doFrame(long previousFrameNS, long currentFrameNS, int droppedFrames) {
           //collect your stats here
        }
      })
      .show(this);
}

如果您需要了解CPU使用率,可以始终使用top。像这样的Smth:

root@android:/data # top -n 1 -s cpu

User 28%, System 29%, IOW 0%, IRQ 0%
User 189 + Nice 162 + Sys 355 + Idle 509 + IOW 0 + IRQ 0 + SIRQ 2 = 1217

  PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
31096  0  20% S    20 463368K  78884K  fg u0_i77   com.android.chrome:sandboxed_process0
29042  1  11% S    54 451036K  84876K  fg u0_a10   com.android.chrome
  130  2   9% S    25  79228K  37136K  fg system   /system/bin/surfaceflinger
...
...
...

从Android应用is not difficult调用系统命令。

答案 1 :(得分:0)

SystemClock.elapsedRealtime 是衡量 FPS 的关键。方法很简单:long YOUR_VARIABLE = SystemClock.elapsedRealtime / 1000.0

代码计算已显示在屏幕上的帧数。 elapsedRealtime 以毫秒为单位计算。以毫秒为单位的一秒是 1000 毫秒。