现在的位置: 首页 > 综合 > 正文

计算帧速率

2013年08月31日 ⁄ 综合 ⁄ 共 1119字 ⁄ 字号 评论关闭

 

作者:StrongCoding

 

邮箱:StrongCoding@qq.com DX群:130302441

 

若文中有误,请告知.十分感谢.一起加油.

 

 

 

在测试软件中,我们经常需要查看程序的渲染速度是否合理,所以,我们就有必要记录一下程序在大于等于1秒的持续调用某函数的情况       下,需要记录下该函数到底被调用了多少次,以此来反馈帧速率。为了实现这个目的,我们需要这样子做:

 

实现思路:

 

1、首先记录下程序在一开始进入While循环的时候,并且没有响应任何事件的时候,需要保存一下当前的时间值A。然后当程序              再次执行到该处时又得到了一个当前程序的运行时B。因此B-A,就是程序再次路过没有响应事件的时间调用差值C

 

                2、再一个我们需要一个函数来专门的统计帧速率,在准备这个函数之前呢,我们需要有两个重要的计数器:

     (1)计算时间差的计数器 static float AllTimes

     (2)计算总帧速率的计数器         static int FrameCounts

 

     这是计算帧速率最关键的两个变量. OK,由于C会不停的传入到帧速率函数中,且时间差AllTimes+=C, FrameCounts++

 

     解释:

 

有的人认为,当程序走到统计帧速率函数的时候,意味着就可以计算帧速率了,其实不然,因为当今的CPU运行速度   太快了,这个函数在一秒内会被调用数不清的次数,至少我是数不过来呵呵. 还有就是由于该帧速率函数在1秒内会被不停           调用N次,所以传入的值绝对不会超过1秒,除非你的机子已经烂的不行了。所以,我们需要统计出,在一秒内,我们的程                           序到底调用了多少次,所以就有了我们的FrameCounts++;而后,我们需要累加这些短的不能再短的时间,直到攒的这                           些碎时间达到一秒或者稍微超过点,这时候,我们才能在一秒内,平均统计下该函数的调用速率:

 

我们用float FPS保存: FPS = (float)(FrameCounts / AllTimes); 这样我们就得到了我们想要的帧速率。

 

再一个,就是计算出来后,我们总不能调试查看吧,所以,我们需要把它打印到屏幕上,怎么实现字体这块就不说                                了,因为FPS是一个float型的,我们不能直接打印,需要将其转换成字符串形式,好吧那就定义成char数组吧:

 

char Fps[9];

 

利用C语言格式化一下:sprintf( Fps, "%f", FPS );

Fps[8] = "/0";

 

OK,转换完成,这时候你就可以直接打印到屏幕了。

 

最后一个你需要收尾:将两个计数器归0。

 

 

下效果吧,呵呵.

抱歉!评论已关闭.