Android frame rate metrics and bottlenecks

edited October 2014 in General discussions
If anyone is interested in some real world metrics and some articles discussing bottlenecks in Android apps, I listed it all out here.

I have three builds of my app, set up in different ways and measured. One of builds has a completely transparent alpha object overlaid on the entire game area. This is to simulate a blank title screen not being destroyed after use.

Tests were performed on an earlier Xoom 1.

The results are:

a) Release build with an alpha object overlay: 25 frames per second consistent.
b) Debug build without alpha object overlay: 33 - 34 frames per second consistent.
c) Release build without alpha object overlay: 35 - 36 frames per second consistent.

What is interesting from the results is that alpha transparency matters, it makes a huge impact on the GPU. Minimise use where possible, destroy empty objects that have been faded away with orxObject_AddFX if they are no longer used.

Also of interest was the 1-2 frames per second between debug and release builds. A reminder to ensure you select the right library before releasing.

25 frames per second is visually jarring. 30 and above should be the target.

Achieving 36 frames per second was visually pleasing and the game plays nicely. The difference between 25 and 36 is huge.

Some excellent articles are available here:
http://androidworks-kea.blogspot.com.au/2012/05/developers-notes-about-opengl-es.html
http://www.polygon.com/2014/6/5/5761780/frame-rate-resolution-graphics-primer-ps4-xbox-one

Comments

  • edited October 2014
    Thanks for the infos...

    Indeed blending is the biggest performance issue on mobile GPU, this is mainly due to the memory bandwidth.
    Since blended pixel need first to read the current pixel color in the framebuffer.

    With a 2D engine, you can't completly avoid blending (except if you works only with rectangle sprites), but with Orx you can easily split your Object in 9 sub-Object (or less, depending on the sprite layout).

    Only use BlendMode = alpha for the borders of your sprites where transparency is required, and BandMode = none for the center.

    For small sprites size (size is the rendered pixels on screen, not the resolution of the sprite itself), it's not really needed, but for UI Panels and Menu it can give a small perf boost.

    That being said, on nowadays devices the blending impact on performances is not like it used to be with 2010-2012 devices. Still it's always good to keep blending at minimum.

    Philippe
Sign In or Register to comment.