本指南說明如何瀏覽及解讀 Systrace 報表。如要解讀 Perfetto 報表,請參閱「追蹤記錄處理器」說明文件。
一般報表的元素
Systrace 會產生內含多個部分的輸出 HTML 檔案。此報表會列出每個處理程序的執行緒。如果指定的執行緒會轉譯 UI 影格,報表也會在時間軸上標出轉譯的影格。當您瀏覽報表時,可以從左到右觀察整個時間進程。
從上到下,報表包含下列幾個部分。
使用者互動
第一個部分內有長條圖,代表應用程式或遊戲內的特定使用者互動情形,例如輕觸裝置螢幕。這些互動情形可當做實用的時間標記。
CPU 活動
下一個部分顯示的長條圖代表各個 CPU 中的執行緒活動。長條會顯示所有應用程式 (包括遊戲) 的 CPU 活動。
CPU 活動部分可以展開,方便您查看各 CPU 的時鐘頻率。圖 1 是收合後的 CPU 活動部分範例,圖 2 則是可顯示時鐘頻率的展開後版本:
系統事件
這個部分的直方圖會顯示特定的系統層級事件,例如特定物件的紋理數和總大小。
值得仔細留意的是標有 SurfaceView 標籤的直方圖,其中的計數代表組合影格緩衝區的數量,這些緩衝區已傳入顯示管道中,正在等候顯示於裝置螢幕中。由於大部分裝置都採取雙重或三重緩衝處理,所以這個計數幾乎一律是 0、1 或 2。
其他長方圖則描繪 Surface Flinger 程序,包括 VSync 事件和 UI 執行緒切換工作,如圖 3 所示:
顯示影格
這部分通常位於報表最頂部,其中顯示一條多色的折線,後面是堆疊的長條。這些形狀代表已建立的特定執行緒的狀態和影格堆疊。堆疊的每個層級都代表對 beginSection()
的呼叫,或您為應用程式或遊戲定義的自訂追蹤記錄事件開頭。
至於每個長條堆疊上方的多色線條,則代表特定執行緒在一段時間內的狀態組合。線條的每個區段可包含下列其中一個顏色:
- 綠色:執行中
- 執行緒正在完成與程序相關的工作,或正在回應中斷。
- 藍色:可執行
- 執行緒可以執行,但目前並未排定執行。
- 白色:休眠中
- 執行緒沒有需要處理的工作,可能是因為執行緒因互斥鎖而封鎖。
- 橘色:不可中斷的休眠
- 執行緒已遭 I/O 封鎖,或是正在等待磁碟作業完成。
- 紫色:可中斷的休眠
- 執行緒在其他核心作業 (通常是記憶體管理作業) 中遭到封鎖。
鍵盤快速鍵
下表列出檢閱 Systrace 報表時可用的鍵盤快速鍵:
鍵 | 說明 | |
---|---|---|
W | 放大追蹤記錄時間軸。 | |
A | 在追蹤記錄時間軸上向左平移。 | |
S | 縮小追蹤記錄時間軸。 | |
D | 在追蹤記錄時間軸上向右平移。 | |
E | 將追蹤記錄時間軸置中 (以目前的滑鼠位置為中心)。 | |
M | 框住目前選取範圍。 | |
1 | 將目前使用中的選擇模式變更為「選取」模式。對應於滑鼠選取器工具列中顯示的第 1 個按鈕 (見右圖)。 |
|
2 | 將目前使用中的選擇模式變更為「平移」模式。對應於滑鼠選取器工具列中顯示的第 2 個按鈕 (見右圖)。 |
|
3 | 將目前使用中的選擇模式變更為「縮放」模式。對應於滑鼠選取器工具列中顯示的第 3 個按鈕 (見右圖)。 |
|
4 | 將目前使用中的選擇模式變更為「計時」模式。對應於滑鼠選取器工具列中顯示的第 4 個按鈕 (見右圖)。 |
|
G | 在目前所選工作開始時顯示格線。 | |
Shift + G 鍵 | 在目前所選工作結束時顯示格線。 | |
向左鍵 | 在目前所選的時間軸上選取前一個事件。 | |
向右鍵 | 在目前所選的時間軸上選取下一個事件。 |
調查效能問題
使用 Systrace 報表時,您可以檢查裝置 CPU 在記錄期間的使用情形。如需有關如何瀏覽 HTML 報表的說明,請參閱「鍵盤快速鍵」一節,或按一下報表右上角的「?」按鈕。
以下各節說明如何檢查報表中的資訊,以便找出並修正效能問題。
辨別效能問題
在 Systrace 報表中瀏覽時,您可以進行下列一或多項操作,更輕鬆地找出效能問題:
- 在時間間隔周圍繪製一個矩形範圍,藉此選取要查看的時間間隔。
- 使用尺規工具標示或標明有問題的區域。
- 依序點選「View Options」>「Highlight VSync」來顯示各畫面的重新整理作業。
檢查 UI 影格和快訊
如圖 4 所示,Systrace 報表會列出轉譯 UI 畫面的各個程序,並在時間軸上標出各個轉譯影格。在 16.6 毫秒內轉譯的影格如果必須維持每秒 60 個影格的穩定速率,就會以綠色影格圓圈表示。影格的轉譯時間如果超過 16.6 毫秒,則以黃色或紅色影格圓圈表示。
![放大的影格檢視畫面](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-unselected.png?authuser=3&hl=zh-tw)
您只要按一下影格圓圈,即可醒目顯示該影格,並取得系統轉譯影格工作的其他相關資訊 (包括快訊)。報表也會顯示系統轉譯該影格時執行的方法。您可以調查這些方法,判斷造成 UI 卡頓的可能原因。
![選取了有問題的影格](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-selected.png?authuser=3&hl=zh-tw)
選取緩慢的影格後,您可能會在報表的底部窗格看到快訊。圖 5 所示的快訊指出,影格的主要問題是花費在 ListView
回收和重新繫結中花費太多時間。您可以透過追蹤記錄中相關事件的連結,進一步瞭解系統在這段期間執行的操作。
如要查看工具在追蹤記錄中發現的每則快訊,以及裝置觸發各快訊的次數,請按一下視窗最右側的「Alerts」分頁標籤,如圖 6 所示。透過「Alerts」面板,您可以瞭解追蹤記錄中有哪些問題,以及問題導致卡頓的頻率。因此,不妨將此面板視為待修正的錯誤清單。一般來說,只要針對單一區域稍微變更或改進,就能移除整組快訊。
![顯示快訊分頁](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-selected-alert-tab.png?authuser=3&hl=zh-tw)
如果您在 UI 執行緒上發現執行的工作過多,請透過下列其中一種方式判斷哪些方法佔用過多 CPU 作業時間:
- 如果您知道哪些方法可能會導致出現瓶頸,請在這些方法中加入追蹤記錄標記。詳情請參閱這份指南,瞭解如何在程式碼中定義自訂事件。
- 如果不確定 UI 瓶頸的問題來源,請使用 Android Studio 提供的 CPU 分析器。您可以產生追蹤記錄,然後使用 CPU 分析器匯入及檢查這些記錄。