
systrace是用來(lái)查看應(yīng)用和系統(tǒng)運(yùn)行狀態(tài)的工具,利用他可以分析一些性能問(wèn)題。例如查看應(yīng)用是否卡頓,卡在那個(gè)方法了之類的問(wèn)題。本文簡(jiǎn)單抓一個(gè)瀏覽器啟動(dòng)的systrace隨便看看吧。
一.啟動(dòng)Andriod Device Monitor
連接手機(jī),啟動(dòng)Andriod Device Monitor,點(diǎn)擊一下下圖箭頭指向那個(gè)圖標(biāo)

設(shè)置抓取時(shí)間和抓取內(nèi)容,點(diǎn)擊OK就開(kāi)始抓取了,隨意啟動(dòng)操作下瀏覽器,5s后trace.html就生成了。

二.查看Traced
生成的trace.html要用chrome瀏覽器打開(kāi),瀏覽器輸入網(wǎng)址輸入chrome://tracing/,然后把trace.html拉進(jìn)去就可以了。結(jié)果如下。

整個(gè)視圖布局:
1.CPU占用情況,上圖可以看到有8個(gè)cpu
2.進(jìn)程trace
3.每個(gè)進(jìn)程的線程trace,線程主要看下主線程,即UI線程。
看下瀏覽器UI線程的流程,大概了解下瀏覽器啟動(dòng)的流程。
首先是出現(xiàn)“POSTFORK”,這個(gè)其實(shí)是在Fork一個(gè)子進(jìn)程,誰(shuí)的子進(jìn)程呢?Zoygote的。

搜下源碼,
/frameworks/base/core/java/com/android/internal/os/Zygote.java
是程序跑到forkAndSpecialize方法打出來(lái)的。

然后依次是
RuntimeInit :準(zhǔn)備虛擬機(jī)資源
ActivityThreadMain :Activity主線程入口

bindApplication:建立AMS與應(yīng)用的binder通信,可以看到他執(zhí)行了很多子方法,包括打開(kāi)應(yīng)用的odex,資源等

activityStart:這是回調(diào)onactivitystart了,但這時(shí)界面應(yīng)該還是不可見(jiàn)的。

看下圖,activityStart執(zhí)行后,渲染線程RenderThread才開(kāi)始工作,所以這是才開(kāi)始渲染,界面才開(kāi)始可見(jiàn)。

那這個(gè)應(yīng)用啟動(dòng)花了多少時(shí)間了?我們看一下,以POSTFORK到activityStart為準(zhǔn),總共花了615.176ms!?。?!牛逼??!

總結(jié)
這篇文章,介紹了systrace的抓取與查看方法。簡(jiǎn)單分析了下一個(gè)應(yīng)用啟動(dòng)的systrace。用處不大,僅供吐槽。