我们有一个基于 Apple 的GLCameraRipple示例的应用程序,它对来自 iOS 设备摄像头的视频进行实时图像处理。
Apple 的 Instruments 报告称 OpenGL 的运行速度约为 30-40fps(即每 25-30 毫秒一帧)。假设视频以 ~30fps 的速度被捕获和处理,这是有道理的。
但是,如果我们使用 mach_absolute_time 测量调用 glkView:drawInRect 之间的时间,则循环时间为 50 毫秒(约 20 fps)。该速率几乎是 Instruments 报告的一半。
那么 Apple 的 Instruments 是错误的(几乎 100%(!)) - 还是对 glkView:drawInRect 的计时调用错误?
似乎 Apple 的 Instruments 不准确,因为不是在每个绘制周期都调用 glkView:drawInRect 吗?
我们发现其他人也注意到了同样的差异,但对于哪个实际上是正确的没有明确的答案。
为什么会出现差异?如果 Apple 的仪器有误 - 测量到 glkView:drawInRect 的往返时间是确定 FPS 的正确方法吗?