Подтвердить что ты не робот

Как измерить потребление VRAM на Android?

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

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

4b9b3361

Ответ 1

Сделайте некоторые вычисления, используя 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/fb 0...

Итак, я попробовал и взял размер файла /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 в режиме исполнения из-за ограничений доступа к файлам.

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Из вашего вывода "dmesg" u может считывать 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

Ответ 5

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

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