Systrace UI性能分析工具

在開發(fā)應用時,需要確保UI交互順滑爆存,有60fps的幀率蛉顽。如果出現(xiàn)了丟幀現(xiàn)象,解決問題的第一步是弄清楚系統(tǒng)都做了什么先较。

Systrace工具可以收集和檢查所有進程的時序信息携冤,展示什么地方在占用CPU,以及每個進程和線程每個時間段在做什么闲勺。它也會檢查捕獲到的trace信息曾棕,高亮顯示發(fā)現(xiàn)的問題。

概述

Systrace幫助你分析應用如何在Android設備上運行菜循。它將系統(tǒng)線程和應用線程的執(zhí)行放在同一時間線上翘地。要使用Systrace分析應用,你首先需要收集trace日志。

圖1 Systrace信息

圖1展示了捕獲到的5s時長的滑動一個性能不太好的app的trace信息衙耕。默認會顯示一個縮小的視圖昧穿。橫坐標是時間,縱坐標是分組進程信息橙喘,進程內部按照線程分組时鸵。

分組的順序是Kernel,SurfaceFlinger厅瞎,接下來是各個應用饰潜,以包名為標簽。每個應用程序進程包含每個線程所包含的所有trace標記和簸,包括基于啟用trace類別的高級trace事件的層次結構彭雾。

生成trace

生成trace有兩個條件:

  • Android系統(tǒng)最低為4.1(API 16)
  • 有root權限

生成trace可以使用命令行或者從IDE啟動。

命令行生成trace

命令行的方式在4.2和4.3系統(tǒng)上是不同的锁保。

在Android 4.3(API 18)及以上系統(tǒng)生成trace

步驟:

  • 確保連接了設備并開啟了debug模式
  • 運行trace薯酝,比如:
$ cd android-sdk/platform-tools/systrace
$ python systrace.py --time=10 -o mynewtrace.html sched gfx view wm
  • 在設備上執(zhí)行你想觀察的動作。

詳細的參數(shù)信息身诺,參照https://developer.android.google.cn/studio/profile/systrace-commandline.html#options-4.3

在Android 4.2(API 17)及以上系統(tǒng)生成trace

https://developer.android.google.cn/studio/profile/systrace-commandline.html#options-pre-4.3

Android Studio生成trace

  1. 連接設備
  2. 在Android Studio中打開應用蜜托,并在設備中運行。
  3. 在Android Studio中打開Android Device Monitor:Tools -> Android -> Android Device Monitor霉赡,
    圖2
  4. 然后選中DDMS標簽橄务。點擊左側你要追蹤的應用,然后點擊Systrace按鈕:


    圖3
  5. 在彈出的窗口中穴亏,配置你的設置:


    圖4
    • Destination File:trace文件的保存位置
    • Trace duaration:默認5s蜂挪,推薦30s。
    • Trace Buffer Size:trace大小
    • Enable Application Traces from:選擇你的應用
    • Select tags to enable:至少選擇一個追蹤標記嗓化。
  6. 點擊OK開啟trace
  7. 操作你的應用
  8. trace結束后棠涮,會自動返回到Android Device Monitor。

trace分析

生成trace后刺覆,使用瀏覽器打開trace文件严肪。

幀檢測

以下圖為例:

圖5

每個渲染幀的應用都會展示一行幀的圓圈(F圓圈),典型的是綠色的谦屑。黃色和紅色的圓圈表示該幀的渲染時間超過了16.6s驳糯。

你可以用鼠標點選每一幀來高亮顯示該幀,或者點選幀內的元素氢橙,最下面的窗口會顯示一些詳細信息酝枢。

查看警告

Systrace會自動分析trace,并高亮性能問題作為警告悍手,對處理方式提出建議帘睦。

圖6

如上圖所示袍患,在你選擇了一個耗時較長的幀后,一個警告會顯示出來竣付。查看警告的描述诡延,對查找問題很有幫助。上述表示Adapter的getView方法可能做了太多的工作卑笨。

你也可以點擊右側的Alerts標簽來查看trace中所有的警告:

圖7

快捷鍵

描述
w 放大
s 縮小
a 左移
d 右移
e 定位到中間位置
g 顯示網格線
選擇上一個
選擇下一個

trace代碼

框架定義的trace標記并不適用所有的情況孕暇,所以你可能需要添加你自己的標記。在Android 4.3(API18)以上的系統(tǒng)赤兴,你可以使用Trace類的方法來添加標記。這可以幫助你弄清楚應用的線程在每個時間段做了什么隧哮。

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

    ...

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Trace.beginSection("MyAdapter.onCreateViewHolder");
        MyViewHolder myViewHolder;
        try {
            myViewHolder = MyViewHolder.newInstance(parent);
        } finally {
            Trace.endSection();
        }
        return myViewHolder;
    }

   @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Trace.beginSection("MyAdapter.onBindViewHolder");
        try {
            try {
                Trace.beginSection("MyAdapter.queryDatabase");
                RowItem rowItem = queryDatabase(position);
                mDataset.add(rowItem);
            } finally {
                Trace.endSection();
            }
            holder.bind(mDataset.get(position));
        } finally {
            Trace.endSection();
        }
    }

…

}

注意:

  • begin和end是成對出現(xiàn)的桶良。
  • begin和end必須在同一線程內。
  • try...catch塊中沮翔,確保end在finally中陨帆。

在測試應用性能時,應該打開應用級trace采蚀,即使你沒有自己添加標記疲牵。很多庫,比如RecyclerView榆鼠,包含了一些trace標記纲爸,可以提供很多有用的信息

**注:本文翻譯自Google官方文檔。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末妆够,一起剝皮案震驚了整個濱河市识啦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌神妹,老刑警劉巖颓哮,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸵荠,居然都是意外死亡冕茅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門蛹找,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姨伤,“玉大人,你說我怎么就攤上這事熄赡〗Γ” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵彼硫,是天一觀的道長炊豪。 經常有香客問我凌箕,道長,這世上最難降的妖魔是什么词渤? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任牵舱,我火速辦了婚禮,結果婚禮上缺虐,老公的妹妹穿的比我還像新娘芜壁。我一直安慰自己,他們只是感情好高氮,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布慧妄。 她就那樣靜靜地躺著,像睡著了一般剪芍。 火紅的嫁衣襯著肌膚如雪塞淹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天罪裹,我揣著相機與錄音饱普,去河邊找鬼。 笑死状共,一個胖子當著我的面吹牛套耕,可吹牛的內容都是我干的。 我是一名探鬼主播峡继,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼冯袍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鬓椭?” 一聲冷哼從身側響起颠猴,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎小染,沒想到半個月后翘瓮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡裤翩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年资盅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踊赠。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡呵扛,死狀恐怖,靈堂內的尸體忽然破棺而出筐带,到底是詐尸還是另有隱情今穿,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布伦籍,位于F島的核電站蓝晒,受9級特大地震影響腮出,放射性物質發(fā)生泄漏。R本人自食惡果不足惜芝薇,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一胚嘲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洛二,春花似錦馋劈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至垒迂,卻和暖如春君珠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背娇斑。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留材部,地道東北人毫缆。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像乐导,于是被迫代替她去往敵國和親苦丁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容