瀏覽 Systrace 報表

本指南說明如何瀏覽及解讀 Systrace 報表。如要解讀 Perfetto 報表,請參閱「追蹤記錄處理器」說明文件。

一般報表的元素

Systrace 會產生內含多個部分的輸出 HTML 檔案。此報表會列出每個處理程序的執行緒。如果指定的執行緒會轉譯 UI 影格,報表也會在時間軸上標出轉譯的影格。當您瀏覽報表時,可以從左到右觀察整個時間進程。

從上到下,報表包含下列幾個部分。

使用者互動

第一個部分內有長條圖,代表應用程式或遊戲內的特定使用者互動情形,例如輕觸裝置螢幕。這些互動情形可當做實用的時間標記。

CPU 活動

下一個部分顯示的長條圖代表各個 CPU 中的執行緒活動。長條會顯示所有應用程式 (包括遊戲) 的 CPU 活動。

CPU 活動部分可以展開,方便您查看各 CPU 的時鐘頻率。圖 1 是收合後的 CPU 活動部分範例,圖 2 則是可顯示時鐘頻率的展開後版本:

Systrace 報表的螢幕截圖
圖 1:Systrace 報表中的 CPU 活動範例 (收合後的檢視畫面)

Systrace 報表的螢幕截圖
圖 2.Systrace 報表中的 CPU 活動範例 (展開後的檢視畫面),顯示 CPU 時鐘頻率

系統事件

這個部分的直方圖會顯示特定的系統層級事件,例如特定物件的紋理數和總大小。

值得仔細留意的是標有 SurfaceView 標籤的直方圖,其中的計數代表組合影格緩衝區的數量,這些緩衝區已傳入顯示管道中,正在等候顯示於裝置螢幕中。由於大部分裝置都採取雙重或三重緩衝處理,所以這個計數幾乎一律是 0、1 或 2。

其他長方圖則描繪 Surface Flinger 程序,包括 VSync 事件和 UI 執行緒切換工作,如圖 3 所示:

Systrace 報表的螢幕截圖
圖 3. Systrace 報表中的 Surface Flinger 圖表範例

顯示影格

這部分通常位於報表最頂部,其中顯示一條多色的折線,後面是堆疊的長條。這些形狀代表已建立的特定執行緒的狀態和影格堆疊。堆疊的每個層級都代表對 beginSection() 的呼叫,或您為應用程式或遊戲定義的自訂追蹤記錄事件開頭。

至於每個長條堆疊上方的多色線條,則代表特定執行緒在一段時間內的狀態組合。線條的每個區段可包含下列其中一個顏色:

綠色:執行中
執行緒正在完成與程序相關的工作,或正在回應中斷。
藍色:可執行
執行緒可以執行,但目前並未排定執行。
白色:休眠中
執行緒沒有需要處理的工作,可能是因為執行緒因互斥鎖而封鎖。
橘色:不可中斷的休眠
執行緒已遭 I/O 封鎖,或是正在等待磁碟作業完成。
紫色:可中斷的休眠
執行緒在其他核心作業 (通常是記憶體管理作業) 中遭到封鎖。

鍵盤快速鍵

下表列出檢閱 Systrace 報表時可用的鍵盤快速鍵:

說明
W 放大追蹤記錄時間軸。
A 在追蹤記錄時間軸上向左平移。
S 縮小追蹤記錄時間軸。
D 在追蹤記錄時間軸上向右平移。
E 將追蹤記錄時間軸置中 (以目前的滑鼠位置為中心)。
M 框住目前選取範圍。
1 將目前使用中的選擇模式變更為「選取」模式。對應於滑鼠選取器工具列中顯示的第 1 個按鈕 (見右圖)。 Systrace 報表中滑鼠選取器工具列的螢幕截圖
2 將目前使用中的選擇模式變更為「平移」模式。對應於滑鼠選取器工具列中顯示的第 2 個按鈕 (見右圖)。 Systrace 報表中滑鼠選取器工具列的螢幕截圖
3 將目前使用中的選擇模式變更為「縮放」模式。對應於滑鼠選取器工具列中顯示的第 3 個按鈕 (見右圖)。 Systrace 報表中滑鼠選取器工具列的螢幕截圖
4 將目前使用中的選擇模式變更為「計時」模式。對應於滑鼠選取器工具列中顯示的第 4 個按鈕 (見右圖)。 Systrace 報表中滑鼠選取器工具列的螢幕截圖
G 在目前所選工作開始時顯示格線。
Shift + G 在目前所選工作結束時顯示格線。
向左鍵 在目前所選的時間軸上選取前一個事件。
向右鍵 在目前所選的時間軸上選取下一個事件。

調查效能問題

使用 Systrace 報表時,您可以檢查裝置 CPU 在記錄期間的使用情形。如需有關如何瀏覽 HTML 報表的說明,請參閱「鍵盤快速鍵」一節,或按一下報表右上角的「?」按鈕。

以下各節說明如何檢查報表中的資訊,以便找出並修正效能問題。

辨別效能問題

在 Systrace 報表中瀏覽時,您可以進行下列一或多項操作,更輕鬆地找出效能問題:

  • 在時間間隔周圍繪製一個矩形範圍,藉此選取要查看的時間間隔。
  • 使用尺規工具標示或標明有問題的區域。
  • 依序點選「View Options」>「Highlight VSync」來顯示各畫面的重新整理作業。

檢查 UI 影格和快訊

如圖 4 所示,Systrace 報表會列出轉譯 UI 畫面的各個程序,並在時間軸上標出各個轉譯影格。在 16.6 毫秒內轉譯的影格如果必須維持每秒 60 個影格的穩定速率,就會以綠色影格圓圈表示。影格的轉譯時間如果超過 16.6 毫秒,則以黃色或紅色影格圓圈表示。

放大的影格檢視畫面
圖 4. 放大長時間執行的影格後,Systrace 顯示的畫面

您只要按一下影格圓圈,即可醒目顯示該影格,並取得系統轉譯影格工作的其他相關資訊 (包括快訊)。報表也會顯示系統轉譯該影格時執行的方法。您可以調查這些方法,判斷造成 UI 卡頓的可能原因。

選取了有問題的影格
圖 5. 選取有問題的影格後,追蹤記錄報表下方就會顯示快訊,用於指出問題所在

選取緩慢的影格後,您可能會在報表的底部窗格看到快訊。圖 5 所示的快訊指出,影格的主要問題是花費在 ListView 回收和重新繫結中花費太多時間。您可以透過追蹤記錄中相關事件的連結,進一步瞭解系統在這段期間執行的操作。

如要查看工具在追蹤記錄中發現的每則快訊,以及裝置觸發各快訊的次數,請按一下視窗最右側的「Alerts」分頁標籤,如圖 6 所示。透過「Alerts」面板,您可以瞭解追蹤記錄中有哪些問題,以及問題導致卡頓的頻率。因此,不妨將此面板視為待修正的錯誤清單。一般來說,只要針對單一區域稍微變更或改進,就能移除整組快訊。

顯示快訊分頁
圖 6.按一下「快訊」按鈕,即可查看「快訊」分頁

如果您在 UI 執行緒上發現執行的工作過多,請透過下列其中一種方式判斷哪些方法佔用過多 CPU 作業時間:

  • 如果您知道哪些方法可能會導致出現瓶頸,請在這些方法中加入追蹤記錄標記。詳情請參閱這份指南,瞭解如何在程式碼中定義自訂事件。
  • 如果不確定 UI 瓶頸的問題來源,請使用 Android Studio 提供的 CPU 分析器。您可以產生追蹤記錄,然後使用 CPU 分析器匯入及檢查這些記錄。