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

ope*_*rog 5 iphone opengl-es objective-c ios

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

绘图,并在屏幕上显示.

因此,虽然您可以以60 FPS的速率从CADisplayLink中获取每次调用,但如果您的绘图操作时间略长于1/60秒,理论上最终会有30 FPS,因为您错过了其他所有获得机会的机会通过渲染管道.

好; 知道了这一点,记住启动NSTimeInterval并在运行循环中递增一个帧计数器,然后在结束时检查是否已经过了一秒并计算最后一次传递的秒的FPS似乎是无稽之谈.

我想要一种方法来实际从屏幕上的OpenGL ES获取真正的FPS值.我查看了Xcode 3.2.6中的乐器,但找不到一个.但我记得有一种方法可以获得FPS值.真实的.

怎么样?

Bra*_*son 13

以帧速率测量OpenGL ES性能可能不是最好的方法.我自己开始记录帧时间,这似乎可以更准确地评估我的整体渲染性能.将渲染封装在类似的东西中是微不足道的

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);
Run Code Online (Sandbox Code Playgroud)

获得渲染时间.如果需要,您的瞬时帧速率frameDuration与上述代码相反.

请注意整个帧渲染的时间,因为iOS和其他移动设备中基于图块的延迟渲染器可能会通过将它们延迟到帧被绘制到屏幕之前隐藏特定渲染操作的真实成本.

但是,如果要从Instruments获得不太精确的帧速率,可以使用OpenGL ES Driver仪器执行此操作,该仪器将每秒核心动画帧报告为其记录的统计信息之一:

OpenGL ES驱动程序仪器