Snapdragon Profiler是高通開發(fā)的用于調(diào)試分析高通Adreno GPU的一款桌面應(yīng)用宗苍,支持Windows葱色、MacOS 和 Linux 。在調(diào)試opengles應(yīng)用程序上能發(fā)揮非常重要的作用律胀。該工具能夠捕捉CPU柴淘、GPU、DSP示括、內(nèi)存铺浇、功率、網(wǎng)絡(luò)連接和設(shè)備運(yùn)行時(shí)的發(fā)熱數(shù)據(jù)等垛膝,具有Realtime随抠、Trace Capture裁着、Snapshot Capture 三種模式。實(shí)時(shí)(Realtime)模式用于實(shí)時(shí)跟蹤數(shù)據(jù)拱她,跟蹤(Trace Capture)模式用于跟蹤事件和數(shù)據(jù)二驰,默認(rèn)最大值是10秒”樱快照(Snapshot Capture)模式用于捕獲OpenGL ES應(yīng)用程序的當(dāng)前幀并可以進(jìn)行調(diào)試桶雀,包括單步調(diào)試?yán)L制指令,查看和編輯著色器唬复、程序矗积、紋理以及查看像素歷史的能力。著色器代碼是通過(guò)反編譯得到敞咧,得到的代碼跟原glsl代碼基本一致棘捣,并且可以在截圖后修改glsl進(jìn)行調(diào)試。
Snapdragon Profiler 各個(gè)版本的下載地址:
Snapdragon Profiler Linux
Snapdragon Profiler Windows
Snapdragon Profiler MacOS
要想下載休建,首先得有高通的開發(fā)者帳號(hào)乍恐。
本人的Linux環(huán)境是ubuntu16.04,Android 設(shè)備是Nexus 5X测砂,系統(tǒng)是自己編譯的Android 7.1.1 版AOSP茵烈。
安裝過(guò)程如下:
1、安裝Mono砌些。Snapdragon Profiler Linux版是基于Linux Mono開發(fā)的呜投,因此首先需要在Linux下安裝Mono。關(guān)于Snapdragon Profiler 更多信息可以參考官方的faq:
https://developer.qualcomm.com/software/snapdragon-profiler/faq
由于每個(gè)Linux版本的安裝稍微有些不同存璃,具體安裝過(guò)程請(qǐng)參考官網(wǎng):
http://www.mono-project.com/download/
安裝過(guò)程如下:
導(dǎo)入key
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
添加Mono的地址:
$ echo "deb http://download.mono-project.com/repo/ubuntu xenial main" | sudo tee /etc/apt/sources.list.d/mono-official.list
更新:
$ sudo apt-get update
安裝Mono:
$ sudo apt-get install mono-complete
2仑荐、Mono安裝完成后,進(jìn)入Snapdragon Profiler目錄下運(yùn)行命令:
$ cd /opt/SnapdragonProfiler/
$ ./run_sdp.sh
運(yùn)行時(shí)可能會(huì)出現(xiàn)以下錯(cuò)誤:
Unhandled Exception:
System.TypeInitializationException: The type initializer for 'SDPCorePINVOKE' threw an exception. ---> System.TypeInitializationException: The type initializer for 'SWIGExceptionHelper' threw an exception. ---> System.DllNotFoundException: SDPCore
根據(jù)高通觀望的說(shuō)法:
https://developer.qualcomm.com/forum/qdn-forums/software/snapdragon-profiler/29450
這是缺少C++Runtime庫(kù)造成的纵东,解決方法如下:
$ sudo apt-get install libc++1
安裝完成后粘招,不出意外就能夠看到以下界面了:
連接到手機(jī)上,選擇Connect to a Device篮迎,會(huì)出現(xiàn)以下彈框男图,等待右邊的圖標(biāo)變成綠色后點(diǎn)擊Connect連接手機(jī):
在StartPage頁(yè)面選擇New SnapShot Capture示姿,進(jìn)入后打開opengles的應(yīng)用程序甜橱,我們可以看到頁(yè)面如下:
在Data Sources里面選中對(duì)應(yīng)的應(yīng)用程序,然后選擇GPUShader Processing等你需要調(diào)試的應(yīng)用栈戳,調(diào)試之前需要添加相應(yīng)的權(quán)限:
<!--高通GPU調(diào)試權(quán)限-->
<uses-permission android:name="com.qti.permission.PROFILER" />
<uses-permission android:name="android.permission.INTERNET" />
打開應(yīng)用后岂傲,點(diǎn)擊Take Snapshot,然后慢慢等待數(shù)據(jù)回傳子檀。如果操作比較多镊掖,這個(gè)過(guò)程會(huì)非常非常慢乃戈,這是因?yàn)榻貓D的話,由于一幀繪制的Texture 比較多且比較大的時(shí)候亩进,傳輸?shù)臄?shù)據(jù)量會(huì)非常大症虑,因此繪制的特效越多,傳輸越慢归薛。我們可以看到谍憔,傳輸回來(lái)的截圖情況,右邊的Texture 可以看到當(dāng)前幀的情況主籍,右下角的ImagePreview可以看到Textures中的圖片預(yù)覽习贫。Context相同的Textures 和Program 是一一對(duì)應(yīng)的,我們可以選中Programs的ID千元,然后在左邊的VS苫昌、FS中那個(gè)就可以看到對(duì)應(yīng)的著色器代碼了。中間顯示的是捕捉到的圖片幸海。底部則是運(yùn)行的opengles繪制方法祟身,你可以雙擊相應(yīng)的方法進(jìn)行單步執(zhí)行。另外涕烧,你可以雙擊中間的圖片的某個(gè)位置月而,然后在左上角的Pixel History中可以看到DrawCall對(duì)應(yīng)的顏色值,方便調(diào)試opengles渲染的顏色议纯、透明度是否正確父款。
實(shí)時(shí)模式跟Android Device Monitor的使用方式大同小異,在選中應(yīng)用的包名后瞻凤,雙擊你想要監(jiān)聽的項(xiàng)目憨攒,程序的運(yùn)行狀態(tài)將會(huì)實(shí)時(shí)反饋出來(lái)。
跟蹤模式與實(shí)時(shí)模式類似阀参,只不過(guò)最大跟蹤10秒的時(shí)間肝集,結(jié)束后整體狀況將會(huì)回傳顯示出你想要監(jiān)聽的項(xiàng)目運(yùn)行的狀況。
至此蛛壳,Snapdragon Profiler的介紹就到這里杏瞻,接下來(lái)大家就可以歡快地使用該工具調(diào)試opengles應(yīng)用程序啦。