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