2010-07-01 36 views
12

Tôi muốn có được kích thước thiết bị Android VRAM.Cách đo mức tiêu thụ VRAM trên Android?

Có phương pháp nào để mua lại chương trình không?

+0

Tôi cũng muốn biết điều này. Nếu không có cách nào để truy vấn nó từ thiết bị, danh sách số lượng RAM video trên các thiết bị thông thường cũng sẽ hoạt động. – Thomas

+0

Để rõ ràng, tôi có nghĩa là số lượng RAM có sẵn cho kết cấu OpenGL, bộ đệm, v.v. Có lẽ đây không phải là "RAM video", mỗi lần, nhưng "bộ nhớ máy chủ OpenGL"? – Thomas

Trả lời

15

Hãy làm một số tính toán sử dụng Nexus One:

độ phân giải màn hình là 480x800. Vì vậy, tối thiểu theo yêu cầu kích thước bộ nhớ video sẽ là:
400 * 800 * 4 bytes = 1536000 bytes

Giả sử điều khiển mà có thể (và nên bình thường) sử dụng một số bộ đệm, chúng ta cũng nên hy vọng giá trị như:

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

Thật lạ khi có các giá trị không phải là bội số của 1536000 (hoặc W x H x 4 nói chung).


Sau khi một số tìm kiếm trên internals Android tôi đã tìm thấy này documentation:

... Android làm cho hai yêu cầu của trình điều khiển: một không gian địa chỉ tuyến tính của bộ nhớ trí trên bản đồ mà nó có thể viết trực tiếp ... truy cập vào trình điều khiển bằng cách gọi mở trên/dev/fb0 ...

Vì vậy, tôi đã cố gắng và chịu kích thước của tập tin /dev/graphics/fb0 (trên điện thoại của tôi không có /dev/fb0).

Tuy nhiên, một cách tiếp cận trực tiếp không hoạt động:

File file = new File("/dev/graphics/fb0"); 
file.length(); // ==0, doesn't work, no read access 

Sử dụng lừa tiếp theo bạn có thể nhận được kích thước thực tế của fb0:
>adb pull /dev/graphics/fb0
1659 KB/s (4608000 bytes in 2.712s)

bộ nhớ video là ~ 4MB (Nexus One) . Hãy kiểm tra xem đây là bội số của kích thước màn hình Nexus:

4608000/1536000 = 3

Nó trông giống như một giá trị đúng. Và chúng tôi cũng có thể nói rằng trình điều khiển sử dụng ba bộ đệm màn hình.


Vì vậy, kết luận là bạn có thể phát hiện kích thước bộ nhớ video bằng adb, nhưng bạn không thể sử dụng phương pháp này từ ứng dụng Android trong thời gian chạy do giới hạn truy cập tệp.

+0

Điều tra tốt, cảm ơn, nhưng không phải những gì tôi đang tìm kiếm. Có lẽ tôi chưa hoàn toàn rõ ràng. Những gì tôi muốn biết là kích thước của bộ nhớ máy chủ OpenGL, trong đó chúng tôi lưu trữ kết cấu, bộ đệm đỉnh, vv Dù sao, nếu câu hỏi đó không được trả lời, tiền thưởng là của bạn. – Thomas

4

API Android/OpenGL không cung cấp các phương pháp rõ ràng để đọc kích thước VRAM từ một thiết bị cụ thể.

Poor giải pháp man:
Bạn có thể thử để suy ra kích thước VRAM một cách theo kinh nghiệm thêm texture 1MB cho đến khi bạn nhận được một trong số lỗi bộ nhớ từ gl.glGetError().

5

Bạn thường không có "VRAM" chuyên dụng trên thiết bị di động. Ít nhất bạn không có nó với kiến ​​trúc PowerVR (hoàn toàn thống trị thị trường với lõi MBX và SGX của họ).

Đó là, trình điều khiển OpenGL phân bổ RAM bình thường cho đến khi bạn hết bộ nhớ RAM và bạn càng phân bổ ít số tiền bạn còn lại cho ứng dụng của mình.

2

Từ "dmesg" đầu ra của bạn u có thể đọc ra khỏi VRAM, vì vậy cho Tablet của tôi:

> [ 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 

hoặc chi tiết tại địa chỉ:

http://pastebin.com/jQSXQqHh

0

là đơn giản chỉ cần đếm có bao nhiêu Mb ram từ dung lượng thực của ramovo a369i có 512 RAM Module, nhưng trong cài đặt ứng dụng chỉ hiển thị 471 Mb có thể sử dụng nên 41Mb còn lại dành riêng cho GPU, vì vậy kết luận là a369i của tôi có 41Mb vram

Phương pháp này dựa trên bộ nhớ đồ họa dùng chung (wiki)

Các vấn đề liên quan