天天看點

如何評估移動GPU性能:以及4個需要了解的Android GPU 本地性能測試工具

衆所周知,Android終端基本都配有GPU;無論手機還是VR,AR裝置,GPU在其中扮演了越來越重要的地位。

當我們拿到一款GPU時,我們最關心的就是性能了。

不服跑個分。跑分是目前最常見的測試性能的方式。

1)我們最熟悉的GPU benchmark測試就是曼哈頓3.0\3.1測試了;

2)安兔兔的3D測試也是一個不錯的例子,但是注意應用版本,不同版本總分是不同的。

可以說這個方法基本還是可靠的,但是缺點也是存在的:

1)GPU Benchmark的測試會盡量排除CPU帶來的影響,但實際遊戲中很可能并非如此,是以跑分與實際的運作環境表現迥異。另外與桌上型電腦不同,桌上型電腦中顯示卡遊戲測試比較成熟,3A大作中耗CPU的,耗GPU的,耗RAM的都能找到一堆。但Android生态上就很難找到類似場景;(這個問題不在這篇文章讨論,會在後續文章中介紹)

2)在了解了具體參數之後,我們希望在本地能驗證一下GPU具體的性能。可惜曼哈頓雖好,但是要翻牆,對于我們本地測試就非常麻煩。安兔兔負載不均衡,可能并不适合單一場景下的幀率和功耗測試;最重要的,如果GPU能力不強,比如高通8909平台,則安兔兔則可能僅有2,3幀的樣子,根本無法有效測試正常場景下的表現。

基于上面的考慮,我們接下來介紹4個簡單的Android GPU本地性能測試工具。

1. GPU渲染評估初期本地測試:Flatland**

在最初標明裝置時(例如使用不成熟的驅動程式時),使用預定義(固定)的時鐘和工作負載來測量每秒渲染的幀數 (fps)。這可以讓我們清楚地了解硬體功能。

為了在規格設計階段便于推究裝置性能,可使用Flatland 工具。Flatland 依靠固定時鐘,并顯示可通過基于合成的工作負載實作的吞吐量。Flatland 使用 gralloc 緩沖區來模拟多視窗情景,用 GL 填充視窗,然後測量合成情況。

8909 vs 18xx測試結果分析:(提高GPU頻率結果相當,因為GPU大部分情況是在高頻跑的),可見8909僅适用于720P大小 ,而18xx可最大适用于1080P大小(盡管在SurfaceView->Home仍可能會有一點逾時)。測試階段為渲染,和合成無關,對于1881甚至必須關屏測試。

https://source.android.com/devices/graphics/implement

2. GPU合成評估本地測試:SurfaceComposition

繪制完成之後,我們也要考慮合成的情況,盡管我們一般采用HWC合成,但是GPU合成在某些場景下仍然是不可避免的。(但這一步的重要性低于flatten)

路徑:android/frameworks/base/tests/SurfaceComposition

功能:測試保證在58fps以内的最大合成Surface的數量(格式可選)。

指令:手動打開應用測試或者使用cts測試方式

am instrument -w -r android.surfacecomposition/android.test.InstrumentationTestRunner

結果:

INSTRUMENTATION_STATUS: surface-allocation-performance-median-sps=112.55279399895551

INSTRUMENTATION_STATUS: surface-compoistion-bandwidth-gbps=0.9486905799147451

INSTRUMENTATION_STATUS: surface-compoistion-peformance-sps=4.7642438127286955

這次是測試通過的結果,代表可支援4.76層RGBA的合成(58fps以上),帶寬0.94Gb/s

評估階段結束,我們進入開發階段。

3. OpenGLES 本地測試:fillrate、angeles、gl2_basic gl2_yuv

  1. fillrate

    比較簡單,就是循環繪制draw的指令,疊代多次分别繪制1次,2次…32次的吞吐量,可測試GPU是否帶起成功。

  2. gl2_basic

    非常簡單,就是循環繪制一個三角形,60fps, Malit82x大約156M下46%的GPU使用率。因為負載比較均衡,是以可用于測試GPU功耗問題。

  3. angeles

    以50fps的幀率,malit82x下624M下81-90%的使用率。

    負載不均衡,可在一定程度上進行壓力測試,但沒有deqp中壓力測試效果好,是以其可以實作624M下GPU使用率99%-100%

  4. gl2_yuv

    另外一個常用case,可用于測試YUV資料顯示于螢幕之上,NV12各種格式測試,這個場景應用非常多,我将在另外一篇文章中單獨介紹。

4. GPU API測試工具(同時支援壓力測試):DEQP

如果我們是OEM廠商,則我們同時還要關注GPU的相容性與穩定性。這就需要Deqp子產品了。(CTS也會測試相應API)

Deqp支援LINUX,WINDOW,ANDROID等平台,該文檔僅介紹Android平台,具體可見下面連結:https://source.android.com/devices/graphics/testing

編譯

目錄:external/deqp

編譯:mma –j12

環境準備:

安裝APK:

adb –d install –r com.drawelements.deqp.apk

運作測試

  1. 準備:

    adb –d forward tcp:50016 tcp:50016

    adb –d shell am start –n com.drawelements.deqp/.execserver.ServiceStarter

  2. 執行測試:

    1)測試全部GLES2的API

    am start -n com.drawelements.deqp/android.app.NativeActivity -e cmdLine “deqp --deqp-case=dEQP-GLES2.* --deqp-log-filename=/sdcard/dEQP-Log.qpa --deqp-crashhandler=enable --deqp-watchdog=enable --deqp-gl-config-name=rgba8888d24s8”

    2)壓力測試:–deqp-test-iteration-count可以修改,GPU使用率可達99-100%

    am start -n com.drawelements.deqp/android.app.NativeActivity -e cmdLine “deqp --deqp-case=dEQP-GLES2.stress.long.* --deqp-log-filename=/sdcard/dEQP-stress.qpa --deqp-watchdog=disable --deqp-gl-config-name=rgba8888d24s8 --deqp-test-iteration-count=500”

    3)旋轉螢幕測試

    增加 --deqp-screen-rotation=90

結果分析

目前結果是文本文檔,轉換成csv或html格式需要編譯linux或window版本。但仍然還可以分析一下結果。

• 通過可包括 Pass、NotSupported、QualityWarning 和 CompatibilityWarning。

• 失敗可包括 Fail、ResourceError、Crash、Timeout 和 InternalError。

綜上,如果你是OEM廠商,這些工具都會對你有幫助。如果你是終端廠商且GPU能力較強,則隻有第3個工具對你有用,畢竟其他你也不用關心,如果GPU能力差些,則1, 2,3都會對你有所幫助。