Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to measure true FPS performance of OpenGL ES?

I realized that these are two different things:

Drawing, and getting it on screen.

So while you may draw in every single call from CADisplayLink at a rate of 60 FPS, if your drawing operations take slightly longer than 1/60 seconds you end up with 30 FPS in theory, because you're missing out every other chance to get through the render pipeline.

OK; Knowing this, it seems nonsense to remember the start NSTimeInterval and incrementing a frame counter in the run loop, then checking at the end if a second has passed and calculate the FPS for the last passed second.

I want a way to actually get the true FPS value from OpenGL ES on screen. I looked into instruments in Xcode 3.2.6 but couldn't find one for this. But I remember there was a way to get that FPS value. The real one.

How?

like image 457
openfrog Avatar asked Jul 05 '11 17:07

openfrog


1 Answers

Measuring OpenGL ES performance by framerate may not be the best approach. I've taken to recording frame time myself, which seems to provide a more accurate assessment of my overall rendering performance. It's trivial to encapsulate your rendering in something like

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);

to obtain rendering time. If you want it, your instantaneous framerate is the inverse of frameDuration in the above code.

Be careful to time the entire frame rendering, because the tile-based deferred renderer in iOS and other mobile devices may hide the true cost of particular rendering operations by delaying them until just before the frame is drawn to the screen.

However, if you want to obtain a less precise framerate from Instruments, you can do that using the OpenGL ES Driver instrument, which reports Core Animation Frames Per Second as one of its logged statistics:

OpenGL ES Driver instrument

like image 155
Brad Larson Avatar answered Sep 20 '22 22:09

Brad Larson