Systrace使用

systrace的簡單使用

1.安裝python并配置python環(huán)境變量

注意:

  1. Systrace.py的使用需要安裝python 2.7乃坤,不能用python 3.x羹饰。
    安裝完成后輸入python systrace.py -l如下圖所示證明安裝成功梦染。
image.png
  1. 若提示ImportError: No module named win32con 則輸入pip install pypiwin32
    安裝win32con模塊愧怜。

2.輸入命令初茶,執(zhí)行待分析的操作壕吹,獲取trace.html文件

在android sdk下trace目錄下執(zhí)行形如python systrace.py [options] [category1] [category2] ... [categoryN]的命令蕊爵,同時打開待分析app并執(zhí)行相應(yīng)操作辉哥,便能得到可供分析的trace.html文件。

命令用法

python systrace.py [options] [category1] [category2] ... [categoryN]

options

其中options可取值:

image.png

category

category可取值:

image.png

[option] 中比較重要的幾個參數(shù)如下:

  • -a <package_name>:這個選項可以開啟指定包名App中自定義Trace Label的Trace功能在辆。也就是說证薇,如果你在代碼中使用了Trace.beginSection("tag"), Trace.endSection;默認(rèn)情況下匆篓,你的這些代碼是不會生效的浑度,因此,這個選項一定要開啟鸦概!

  • -t N:用來指定Trace運(yùn)行的時間箩张,取決于你需要分析過程的時間甩骏;還是那句話,在需要的時候盡可能縮小時間先慷;當(dāng)然饮笛,絕對不要把時間設(shè)的太短導(dǎo)致你操作沒完Trace就跑完了,這樣會出現(xiàn)Did not finish 的標(biāo)簽论熙,分析數(shù)據(jù)就基本無效了福青。

  • -l:這個用來列出你分析的那個手機(jī)系統(tǒng)支持的Trace模塊;也就是上面命令中 [category1]能使用的部分脓诡;不同版本的系統(tǒng)能支持的模塊是不同的无午,一般來說,高版本的支持的模塊更多祝谚。

  • -o FILE:指定trace數(shù)據(jù)文件的輸出路徑宪迟,如果不指定就是當(dāng)前目錄的trace.htmlsystrace.py -l 可以輸出手機(jī)能支持的Trace模塊交惯,而且輸出還給出了此模塊的用途次泽;

常用的模塊如下:

  • sched: CPU調(diào)度的信息,非常重要席爽;你能看到CPU在每個時間段在運(yùn)行什么線程意荤;線程調(diào)度情況,比如鎖信息拳昌。
    gfx:Graphic系統(tǒng)的相關(guān)信息袭异,包括SerfaceFlinger,VSYNC消息炬藤,Texture御铃,RenderThread等;分析卡頓非常依賴這個沈矿。
    view: View繪制系統(tǒng)的相關(guān)信息上真,比如onMeasure,onLayout等羹膳;對分析卡頓比較有幫助睡互。
    am:ActivityManager調(diào)用的相關(guān)信息;用來分析Activity的啟動過程比較有效陵像。dalvik: 虛擬機(jī)相關(guān)信息就珠,比如GC停頓等。
    binder_driver: Binder驅(qū)動的相關(guān)信息醒颖,如果你懷疑是Binder IPC的問題妻怎,不妨打開這個。
    core_services: SystemServer中系統(tǒng)核心Service的相關(guān)信息泞歉,分析特定問題用逼侦。

示例:

3.用瀏覽器打開并分析trace.html文件

瀏覽器打開trace文件后如下圖所示:

image.png

橫坐標(biāo)是以時間為單位匿辩,縱坐標(biāo)是以進(jìn)程-線程的方式來劃分,同一進(jìn)程的線程為一組放在一起榛丢,可收縮/展開铲球。 systrace會記錄下所有進(jìn)程在所給時間內(nèi)的表現(xiàn)。

Frames

在每個app進(jìn)程晰赞,都有一個Frames行稼病,正常情況以綠色的圓點表示。當(dāng)圓點顏色為黃色或者紅色時宾肺,意味著這一幀超過16.6ms(即發(fā)現(xiàn)丟幀)溯饵,這時需要通過放大那一幀進(jìn)一步分析問題。

image.png

Alerts

Systrace能自動分析trace中的事件锨用,并能自動高亮性能問題作為一個Alerts,建議調(diào)試人員下一步該怎么做隘谣。比如對于丟幀是增拥,點擊黃色或紅色的Frames圓點便會有相關(guān)的提示信息;另外寻歧,在systrace的最右上方掌栅,有一個Alerts tab可以展開,這里記錄著所有的的警告提示信息码泛。

模式切換

  • Select mode: 雙擊已選定區(qū)能將所有相同的塊高亮選中猾封;(對應(yīng)數(shù)字1)
  • Pan mode: 拖動平移視圖(對應(yīng)數(shù)字2
  • Zoom mode:通過上/下拖動鼠標(biāo)來實現(xiàn)放大/縮小功能;(對應(yīng)數(shù)字3)
  • Timing mode:拖動來創(chuàng)建或移除時間窗口線噪珊。(對應(yīng)數(shù)字4)
    可通過按數(shù)字1~4晌缘,用于切換鼠標(biāo)模式; 另外痢站,按住alt鍵磷箕,再滾動鼠標(biāo)滾輪能實現(xiàn)放大/縮小功能。

如何定位到自己打個tag

/ 搜索關(guān)鍵字搜索到后阵难,再m定位到區(qū)域岳枷。

Systrace小結(jié)

特性

  • 結(jié)合Android內(nèi)核的數(shù)據(jù),生成Html報告呜叫。
  • 系統(tǒng)版本越高空繁,Android Framework中添加的系統(tǒng)可用Label就越多,能夠支持和分析的系統(tǒng)模塊也就越多朱庆。
  • 必須手動縮小范圍盛泡,會幫助你加速收斂問題的分析過程,進(jìn)而快速地定位和解決問題椎工。

作用

  • 主要用于分析繪制性能方面的問題饭于。
  • 分析系統(tǒng)關(guān)鍵方法和應(yīng)用方法耗時蜀踏。

如何分析非Debug的App

systrace官方文檔說待trace的App必須是debuggable的,但是官方又說掰吕,debuggable的App與非debuggable的性能有較大差別果覆;因為系統(tǒng)為了支持debug開啟了一些列功能并且關(guān)閉掉了某些重要的優(yōu)化,如果我們想要待分析的App盡可能接近真實情況殖熟,那么必須要在非Debug的App中能啟用systrace功能局待;因為相同情況下Debug的App性能比非Debuggable的差,你無法確保在debuggable版本上分析出來的結(jié)論能準(zhǔn)確推廣到非debuggable的版本上菱属。

分析systrace源碼之后 钳榨,發(fā)現(xiàn)這個條件只是個障眼法而已;我們可以手動開啟App的自定義Label的Trace功能纽门,方法也很簡單薛耻,調(diào)用一個函數(shù)即可;但是這個函數(shù)是SDK @hide的赏陵,我們需要反射調(diào)用:

Class<?> trace = Class.forName("android.os.Trace");
Method setAppTracingAllowed = trace.getDeclaredMethod("setAppTracingAllowed", boolean.class);
setAppTracingAllowed.invoke(null, true);

把這段代碼放在Application的attachBaseContext 中饼齿,這樣就可以手動開啟App自定義Label的Trace功能,在非debuggable的版本中也適用蝙搔!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缕溉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吃型,更是在濱河造成了極大的恐慌证鸥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勤晚,死亡現(xiàn)場離奇詭異枉层,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)运翼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門返干,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人血淌,你說我怎么就攤上這事矩欠。” “怎么了悠夯?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵癌淮,是天一觀的道長。 經(jīng)常有香客問我沦补,道長乳蓄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任夕膀,我火速辦了婚禮虚倒,結(jié)果婚禮上美侦,老公的妹妹穿的比我還像新娘。我一直安慰自己魂奥,他們只是感情好菠剩,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耻煤,像睡著了一般具壮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哈蝇,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天棺妓,我揣著相機(jī)與錄音,去河邊找鬼炮赦。 笑死怜跑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吠勘。 我是一名探鬼主播妆艘,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼看幼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起幌陕,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤诵姜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后搏熄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棚唆,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年心例,在試婚紗的時候發(fā)現(xiàn)自己被綠了宵凌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡止后,死狀恐怖瞎惫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情译株,我是刑警寧澤瓜喇,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站歉糜,受9級特大地震影響乘寒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匪补,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一伞辛、第九天 我趴在偏房一處隱蔽的房頂上張望烂翰。 院中可真熱鬧,春花似錦蚤氏、人聲如沸甘耿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棵里。三九已至,卻和暖如春姐呐,著一層夾襖步出監(jiān)牢的瞬間殿怜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工曙砂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留头谜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓鸠澈,卻偏偏與公主長得像柱告,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笑陈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android性能工具——Systrace使用 一际度、屏幕刷新機(jī)制 基礎(chǔ)概念 在一個典型的顯示系統(tǒng)中,一般包括CPU...
    TokyoZ閱讀 2,107評論 0 5
  • 做過性能優(yōu)化的人對systrace應(yīng)該都不陌生涵妥,systrace簡直是這方面的神器乖菱,systrace的特點十分明顯...
    Lonelyyy閱讀 33,810評論 3 12
  • Systrace 無疑是性能優(yōu)化神器,如果能輔以函數(shù)插樁蓬网,則能發(fā)揮它的最大威力窒所,讓所有的性能問題都無處遁形,比如常...
    董江鵬閱讀 3,041評論 0 1
  • 一. 簡介 systrace是Android 開發(fā)工具提供的一個可以測量App性能的工具帆锋。systrace提供了很...
    wind_sky閱讀 386評論 0 0
  • 《一個人的朝圣》吵取,起初我以為它與某種宗教信仰掛鉤,所以一直以來锯厢,我潛意識地排斥它皮官。 后來我期待翻開它,期待從哈...
    十四號同學(xué)閱讀 120評論 0 2