WinScope 提供了在窗口轉換期間和之後記錄和分析 WindowManager 和 SurfaceFlinger 狀態的基礎結構和工具。 WinScope 將所有相關的系統服務狀態記錄到一個跟踪文件中,您可以使用該文件來重放和逐步完成轉換。
捕捉痕跡
在運行 userdebug 或 eng 構建的設備上通過快速設置或adb
捕獲跟踪。
快速設置
要從快速設置中捕獲跟踪:
- 啟用開發者選項。
- 轉到開發人員選項>快速設置開發人員磁貼。
- 啟用WinScope 跟踪。
- 打開快速設置。
- 點擊Winscope 跟踪以啟用跟踪。
- 在設備上運行窗口轉換。
- 完成後,打開快速設置並點擊Winscope 跟踪以禁用跟踪。
跟踪被寫入/data/misc/wmtrace/wm_trace.winscope
和/data/misc/wmtrace/layers_trace.winscope
。跟踪也包含在錯誤報告中。
adb
通過adb
捕獲跟踪時,分別捕獲 WindowManager 和 SurfaceFlinger 跟踪。
WindowManager 跟踪
要捕獲 WindowManager 跟踪:
- 啟用跟踪:
adb shell cmd window tracing start
- 禁用跟踪:
adb shell cmd window tracing stop
- 獲取跟踪文件:
adb pull /data/misc/wmtrace/wm_trace.winscope wm_trace.winscope
您可以選擇更改 WindowManager 跟踪的各種設置的默認日誌配置:
- 設置日誌頻率(對於事務或幀):
adb shell cmd window tracing [frame | transaction]
- 配置日誌條目的詳細級別:
adb shell cmd window tracing level [all | trim | critical]
- 設置最大緩衝區大小(KB):
adb shell cmd window tracing size size-value
- 轉儲緩衝區狀態、日誌級別、剩餘容量和元素個數:
adb shell cmd window tracing status
SurfaceFlinger 痕跡
要捕獲 SurfaceFlinger 跟踪:
- 啟用跟踪:
adb shell su root service call SurfaceFlinger 1025 i32 1
- 禁用跟踪:
adb shell su root service call SurfaceFlinger 1025 i32 0
- 獲取跟踪文件:
adb pull /data/misc/wmtrace/layers_trace.winscope layers_trace.winscope
您可以選擇更改 SurfaceFlinger 跟踪的各種設置的默認日誌配置:
- 設置最大緩衝區大小(KB):
adb shell su root service call SurfaceFlinger 1029 i32 size-value
- 配置日誌條目的詳細級別:
adb shell su root service call SurfaceFlinger 1033 i32 flags
交易
要捕獲交易:
- 啟用跟踪:
adb shell su root service call SurfaceFlinger 1020 i32 1
- 禁用跟踪:
adb shell su root service call SurfaceFlinger 1020 i32 0
- 獲取跟踪文件:
adb pull /data/misc/wmtrace/transaction_trace.winscope
更多事務合併文件在 `/data/misc/wmtrace/` 中可用,命名為 `transaction_merges_*.winscope`。
生成狀態轉儲
WinScope 從錯誤報告中讀取 WindowManager 和 SurfaceFlinger 狀態的快照。錯誤報告將狀態作為單獨的 proto 文件存儲在proto
文件夾中。要使用adb
生成狀態轉儲,請運行以下命令。
窗口管理器
adb exec-out dumpsys window --proto > window_dump.winscope
SurfaceFlinger
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
分析痕跡
要分析跟踪文件,請使用 WinScope Web 應用程序。從源代碼構建應用程序或從預構建目錄打開它。
- 從 Android 源代碼庫下載預構建的工件:
curl 'https://android.googlesource.com/platform/prebuilts/misc/+/master/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
- 在 Web 瀏覽器中打開下載的工件。
- WinScope 打開後,選擇打開文件以加載跟踪文件。
使用 WinScope
在 WinScope 中打開跟踪文件後,您可以通過多種方式分析跟踪。

- 時間線- 顯示跟踪中的事件序列。使用箭頭鍵或單擊每個條目以瀏覽時間線。
- 屏幕- 提供屏幕上每個可見窗口的可視化表示。單擊窗口以選擇層次結構中的源窗口。
- 屏幕錄製— 顯示與跟踪同步的設備屏幕。與時間線一起導航。
- 層次結構- 表示系統已知的每個窗口。一些窗口不包含緩衝區,但存在用於設置窗口子級的策略。可見窗口標有
V
圖標。 - 屬性— 顯示層次結構中選定條目的狀態信息。