2010-07-01 8 views
12

Я хочу приобрести размер устройства VRAM для Android.Как измерить потребление VRAM на Android?

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

+0

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

+0

Чтобы быть ясным, я имею в виду объем оперативной памяти, доступный для текстур, буферов OpenGL и т. Д. Может быть, это не «видео RAM», по сути, но «память сервера OpenGL»? – Thomas

ответ

15

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

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

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

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

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


После некоторых поисков на Android внутренностей Нашли documentation:

... Android делает два требования водителя: линейное адресное пространство назначаемых памятей, что может писать напрямую ... доступ к водителю по телефону открыть на/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)

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

4608000/1536000 = 3

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


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

+0

Хорошее исследование, спасибо, но не то, что я искал. Наверное, я не был совершенно ясен. Я хочу знать размер памяти сервера OpenGL, в которой мы храним текстуры, буферы вершин и т. Д. В любом случае, если на этот вопрос не назовут ответа, щедрость будет вашей. – Thomas

4

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

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

5

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

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

2

С вашей "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

Прост просто посчитать, сколько Mb RAM что от полезной до реальной емкости бара, пример для моего lenovo a369i имеет 512 RAM Module, но в настройке приложения отображается только 471 Мб, поэтому для 416 бит зарезервировано для GPU, поэтому вывод у моего a369i есть 41Mb vram

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

Смежные вопросы