Time Profiler工具使用

按照固定的時(shí)間間隔,定時(shí)對(duì)線程中的調(diào)用堆棧進(jìn)行采樣,獲取一個(gè)sample. 之后統(tǒng)計(jì)在這一時(shí)段內(nèi),某個(gè)方法出現(xiàn)在sample中次數(shù)。以此來(lái)表示該函數(shù)的運(yùn)行情況


image.png

一、打開Instruments 再打開Time Profiler
啟動(dòng)Xcode -> Instruments


image.png

Time Profiler的面板
image.png

二、點(diǎn)擊開始運(yùn)行按鈕,運(yùn)行目標(biāo)APP

image.png

Weight

Doesn’t measure duration. Aggregates samples into a useful summary.

weight的前面可以看到也有ms的時(shí)間。但是weight不代表duration. 這是 采樣次數(shù)*采樣間隔。采樣間隔通常是1ms

所以更合理的觀察方法是參考Weight的百分比值。

Self Weight

該函數(shù)在自己的函數(shù)體內(nèi)花費(fèi)的時(shí)間。有的函數(shù)A內(nèi)部只是簡(jiǎn)單調(diào)用其他函數(shù)B。這時(shí)A的Weight雖然可能高,但是它的Self Weight幾乎為0. 可以進(jìn)一步觀察其子函數(shù)B. Weight高并且Self weight也高的是真正耗時(shí)的函數(shù)。

Call Tree

點(diǎn)擊下方Call Tree按鈕,可以看到有一些勾選項(xiàng)

  1. Hide System Libraries。
    這個(gè)很有用,可以屏蔽掉系統(tǒng)的的調(diào)用。這部分通常不是關(guān)注的

  2. Invert Call Tree
    堆棧默認(rèn)是從上往下顯示的。勾選這個(gè)后會(huì)反向顯示,可以把耗時(shí)的子調(diào)用直接顯示出來(lái)。

  3. 其他也有各自的功能

圖形顯示區(qū)域

  1. 可以拖動(dòng)游標(biāo),選定只觀察某一個(gè)時(shí)間范圍內(nèi)的采樣數(shù)據(jù)。
  2. 可以點(diǎn)擊左側(cè)MainThread欄,從而只觀察發(fā)生在MainThread上的采樣數(shù)據(jù)
  3. 使用option +option -來(lái) zoom inzoom out
  4. 堆棧顯示面板,按住option點(diǎn)擊箭頭,可以把子調(diào)用樹全部展現(xiàn),不用一級(jí)一級(jí)點(diǎn)。

符號(hào)加載

對(duì)檢測(cè)到的我們項(xiàng)目自己的函數(shù),Instrument有時(shí)顯示的只是函數(shù)地址,這是因?yàn)閍pp相關(guān)的符號(hào)文件沒有加載進(jìn)來(lái)。

如果有app該版本的符號(hào)文件,可以 Menu -> Files -> Symbols。 分別選擇app以及framework的符號(hào)文件。

tips: 如果是debug模式的包,默認(rèn)pod庫(kù)編譯的framework是沒有符號(hào)的。如果需要,可以在Xcode的面板中選擇 Pods -> Project Pods -> Build Settings -> Build Options -> Debug Information Format -> DWARF with dSYM File

三、工具欄設(shè)置,方便快速定位問(wèn)題


image.png

Separate by State : 線程分離,狀態(tài)分開顯示 ,例如:Running狀態(tài),
Separate by Thread : 線程分離, 每個(gè)線程分開顯示,只有這樣 才能在調(diào)用路徑中能夠清晰看到占用CPU耗時(shí)最大的線程.
Invert Call Tree : 從上到下跟蹤堆棧信息.這個(gè)選項(xiàng)可以快捷的看到方法調(diào)用路徑最深方法占用CPU耗時(shí),比如FunA{FunB{FunC}},勾選后堆棧以C->B->A把調(diào)用層級(jí)最深的C顯示最外面.
Hide System Libraries : 隱藏系統(tǒng)調(diào)用,只關(guān)注自己代碼的耗時(shí)
Flatten Recursion : 遞歸函數(shù), 每個(gè)堆棧跟蹤一個(gè)條目
Top Functions : 顯示某個(gè)函數(shù)的總時(shí)間,A函數(shù)內(nèi)調(diào)用多個(gè)函數(shù)時(shí),可以顯示A函數(shù)的總耗時(shí)

四、查看詳情
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容