How to measure VRAM consumption on Android?

salyutan picture salyutan · Jul 1, 2010 · Viewed 14.9k times · Source

I want to acquire Android Device VRAM size.

Is there a method for acquisition from the program?

Answer

inazaruk picture inazaruk · Jan 26, 2011

Let's do some calculation using Nexus One:

Screen resolution is 480x800. So minimum required video memory size would be:
400 * 800 * 4 bytes = 1536000 bytes

Assuming that driver may (and normally should) use several buffers, we should also expect values like:

1536000 * 2 bytes = 3072000 bytes
1536000 * 3 bytes = 4608000 bytes
etc...

It would be weird to have values that are not multiple of 1536000 (or W x H x 4 in general).


After some searches on Android internals I've found this documentation :

...Android makes two requirements of the driver: a linear address space of mappable memory that it can write to directly...accessing the driver by calling open on /dev/fb0...

So I tried and take size of /dev/graphics/fb0 file (on my device there is no /dev/fb0).

But a direct approach doesn't work:

 File file = new File("/dev/graphics/fb0");
 file.length(); // ==0, doesn't work, no read access

Using next trick you can get actual size of fb0:
>adb pull /dev/graphics/fb0
1659 KB/s (4608000 bytes in 2.712s)

Video memory is ~4mb (Nexus One). Let's check if this is multiple of Nexus screen size:

4608000/1536000 = 3

It looks like a right value. And we also can say that driver uses three screen buffers.


So, as a conclusion, you can detect video memory size using adb, but you can't use this approach from your android application in runtime due to file access restrictions.