如何衡量OpenGL ES的真正的FPS性能?

我意识到这是两件不同的事情:

绘图,并在屏幕上获取它。

因此,虽然您可以以每秒60次的速度从CADisplayLink中抽取一次,但如果您的绘图操作时间略长于1/60秒,理论上最终会达到30 FPS,因为您错过了其他所有机会通过渲染pipe道。

好; 知道这一点,记住NSTimeInterval开始并在运行循环中增加一个帧计数器,然后检查是否有第二个已经通过,并计算最后一秒通过的FPS,这似乎是无稽之谈。

我想要一种方法在屏幕上真正从OpenGL ES获得真正的FPS值。 我查看了Xcode 3.2.6中的工具,但找不到一个。 但是我记得有一种方法可以获得FPS的价值。 真正的

怎么样?

根据帧率测量OpenGL ES性能可能不是最好的方法 。 我已经采取自己的logging帧时间,这似乎提供了一个更准确的评估我的整体渲染性能。 把你的渲染封装成类似的东西是微不足道的

CFTimeInterval previousTimestamp = CFAbsoluteTimeGetCurrent(); // Do your OpenGL ES frame rendering here, as well as presenting the onscreen render buffer CFTimeInterval frameDuration = CFAbsoluteTimeGetCurrent() - previousTimestamp; NSLog(@"Frame duration: %f ms", frameDuration * 1000.0); 

获取渲染时间。 如果你想要的话,你的瞬时帧率是上面代码中frameDuration的倒数。

要小心整个帧渲染的时间,因为在iOS和其他移动设备中,基于区块的延迟渲染器可能会通过延迟特定渲染操作的实际成本,直到帧被绘制到屏幕之前为止。

但是,如果您想从Instruments获得不太精确的帧速率,可以使用OpenGL ES Driver工具来实现,该工具报告每秒的“Core Animation Frames”(核心animation帧数)作为其logging的统计数据之一:

OpenGL ES驱动程序工具