2010-07-01 76 views
12

我想要獲取Android設備VRAM大小。如何測量Android上的VRAM消耗?

有從程序中獲取的方法嗎?

+0

我想知道這一點。如果無法從設備查詢,則通用設備上的視頻RAM數量列表也可以實現。 – Thomas 2011-01-22 11:02:27

+0

要說清楚,我的意思是可用於OpenGL紋理,緩衝區等的RAM數量。也許這不是「視頻RAM」本身,而是「OpenGL服務器內存」? – Thomas 2011-01-26 15:07:59

回答

15

讓我們做用Nexus One的一些計算:

屏幕分辨率480x800的是。所以最低要求的顯存大小爲:
400 * 800 * 4 bytes = 1536000 bytes

假設駕駛員可以(而且通常應該)使用幾個緩衝區,我們也應該期望像值:

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

如果值不是1536000的倍數(或一般的W x H x 4),那將會很奇怪。


在Android內部某些搜索後,我發現這個documentation

... 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)

視頻內存爲4MB〜(歌Nexus One) 。讓我們來看看,如果這是多的Nexus屏幕尺寸:

4608000/1536000 = 3

它看起來像一個正確的價值。而且我們也可以說驅動使用三個屏幕緩衝區。


所以,作爲一個結論,你可以使用亞行檢測顯存大小,但不能在適當的文件訪問限制運行時使用這種方法從你的Android應用程序。

+0

很好的調查,謝謝,但不是我在找什麼。可能我沒有完全清楚。我想知道的是OpenGL服務器內存的大小,我們在其中存儲紋理,頂點緩衝區等。無論如何,如果這個問題沒有得到答案,賞金是你的。 – Thomas 2011-01-26 15:07:07

4

Android/OpenGL API不提供從給定設備讀取VRAM大小的明確方法。

可憐的人解決
您可以嘗試推斷的VRAM大小經驗性的方法添加1MB的質感,直到你從gl.glGetError()得到一個內存不足的錯誤。

5

您通常在移動設備上沒有專用的「VRAM」。至少你沒有使用PowerVR架構(通過MBX和SGX內核完全支配市場)。

也就是說,OpenGL驅動程序分配正常的內存,直到用完爲止,分配得越多,爲應用程序留下的內存就越少。

2

從你的 「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

0

是簡單算了算多少MB RAM從可用到實際容量的內存,我的聯想a369i的例子有512內存模塊,但在設置應用程序只顯示471 Mb可用,所以剩下的41Mb留給GPU,所以結論是我的a369i有41Mb vram

此方法基於共享圖形內存(wiki)