【騰訊優測乾貨分享】安卓專項測試之 GPU 測試探索

本文來自於Dev Club 開發者社區,非經做者贊成,請勿轉載,原文地址:http://dev.qq.com/topic/57c7f...linux

做者:章未哲——騰訊SNG質量部android

背景

咱們在安卓上進行性能測試時,若是想獲取CPU以及內存等經常使用性能指標,linux系統自身就提供了現成的方法,谷歌官方甚至公司內部也都提供了大量功能強大的分析工具。而相比之下,想要獲取GPU的相關指標則沒那麼容易,甚至咱們對GPU應該使用什麼指標衡量都幾乎一無所知。這一方面是因爲系統沒有提供相關接口與命令,另外一方面彷佛業界目前對於GPU的關注度不足,相關積累與沉澱較少,鑑於此,我的感受GPU測試這一塊也能夠做爲終端專項後面須要關注及攻克的課題。shell

經過這兩天的調研,筆者將GPU的測試方法簡單的分爲兩類:瀏覽器

  1. 安卓官方提供的工具及方法;性能優化

  2. GPU廠商提供的工具及方法。下面將具體介紹這兩類測試分析方法。微信

1、安卓官方提供的工具

google或者百度「安卓GPU測試」等關鍵詞搜索出來的結果多半屬於這一類方法。這一類方法還有一個顯著的共同點:沒有提供GPU直接關鍵指標,而是經過逐幀計算界面繪製渲染的過程及消耗時間間接呈現GPU的佔用。具體工具及使用方法以下:網絡

1. GPU View Updates

開啓方式:設置-開發者選項-顯示GPU視圖更新。主要查看view的更新以及redraw的區域大小。這個工具比較簡單,不作具體介紹。app

2. Show GPU Overdraw

開啓方式:設置-開發者選項-調試GPU過分繪製-顯示過分繪製區域。開啓後的效果以下圖:編輯器

過分繪製(overdraw)指的是某些組件在屏幕像素點上繪製次數超過一次,不一樣顏色表明含義以下:工具

  • 無色:無過分繪製,即該像素點只繪製1次

  • 藍色:1倍過分繪製,即該像素點繪製了2次

  • 綠色:2倍過分繪製,即該像素點繪製了3次

  • 淺紅:3倍過分繪製,即該像素點繪製了4次

  • 暗紅:4倍過分繪製,即該像素點繪製了5次

在開發及測試的過程當中,多倍過分繪製應該是須要特別注意並極力避免的。

3. Profile GPU Rendering

開啓方式:設置-開發者選項-GPU呈現模式分析。

裏面有兩個選項:

  1. 在屏幕上顯示條形圖;

  2. 在 adb shell dumpsys gfxinfo中。

一、選擇第一項,效果以下:

手機上出現大量GPU繪製信息,每條柱狀信息表明一幀渲染時間,柱子越長表明這一幀的渲染時間越長,不一樣顏色表明每一幀渲染各個階段所佔時長。爲確保畫面流暢,系統每秒鐘須要渲染60幀(60fps),即平均每幀渲染時間爲16ms,上圖中的綠色橫線即爲16ms「警惕線」,超過這個警惕線的柱子表明該幀渲染時間過長,可能形成界面卡頓。

柱子不一樣顏色的組成表明了每一幀渲染各階段耗時,在4.x的系統中,只分了3個階段,而在5.x系統中細分紅4個階段,而在6.0系統中更進一步細分爲了9個階段,上圖是6.0系統下呈現的效果,而在4.x系統下的呈現效果以下圖所示:

下面介紹各系統下不一樣顏色表明的含義:

4.x:

  • 藍色:表明繪製時間,即建立和更新display lists的時間

  • 紅色:表明執行時間,即系統進行2D渲染Display List的時間

  • 橙色:表明處理時間,即CPU等待GPU完成渲染處理的時間

5.x:

  • 新增紫色:表明渲染線程寫入資源所需時間

6.x:

變成9種顏色,將渲染過程當中的幾大步驟進一步細分,能夠經過Android Studio上的GPU Monitor能夠看到各顏色含義更新以下(關於GPU Monitor下一小節會具體介紹):

  1. Swap Buffers:對應原先Process(橙色),表示處理任務的時間,也能夠說是CPU等待GPU完成任務的時間,線條越高,表示GPU作的事情越多;

  2. Command Issue:對應原先Execute(紅色),表示執行任務的時間,這部分主要是Android進行2D渲染顯示列表的時間,爲了將內容繪製到屏幕上,Android須要使用Open GL ES的API接口來繪製顯示列表,紅色線條越高表示須要繪製的視圖更多;

  3. Sync & Upload:表示的是準備當前界面上有待繪製的圖片所耗費的時間,爲了減小該段區域的執行時間,咱們能夠減小屏幕上的圖片數量或者是縮小圖片的大小;

  4. Draw:對應原先Update(藍色),表示測量和繪製視圖列表所須要的時間,藍色線條越高表示每一幀須要更新不少視圖,或者View的onDraw方法中作了耗時操做;

  5. Measure/Layout:表示佈局的onMeasure與onLayout所花費的時間,一旦時間過長,就須要仔細檢查本身的佈局是否是存在嚴重的性能問題;

  6. Animation:表示計算執行動畫所須要花費的時間,包含的動畫有ObjectAnimator,ViewPropertyAnimator,Transition等等。一旦這裏的執行時間過長,就須要檢查是否是使用了非官方的動畫工具或者是檢查動畫執行的過程當中是否是觸發了讀寫操做等等;

  7. Input Handling:表示系統處理輸入事件所耗費的時間,粗略等於對事件處理方法所執行的時間。一旦執行時間過長,意味着在處理用戶的輸入事件的地方執行了複雜的操做;

  8. Misc Time/Vsync Delay:表示在主線程執行了太多的任務,致使UI渲染跟不上vSync的信號而出現掉幀的狀況;出現該線條的時候,能夠在Log中看到這樣的日誌:  I/Choreographer(*): Skipped XXX frames! The application may be doing too much work on its main thread

關於這一部分的具體原理及詳細解釋能夠參考Android性能優化典範:

二、選擇第二項adb shell dumpsys gfxinfo,能夠在終端中經過adb shell dumpsy gfxoinfo taskName命令獲取對應進程的幀渲染日誌文件。

4. GPU Monitor

另外,在Android Studio 1.4以後的版本中集成了GPU Monitor,也能夠查看每幀的渲染耗時。使用方法以下:

將手機鏈接電腦病開啓USB調試選項,打開Android Studio並點擊底部的「Android Monitor」,選擇待測的設備與進程,便可看到GPU Monitor的監控結果。以6.0系統爲例,能夠看到,GPU Monitor中呈現的信息實際上與GPU呈現模式分析中在手機屏幕上顯示的柱狀圖是相同的。

GPU Monitor中展現的柱狀圖的顏色數量也是與系統版本有關的,若使用5.x系統,GPU Monitor中渲染耗時展現以下:

2、GPU廠商提供的工具

上面提到的方法都是經過監控幀渲染時間等手段間接反映GPU的狀態,可是這些工具都不能知足咱們的需求。其實咱們的需求很簡單:但願可以直接得到GPU佔用率或者相似的指標,就如同top命令能夠直接查看CPU佔用率同樣,簡單快捷。可是,多是因爲相比CPU佔用率,大部分開發者對GPU佔用率並非十分關心,不只Linux/Android沒有提供GPU佔用指標,就連Windows上也沒有提供原生的方法。Windows 平臺上有一些第三方工具可以監測顯卡狀態,例如GPU-Z,暫時還不太清楚其工做原理及精確度。而在Linux/Android平臺上彷佛還缺乏比較權威的第三方監測工具,Linux上能夠經過Nvidia提供的nvidia-smi命令獲取GPU參數,可是對其餘GPU支持有限。在Android端,高通也提供了一些工具可以監測GPU的運行狀況,可是也僅僅支持使用了高通CPU/GPU的移動設備。高通開發了兩個可以監測GPU的工具:

  1. Adreno Profiler;

  2. Trepn Profiler。

其中,前者是PC端的工具,功能強大,可是使用相對複雜,所以若是測試人員只須要簡單的測試數據,沒有必要使用該工具。有興趣的同窗能夠在網上檢索資料,官方網站:https://developer.qualcomm.co...(複製連接在瀏覽器中打開)

本文主要介紹Trepn Profiler。Trepn Profiler是運行在終端上的性能監測工具,在應用寶等各大應用市場均能免費下載。

官方網站:https://developer.qualcomm.co...(複製連接在瀏覽器中打開)

Trepn Profiler可以實時監測手機幾項主要性能指標,主要包括CPU、內存、GPU、網絡流量以及電量。其中GPU監測僅支持搭載高通處理器的設備,而其餘功能能夠在搭載任意處理器的手機上使用。Trepn Profiler使用起來也十分簡單,下面主要介紹如何使用該工具監測並提取GPU數據。

首先打開Trepn Profiler,能夠看到如下界面:

各個入口對應了不一樣的監測指標,以CPU監測爲主,而GPU監測隱藏在「Performance Graph」中,點擊該按鈕並劃到最下方:

同CPU佔用同樣,這裏使用百分比表示了當前GPU的佔用狀況,恰好可以知足咱們的需求,完美!可是,非高通機器在這裏面是找不到GPU Frequency和GPU Load這兩個指標的。然而這僅僅提供了一個折線圖,若是想獲取更詳細信息,好比說原始數據以及各進程對應的GPU佔用,不要緊,Trepn Profiler一樣可以知足。

回到首頁,點擊左上角選項按鈕,選擇「ADVANCED MODE」,進入如下界面:

選擇「Profile App」便可選擇監測應用,在Setting中能夠選擇監測項目,採樣頻率等高級選項,同時還能夠選擇開啓懸浮窗口實時監測。咱們選擇監測QQ空間直播過程當中的GPU佔用狀況,並開啓懸浮窗口實時監測GPU狀態,以下圖:

直播結束後,回到Trepn Profiler並選擇「Stop Profiling」,會提示是否保存測試結果,選擇「Save as .csv」,就能夠保存測試過程當中每次採樣得到的原始數據。從手機中將csv格式的原始數據撈出來,能夠用excel打開或者文本編輯器打開,能夠根據後續須要自行選擇數據處理方式。

總結

   
本文記錄了一個小白探索安卓GPU測試方法的過程並總結了現有的幾個方法,可是筆者感受本文總結的幾個方法仍是存在許多不足,而且對GPU測試相關也仍然存在一些疑問,例如:是否有公認統一的GPU測試衡量指標?第三方(非GPU廠商)可否作到跨硬件平臺的、精確的GPU監控與測試?
   
在專項測試關注的其餘幾個領域裏,咱們都創建了較完善的監控體系和工具集成,而相比之下,本文總結的GPU測試方法就顯得過於簡陋。隨着當前直播業務的火爆以及將來VR/AR技術的逐步普及,未來會有愈來愈多的非遊戲類應用涉及到較大規模的GPU運算。而目前咱們專項測試乃至整個業界彷佛對於GPU監控與測試的關注度還不夠,因此最後也但願咱們專項團隊可以儘早完善GPU的測試方法以及監測體系。
   
筆者來自SNG質量部專項技術測試團隊,因爲本人剛入職還處於學習階段,在性能/專項測試方面仍然資歷尚淺,以前也沒有接觸過GPU以及圖形學方面的知識,本文如有不許確不嚴謹不完善的地方,也請你們不吝賜教。


更多精彩內容歡迎關注騰訊優測的微信公衆帳號:

相關文章
相關標籤/搜索