摘要:通過這兩天的調(diào)研,筆者將的測試方法簡單的分為兩類安卓官方提供的工具及方法廠商提供的工具及方法。其中監(jiān)測僅支持搭載高通處理器的設(shè)備,而其他功能可以在搭載任意處理器的手機(jī)上使用。
本文來自于Dev Club 開發(fā)者社區(qū),非經(jīng)作者同意,請勿轉(zhuǎn)載,原文地址:http://dev.qq.com/topic/57c7f...
背景作者:章未哲——騰訊SNG質(zhì)量部
我們在安卓上進(jìn)行性能測試時,如果想獲取CPU以及內(nèi)存等常用性能指標(biāo),linux系統(tǒng)自身就提供了現(xiàn)成的方法,谷歌官方甚至公司內(nèi)部也都提供了大量功能強(qiáng)大的分析工具。而相比之下,想要獲取GPU的相關(guān)指標(biāo)則沒那么容易,甚至我們對GPU應(yīng)該使用什么指標(biāo)衡量都幾乎一無所知。這一方面是由于系統(tǒng)沒有提供相關(guān)接口與命令,另一方面似乎業(yè)界目前對于GPU的關(guān)注度不足,相關(guān)積累與沉淀較少,鑒于此,個人感覺GPU測試這一塊也可以作為終端專項(xiàng)后面需要關(guān)注及攻克的課題。
通過這兩天的調(diào)研,筆者將GPU的測試方法簡單的分為兩類:
安卓官方提供的工具及方法;
GPU廠商提供的工具及方法。下面將具體介紹這兩類測試分析方法。
一、安卓官方提供的工具google或者百度“安卓GPU測試”等關(guān)鍵詞搜索出來的結(jié)果多半屬于這一類方法。這一類方法還有一個顯著的共同點(diǎn):沒有提供GPU直接關(guān)鍵指標(biāo),而是通過逐幀計算界面繪制渲染的過程及消耗時間間接呈現(xiàn)GPU的占用。具體工具及使用方法如下:
開啟方式:設(shè)置-開發(fā)者選項(xiàng)-顯示GPU視圖更新。主要查看view的更新以及redraw的區(qū)域大小。這個工具比較簡單,不做具體介紹。
開啟方式:設(shè)置-開發(fā)者選項(xiàng)-調(diào)試GPU過度繪制-顯示過度繪制區(qū)域。開啟后的效果如下圖:
過度繪制(overdraw)指的是某些組件在屏幕像素點(diǎn)上繪制次數(shù)超過一次,不同顏色代表含義如下:
無色:無過度繪制,即該像素點(diǎn)只繪制1次
藍(lán)色:1倍過度繪制,即該像素點(diǎn)繪制了2次
綠色:2倍過度繪制,即該像素點(diǎn)繪制了3次
淺紅:3倍過度繪制,即該像素點(diǎn)繪制了4次
暗紅:4倍過度繪制,即該像素點(diǎn)繪制了5次
在開發(fā)及測試的過程中,多倍過度繪制應(yīng)該是需要特別注意并極力避免的。
開啟方式:設(shè)置-開發(fā)者選項(xiàng)-GPU呈現(xiàn)模式分析。
里面有兩個選項(xiàng):
在屏幕上顯示條形圖;
在 adb shell dumpsys gfxinfo中。
1、選擇第一項(xiàng),效果如下:
手機(jī)上出現(xiàn)大量GPU繪制信息,每條柱狀信息代表一幀渲染時間,柱子越長代表這一幀的渲染時間越長,不同顏色代表每一幀渲染各個階段所占時長。為確保畫面流暢,系統(tǒng)每秒鐘需要渲染60幀(60fps),即平均每幀渲染時間為16ms,上圖中的綠色橫線即為16ms“警戒線”,超過這個警戒線的柱子代表該幀渲染時間過長,可能造成界面卡頓。
柱子不同顏色的組成代表了每一幀渲染各階段耗時,在4.x的系統(tǒng)中,只分了3個階段,而在5.x系統(tǒng)中細(xì)分成4個階段,而在6.0系統(tǒng)中更進(jìn)一步細(xì)分為了9個階段,上圖是6.0系統(tǒng)下呈現(xiàn)的效果,而在4.x系統(tǒng)下的呈現(xiàn)效果如下圖所示:
下面介紹各系統(tǒng)下不同顏色代表的含義:
4.x:
藍(lán)色:代表繪制時間,即創(chuàng)建和更新display lists的時間
紅色:代表執(zhí)行時間,即系統(tǒng)進(jìn)行2D渲染Display List的時間
橙色:代表處理時間,即CPU等待GPU完成渲染處理的時間
5.x:
新增紫色:代表渲染線程寫入資源所需時間
6.x:
變成9種顏色,將渲染過程中的幾大步驟進(jìn)一步細(xì)分,可以通過Android Studio上的GPU Monitor可以看到各顏色含義更新如下(關(guān)于GPU Monitor下一小節(jié)會具體介紹):
Swap Buffers:對應(yīng)原先Process(橙色),表示處理任務(wù)的時間,也可以說是CPU等待GPU完成任務(wù)的時間,線條越高,表示GPU做的事情越多;
Command Issue:對應(yīng)原先Execute(紅色),表示執(zhí)行任務(wù)的時間,這部分主要是Android進(jìn)行2D渲染顯示列表的時間,為了將內(nèi)容繪制到屏幕上,Android需要使用Open GL ES的API接口來繪制顯示列表,紅色線條越高表示需要繪制的視圖更多;
Sync & Upload:表示的是準(zhǔn)備當(dāng)前界面上有待繪制的圖片所耗費(fèi)的時間,為了減少該段區(qū)域的執(zhí)行時間,我們可以減少屏幕上的圖片數(shù)量或者是縮小圖片的大小;
Draw:對應(yīng)原先Update(藍(lán)色),表示測量和繪制視圖列表所需要的時間,藍(lán)色線條越高表示每一幀需要更新很多視圖,或者View的onDraw方法中做了耗時操作;
Measure/Layout:表示布局的onMeasure與onLayout所花費(fèi)的時間,一旦時間過長,就需要仔細(xì)檢查自己的布局是不是存在嚴(yán)重的性能問題;
Animation:表示計算執(zhí)行動畫所需要花費(fèi)的時間,包含的動畫有ObjectAnimator,ViewPropertyAnimator,Transition等等。一旦這里的執(zhí)行時間過長,就需要檢查是不是使用了非官方的動畫工具或者是檢查動畫執(zhí)行的過程中是不是觸發(fā)了讀寫操作等等;
Input Handling:表示系統(tǒng)處理輸入事件所耗費(fèi)的時間,粗略等于對事件處理方法所執(zhí)行的時間。一旦執(zhí)行時間過長,意味著在處理用戶的輸入事件的地方執(zhí)行了復(fù)雜的操作;
Misc Time/Vsync Delay:表示在主線程執(zhí)行了太多的任務(wù),導(dǎo)致UI渲染跟不上vSync的信號而出現(xiàn)掉幀的情況;出現(xiàn)該線條的時候,可以在Log中看到這樣的日志: ?I/Choreographer(*): Skipped XXX frames! The application may be doing too much work on its main thread
關(guān)于這一部分的具體原理及詳細(xì)解釋可以參考Android性能優(yōu)化典范:
http://hukai.me/android-perfo...
http://hukai.me/android-perfo...
2、選擇第二項(xiàng)adb shell dumpsys gfxinfo,可以在終端中通過adb shell dumpsy gfxoinfo taskName命令獲取對應(yīng)進(jìn)程的幀渲染日志文件。
另外,在Android Studio 1.4之后的版本中集成了GPU Monitor,也可以查看每幀的渲染耗時。使用方法如下:
將手機(jī)連接電腦病開啟USB調(diào)試選項(xiàng),打開Android Studio并點(diǎn)擊底部的“Android Monitor”,選擇待測的設(shè)備與進(jìn)程,即可看到GPU Monitor的監(jiān)控結(jié)果。以6.0系統(tǒng)為例,可以看到,GPU Monitor中呈現(xiàn)的信息實(shí)際上與GPU呈現(xiàn)模式分析中在手機(jī)屏幕上顯示的柱狀圖是相同的。
GPU Monitor中展示的柱狀圖的顏色數(shù)量也是與系統(tǒng)版本有關(guān)的,若使用5.x系統(tǒng),GPU Monitor中渲染耗時展示如下:
二、GPU廠商提供的工具上面提到的方法都是通過監(jiān)控幀渲染時間等手段間接反映GPU的狀態(tài),但是這些工具都不能滿足我們的需求。其實(shí)我們的需求很簡單:希望能夠直接獲得GPU占用率或者類似的指標(biāo),就如同top命令可以直接查看CPU占用率一樣,簡單快捷。但是,可能是由于相比CPU占用率,大部分開發(fā)者對GPU占用率并不是十分關(guān)心,不僅Linux/Android沒有提供GPU占用指標(biāo),就連Windows上也沒有提供原生的方法。Windows 平臺上有一些第三方工具能夠監(jiān)測顯卡狀態(tài),例如GPU-Z,暫時還不太清楚其工作原理及精確度。而在Linux/Android平臺上似乎還缺少比較權(quán)威的第三方監(jiān)測工具,Linux上可以通過Nvidia提供的nvidia-smi命令獲取GPU參數(shù),但是對其他GPU支持有限。在Android端,高通也提供了一些工具能夠監(jiān)測GPU的運(yùn)行情況,但是也僅僅支持使用了高通CPU/GPU的移動設(shè)備。高通開發(fā)了兩個能夠監(jiān)測GPU的工具:
Adreno Profiler;
Trepn Profiler。
其中,前者是PC端的工具,功能強(qiáng)大,但是使用相對復(fù)雜,因此如果測試人員只需要簡單的測試數(shù)據(jù),沒有必要使用該工具。有興趣的同學(xué)可以在網(wǎng)上檢索資料,官方網(wǎng)站:https://developer.qualcomm.co...(復(fù)制鏈接在瀏覽器中打開)
本文主要介紹Trepn Profiler。Trepn Profiler是運(yùn)行在終端上的性能監(jiān)測工具,在應(yīng)用寶等各大應(yīng)用市場均能免費(fèi)下載。
官方網(wǎng)站:https://developer.qualcomm.co...(復(fù)制鏈接在瀏覽器中打開)
Trepn Profiler能夠?qū)崟r監(jiān)測手機(jī)幾項(xiàng)主要性能指標(biāo),主要包括CPU、內(nèi)存、GPU、網(wǎng)絡(luò)流量以及電量。其中GPU監(jiān)測僅支持搭載高通處理器的設(shè)備,而其他功能可以在搭載任意處理器的手機(jī)上使用。Trepn Profiler使用起來也十分簡單,下面主要介紹如何使用該工具監(jiān)測并提取GPU數(shù)據(jù)。
首先打開Trepn Profiler,可以看到以下界面:
各個入口對應(yīng)了不同的監(jiān)測指標(biāo),以CPU監(jiān)測為主,而GPU監(jiān)測隱藏在“Performance Graph”中,點(diǎn)擊該按鈕并劃到最下方:
同CPU占用一樣,這里使用百分比表示了當(dāng)前GPU的占用情況,剛好能夠滿足我們的需求,完美!但是,非高通機(jī)器在這里面是找不到GPU Frequency和GPU Load這兩個指標(biāo)的。然而這僅僅提供了一個折線圖,如果想獲取更詳細(xì)信息,比如說原始數(shù)據(jù)以及各進(jìn)程對應(yīng)的GPU占用,沒關(guān)系,Trepn Profiler同樣能夠滿足。
回到首頁,點(diǎn)擊左上角選項(xiàng)按鈕,選擇“ADVANCED MODE”,進(jìn)入以下界面:
選擇“Profile App”即可選擇監(jiān)測應(yīng)用,在Setting中可以選擇監(jiān)測項(xiàng)目,采樣頻率等高級選項(xiàng),同時還可以選擇開啟懸浮窗口實(shí)時監(jiān)測。我們選擇監(jiān)測QQ空間直播過程中的GPU占用情況,并開啟懸浮窗口實(shí)時監(jiān)測GPU狀態(tài),如下圖:
直播結(jié)束后,回到Trepn Profiler并選擇“Stop Profiling”,會提示是否保存測試結(jié)果,選擇“Save as .csv”,就可以保存測試過程中每次采樣獲得的原始數(shù)據(jù)。從手機(jī)中將csv格式的原始數(shù)據(jù)撈出來,可以用excel打開或者文本編輯器打開,可以根據(jù)后續(xù)需要自行選擇數(shù)據(jù)處理方式。
總結(jié)? ?
本文記錄了一個小白探索安卓GPU測試方法的過程并總結(jié)了現(xiàn)有的幾個方法,但是筆者感覺本文總結(jié)的幾個方法還是存在許多不足,并且對GPU測試相關(guān)也仍然存在一些疑問,例如:是否有公認(rèn)統(tǒng)一的GPU測試衡量指標(biāo)?第三方(非GPU廠商)能否做到跨硬件平臺的、精確的GPU監(jiān)控與測試?
? ?
在專項(xiàng)測試關(guān)注的其他幾個領(lǐng)域里,我們都建立了較完善的監(jiān)控體系和工具集成,而相比之下,本文總結(jié)的GPU測試方法就顯得過于簡陋。隨著當(dāng)前直播業(yè)務(wù)的火爆以及未來VR/AR技術(shù)的逐步普及,將來會有越來越多的非游戲類應(yīng)用涉及到較大規(guī)模的GPU運(yùn)算。而目前我們專項(xiàng)測試乃至整個業(yè)界似乎對于GPU監(jiān)控與測試的關(guān)注度還不夠,所以最后也希望我們專項(xiàng)團(tuán)隊能夠盡早完善GPU的測試方法以及監(jiān)測體系。
? ?
筆者來自SNG質(zhì)量部專項(xiàng)技術(shù)測試團(tuán)隊,由于本人剛?cè)肼氝€處于學(xué)習(xí)階段,在性能/專項(xiàng)測試方面仍然資歷尚淺,之前也沒有接觸過GPU以及圖形學(xué)方面的知識,本文若有不準(zhǔn)確不嚴(yán)謹(jǐn)不完善的地方,也請大家不吝賜教。
更多精彩內(nèi)容歡迎關(guān)注騰訊優(yōu)測的微信公眾賬號:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/8745.html
摘要:雙卡數(shù)據(jù)庫適配流程根據(jù)系統(tǒng)數(shù)據(jù)內(nèi)容來做適配開發(fā),找到區(qū)分雙卡的標(biāo)識字段和字段對應(yīng)的值。主要涉及的數(shù)據(jù)庫表有兩個短信彩信電話。需要更新中的數(shù)據(jù)中的字段值來標(biāo)識卡槽。文騰訊優(yōu)測李艷超 摘要:android雙卡數(shù)據(jù)庫適配是常見的適配難題,騰訊優(yōu)測是app自動化適配測試平臺,提供APP兼容性適配測試,遠(yuǎn)程真機(jī)租用等多維度的測試服務(wù),為大家奉上優(yōu)分享-騰訊內(nèi)部的移動研發(fā)測試干貨精選~關(guān)鍵詞:數(shù)據(jù)...
閱讀 2993·2021-11-25 09:43
閱讀 2448·2021-11-24 09:39
閱讀 2792·2021-09-23 11:51
閱讀 1486·2021-09-07 10:11
閱讀 1510·2019-08-27 10:52
閱讀 1991·2019-08-26 12:13
閱讀 3415·2019-08-26 11:57
閱讀 1456·2019-08-26 11:31