我意识到这些是两件不同的事情:
绘图,并将其显示在屏幕上。
因此,虽然您可以以60 FPS的速度从CADisplayLink中进行每次调用,但如果您的绘图操作花费的时间略长于1/60秒,理论上最终会有30 FPS,因为您错过了其他所有有机会通过渲染管道。
行;知道这一点,记住启动NSTimeInterval并在运行循环中递增一个帧计数器,然后在结束时检查是否已经过了一秒并计算最后一次传递的秒的FPS似乎是无稽之谈。
我想要一种在屏幕上实际从OpenGL ES获取真实FPS值的方法。我查看了Xcode 3.2.6中的乐器,但找不到一个。但我记得有一种方法可以获得FPS值。真实的。
如何?
答案 0 :(得分:13)
按帧速率may not be the best approach测量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);
获取渲染时间。如果您需要,您的瞬时帧速率与上述代码中的frameDuration
相反。
请注意整个帧渲染的时间,因为iOS和其他移动设备中基于图块的延迟渲染器可能会通过将它们延迟到帧被绘制到屏幕之前隐藏特定渲染操作的真实成本。
但是,如果您想从Instruments获得不太精确的帧速率,您可以使用OpenGL ES Driver工具执行此操作,该工具将每秒核心动画帧报告为其记录的统计信息之一: