systrace


一、SysTrace簡介

Systrace是android性能調試優化的常用工具,它可以收集進程的活動信息,如界面布局、UI渲染、binder通信等;也可以收集內核信息,如cpu調度、IO活動、中斷等;這些信息會統一時間軸,在Chrome瀏覽器中顯示出來,非常方便工程師性能調試、優化卡頓等工作。

Systrace允許你監視和跟蹤Android系統的行為(trace)。它會告訴你系統都在哪些工作上花費時間、CPU周期都用在哪里,甚至你可以看到每個線程、進程在指定時間內都在干嘛。它同時還會突出觀測到的問題,從垃圾回收到渲染內容都可能是問題對象,甚至提供給你建議的解決方案。但是不能確定具體有問題的代碼在哪里,這里可用用traceview工具。在Android平台中,Systrace主要由3部分組成:   
內核部分:Systrace利用了Linux Kernel中的ftrace功能。所以,如果要使用Systrace的話,必須開啟kernel中和ftrace相關的模塊。   
數據采集部分:Android定義了一個Trace類。應用程序可利用該類把統計信息輸出給ftrace。同時,Android還有一個atrace程序,它可以從ftrace中讀取統計信息然后交給數據分析工具來處理。   
數據分析工具:Android提供一個systrace.py(python腳本文件,位於Android SDK目錄/tools/systrace中,其內部將調用atrace程序)用來配置數據采集的方式(如采集數據的標簽、輸出文件名等)和收集ftrace統計數據並生成一個結果網頁文件供用戶查看。 從本質上說,Systrace是對Linux Kernel中ftrace的封裝。應用進程需要利用Android提供的Trace類來使用Systrace.

Systrace 允許你收集和檢查設備上運行的所有進程的計時信息。 它包括Androidkernel的一些數據(例如 CPU調度程序,IO和APP Thread),並且會生成HTML報告,方便用戶查看分析trace內容。
如果想分析 Android系統或者某個 app的卡頓性能或者渲染問題,這時候Systrace 就非常有用。
首先我們需要抓取 Systrace文件,然后分析並找出引起系統卡頓,或者 app反應慢的原因,最好在源碼上解決引起卡頓、響應慢的問題。

二、使用命令行抓取 Systrace

1. 使用命令行抓取Systrace的准備工作

抓取systrace之前,請完成以下步驟:

  1. 下載並安裝Android SDK Tools
  2. 安裝Python ,並將其包含在系統環境變量的path中。
  3. 連接手機,打開開發者選項中的USB Debug選項 。
  4. 查找Systrace腳本,存儲路徑如下:android-sdk/platform-tools/systrace/

2. 使用命令行抓取 Systrace的語法

使用命令行抓取 Systrace的語法如下:
python systrace.py [options] [categories]

3. 使用命令行抓取 Systrace舉例

例如,以下命令調用systrace10秒鍾內記錄設備進程,包括圖形進程,並生成一個名為mynewtraceHTML報告:

python systrace.py --time=10 -o mynewtrace.html gfx

如果不指定任何類別或選項,systrace將生成包含所有可用類別的報告,並使用默認設置。 可用的類別取決於您使用的連接設備。



三、使用Systrace 檢測UI 性能

systrace對於檢查應用程序的UI性能特別有用,因為它可以分析您的代碼和幀速率,進而識別問題區域,同時提供可工參考的解決方案。

使用Systrace 檢測UI 性能

首先,按照以下步驟進行操作:

  1. 連接手機並運行您的app
  2. 使用以下命令運行systrace:
    python systrace.py view --time = 10
  3. 操作您的應用 10秒后,systrace生成一個HTML報告。
  4. 使用網絡瀏覽器打開HTML報告。

使用Chrome 打開生成的trace 文件,檢測記錄期間設備CPU使用情況,丟幀情況,卡頓耗時情況等等。

四、使用Systrace 檢測卡頓丟幀問題

如下Systrace報告列出了每個進程呈現UI frame,並顯示沿着時間線的每個渲染幀。 在綠色框架圓圈中,是指在16.6ms內呈現每秒穩定60幀。 花費16.6ms以上渲染的幀用黃色紅色圓圈表示

UI渲染幀率查看

在運行Android 5.0(API級別21)或更高版本的設備上, UI 渲染的工作主要由UI ThreadRenderThread兩個線程完成。 在之前的版本中,創建渲染框架的所有工作都是在UI Thread上完成的。

點擊一個F圓圈,它可以提供系統為渲染該frame 完成所包含的工作信息,包括警報,丟幀,建議等。
同時它還向您展示了在渲染該frame時系統正在執行的方法,因此您可以調查這些方法是否導致UI jank

點擊黃色或紅色幀按鈕,會分析提示此幀卡頓的信息

選擇黃色的frame后,您可能會在報告的底部窗格中看到如上提示信息。
上圖中顯示的Alert , 主要問題是在ListView回收和重新bind中花費了太多的時間。 trace中有相關事件的鏈接,點擊可以獲取更多關於系統在這段時間內正在做什么的事情。

要查看Systrace中發現的每個Alert以及設備觸發Alert的次數,請單擊窗口最右側的Alerts選項卡,如下圖所示。
Alerts面板可幫助您查看發生了哪些問題,以及發生的頻率。 將Alert面板看作是要修復的錯誤列表, 通常情況下,一個區域的微小變化或改進就可以消除應用程序中的全部Alert。

 
 
Alert 分析面板
 
 
Frame Input File Metrics Alerts 等面板

如果你的代碼在UI Thread上做太多的工作,你需要找出哪些方法消耗了太多的CPU時間
一種方法是添加systrace(請參閱檢測應用代碼)到您認為會導致這些卡頓或者導致慢的方法地方,然后查看這些函數調用是否顯示在systrace中。 如果您不確定哪些方法可能會在UI線程上造成卡頓,請使用Android Studio的內置CPU Profiler,或者生成跟蹤日志並使用Traceview查看它們。



參考鏈接
https://www.jianshu.com/p/75aa88d1b575

https://www.jianshu.com/p/0090d1428714

https://www.sohu.com/a/404342135_467784

https://blog.csdn.net/vicwudi/article/details/100191529


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM