Tracer for OpenGL ES(http://developer./tools/help/gltracer.html)是Android SDK中新增加的開發(fā)工具,可逐幀(準(zhǔn)確得說是逐函數(shù))記錄app用OpenGL ES的繪制過程。它提供了每個(gè)OpenGL函數(shù)調(diào)用的消耗時(shí)間,所以很多時(shí)候用來作performance分析。但因?yàn)槠鋸?qiáng)大的記錄功能,在分析渲染出錯(cuò)的問題時(shí)(尤其是沒有源代碼的情況下),它也可算是一大神器。缺點(diǎn)有二:一是只支持Android 4.1及以上的設(shè)備,二是采集數(shù)據(jù)時(shí)app運(yùn)行會(huì)變得很慢(這可能會(huì)影響app的行為)。
簡要使用步驟: 1. 先連接設(shè)備,然后打開Device Monitor(在android-sdk/tools/monitor) 或Eclipse(裝了ADT的話),接著Window-> Open Perspective -> Other -> Tracer for OpenGL ES。 2. 點(diǎn)擊 $ adb shell dumpsys activity | grep app名 得到。然后能打勾的全打上勾,點(diǎn)Trace開始。例子:
3. 覺得差不多了點(diǎn)"Stop Tracing"結(jié)束,Trace log文件就會(huì)生成在預(yù)定的目錄下。 4. 點(diǎn)擊
左上角的滑動(dòng)條是幀號(hào),通過它來調(diào)節(jié)要看哪一幀的繪制過程。 左下角為這一幀中運(yùn)行過的繪制函數(shù),其中的畫圖函數(shù)會(huì)標(biāo)藍(lán)顯示。點(diǎn)擊其中的某個(gè)函數(shù),其它的窗口就會(huì)相應(yīng)顯示那個(gè)函數(shù)執(zhí)行后的效果。舉例來說,如點(diǎn)圖中的glDrawArrays函數(shù)后,中間的GL狀態(tài)內(nèi)容也相應(yīng)改變,右上角的預(yù)覽也變成了這一函數(shù)執(zhí)行后的效果。其頂點(diǎn)坐標(biāo)和紋理坐標(biāo)都可通過點(diǎn)擊前面的glVertexAttribPointerData,然后從Details窗口獲得。而當(dāng)前用的texture, shader和buffer等信息都可以從中間的GL狀態(tài)窗口中獲得。從圖中可以看出,這個(gè)函數(shù)是用來繪制背景的,因?yàn)楹竺娴腄raw函數(shù)還沒有執(zhí)行到,所以屏幕中間的其它元素都還沒有被繪制出來。 中間窗口即為OpenGL的狀態(tài)了。OpenGL像一個(gè)狀態(tài)機(jī),當(dāng)前繪制效果受到當(dāng)前GL狀態(tài)的影響,而當(dāng)前GL狀態(tài)可能在很久之前就設(shè)定好了。有了這個(gè)信息就大大方便了我們的分析。 右上角窗口為當(dāng)前選定函數(shù)執(zhí)行后的繪制效果。 右下角窗口為這一幀所有函數(shù)執(zhí)行完后的繪制效果,也就是這一幀繪制完后的效果。 |
|