我想获取Android设备的VRAM大小。
是否有一种从程序中获取的方法?
我想获取Android设备的VRAM大小。
是否有一种从程序中获取的方法?
让我们使用Nexus One进行一些计算:
屏幕分辨率为480x800。所以最小要求的视频内存大小为:
400 * 800 * 4字节 = 1536000字节
假设驱动程序可以(并且通常应该)使用多个缓冲区,我们还应该期望像这样的值:
1536000 * 2字节 = 3072000字节
1536000 * 3字节 = 4608000字节
等等...
如果出现不是1536000(或一般情况下的W x H x 4)的倍数,那就很奇怪了。
在对Android内部进行一些搜索后,我找到了这份文档:
...Android对驱动程序有两个要求:一个可映射的线性地址空间,可以直接写入...通过调用/dev/fb0上的open访问驱动程序...
所以我尝试获取/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字节,用时2.712秒)
视频内存约为4mb(Nexus One)。让我们检查一下这是否是Nexus屏幕大小的倍数:
4608000/1536000 = 3
看起来这是正确的值。我们还可以说驱动程序使用三个屏幕缓冲区。
Android/OpenGL API没有提供明确的方法从给定设备中读取VRAM大小。
简单方法:
您可以尝试以经验方式推断VRAM大小,添加1MB纹理直到您从gl.glGetError()
收到内存不足错误为止。
从您的"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
我猜android.os.StatFs可能是你要找的:
http://developer.android.com/reference/android/os/StatFs.html