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