下面是个人在学习 FPS 时,求 FPS 的另一个计算方法,发出来是想验证下这个计算方法的合理性以及得到大伙的更多意见。

google说在开发者模式中开启adb shell dumpsys gfxinfo即可看到每一帧的渲染耗时,既然是每一帧,那么就可以用这些数据来计算fps.

1.使用如下命令得出帧数据的时间数组保存结果 times,每次取出的数据都是更新后的。

times = adb shell dumpsys gfxinfo com.tencent.android.qqdownloader

2.命令返回的每一行代表一帧,所以计算帧数量:

frames = len(times)

3.计算每一帧耗费的时间并生成新的数组,单位:s

frame_time = []
for i in times:
    time = i.split()
    sum_time = (float(time[0])+float(time[1])+float(time[2])+float(time[3]))/1000  # android 5.1.1中每一帧有四列数据:Draw  Prepare  Process  Execute
    frame_time.append(sum_time)

4.计算 frames 总共耗费的时间:s

seconds = 0.0
for i in frame_time:
    seconds += i

5.每隔 1s 取一次数据,fps = frames/seconds

6.另一种计算就是每 1s 取出的 frames = len(times) 其实就是这一秒的帧率,比如 1s 中取出 128 行帧,结果就是 128FPS,画面静止没有更新取出是 0 行帧就是 0FPS

上面的计算方法从结果来看觉得有些不对,大家有什么看法?


↙↙↙阅读原文可查看相关链接,并与作者交流