如何在安卓设备上测量VRAM使用量?

14

我想获取Android设备的VRAM大小。

是否有一种从程序中获取的方法?


我也想知道这个。如果无法从设备中查询,那么列出常见设备上视频RAM的数量也可以。 - Thomas
要明确一点,我指的是OpenGL纹理、缓冲等可用的RAM数量。也许这不是“视频RAM”,而是“OpenGL服务器内存”? - Thomas
6个回答

17

让我们使用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 看起来这是正确的值。我们还可以说驱动程序使用三个屏幕缓冲区。
因此,总的来说,您可以使用adb检测视频内存大小,但由于文件访问限制,您无法在运行时从Android应用程序中使用此方法。

非常感谢你的调查,但不是我想要的。可能我表达得不够清楚。我想知道的是OpenGL服务器内存的大小,即我们存储纹理、顶点缓冲等数据的内存大小。无论如何,如果这个问题没有得到回答,奖金就归你了。 - Thomas

6
你在移动设备上通常没有专门的“VRAM”。至少在PowerVR架构中没有(他们的MBX和SGX核心完全支配着市场)。
也就是说,OpenGL驱动程序会分配普通的RAM,直到你用完为止,你分配的越多,剩下的就越少,供应给你的应用程序。

4

Android/OpenGL API没有提供明确的方法从给定设备中读取VRAM大小。

简单方法:
您可以尝试以经验方式推断VRAM大小,添加1MB纹理直到您从gl.glGetError()收到内存不足错误为止。


3

从您的"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

1
这是一种简单的计算方法,只需统计可用内存到实际内存容量之间的Mb数,例如我的联想a369i有512 RAM模块,但在设置应用程序中只显示471 Mb可用,因此剩下的41Mb被保留给GPU,所以我的a369i有41Mb VRAM。
这种方法基于共享显存(维基百科)。

-2

我敢打赌,这个统计数据与视频内存大小关系不大。 - Yann Ramin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接