Как измерить потребление VRAM на Android? - PullRequest
12 голосов
/ 01 июля 2010

Я хочу получить размер устройства Android VRAM.

Есть ли способ получения из программы?

Ответы [ 6 ]

15 голосов
/ 26 января 2011

Давайте сделаем некоторые вычисления, используя Nexus One:

Разрешение экрана 480x800.Поэтому минимальный требуемый размер видеопамяти будет:
400 * 800 * 4 bytes = 1536000 bytes

Предполагая, что драйвер может (и обычно должен) использовать несколько буферов, мы также должны ожидать значения, такие как:

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

Было бы странно иметь значения, не кратные 1536000 (или Ш х В х 4 в целом).


После некоторых поисков по внутренним компонентам Android я нашел эту документацию :

... Android предъявляет два требования к драйверу: линейное адресное пространство отображаемой памяти, которое он можетнаписать напрямую ... доступ к драйверу с помощью вызова open на /dev/fb0...

Поэтому я попытался взять файл размером /dev/graphics/fb0 (на моем устройстве нет /dev/fb0).

Но прямой подход не работает:

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

Используя следующий трюк, вы можете получить фактический размер fb0:
>adb pull /dev/graphics/fb0
1659 KB/s (4608000 bytes in 2.712s)

Видеопамять составляет ~ 4 Мб (Nexus One).Давайте проверим, кратно ли это размеру экрана Nexus:

4608000/1536000 = 3

Это выглядит как правильное значение.И мы также можем сказать, что драйвер использует три экранных буферов.


Итак, в заключение вы можете определить размер видеопамяти с помощью adb, но вы не можете использовать этот подходиз приложения Android во время выполнения из-за ограничений доступа к файлу.

5 голосов
/ 28 января 2011

У вас обычно нет выделенного «VRAM» на мобильных устройствах. По крайней мере, у вас его нет с архитектурами PowerVR (которые полностью доминируют на рынке с ядрами MBX и SGX).

То есть драйвер OpenGL выделяет обычную оперативную память до тех пор, пока вы не исчерпаете ее, и чем больше вы выделяете, тем меньше у вас остается для приложения.

4 голосов
/ 27 января 2011

API Android / OpenGL не предлагают явных методов для считывания размера VRAM с данного устройства.

Плохое решение для человека :
Вы можете попытаться эмпирическим путем определить размер VRAM, добавив текстуру размером 1 МБ, пока не получите ошибку нехватки памяти от gl.glGetError().

2 голосов
/ 02 июня 2012

Из вашего вывода "dmesg" вы можете прочитать VRAM, поэтому для моего планшета:

> [    0.000000] Machine: TDM3730 [    0.000000] Reserving 12582912
> bytes SDRAM for VRAM
> 
> 7>[    3.929962] VRAM: checking region 9f400000 3072                  
> <4>[    3.929992] Failed. Allocating 4194304 bytes for fb 0           
> <7>[    3.935333] VRAM: alloc mem type 0 size 4194304 paddr dec2bd4c  
> <7>[    3.935485] VRAM: checking region 9f400000 3072                 
> <7>[    3.935485] VRAM: found 9f400000, end a0000000                  
> <6>[    3.936584] android_usb gadget: high speed config #1: android   
> <4>[    3.960113] allocating 4194304 bytes for fb 1

или подробности по адресу:

http://pastebin.com/jQSXQqHh

0 голосов
/ 01 января 2016

Просто посчитайте, сколько МБ оперативной памяти, что от полезной до реальной емкости оперативной памяти, например, для моего lenovo a369i имеет 512 модулей ОЗУ, но при настройке приложения отображается только 471 МБ, поэтому оставшиеся 41 МБ зарезервированы для графического процессора, поэтому вывод мой a369i имеет 41Mb vram

Этот метод основан на разделяемой графической памяти (вики)

0 голосов
/ 01 июля 2010

Я подозреваю, что android.os.StatFs - это то, что вы ищете:

http://developer.android.com/reference/android/os/StatFs.html

...