跟踪窗口轉換

WinScope 提供了在窗口轉換期間和之後記錄和分析 WindowManager 和 SurfaceFlinger 狀態的基礎結構和工具。 WinScope 將所有相關的系統服務狀態記錄到一個跟踪文件中,您可以使用該文件來重放和逐步完成轉換。

捕捉痕跡

在運行 userdebug 或 eng 構建的設備上通過快速設置adb捕獲跟踪。

快速設置

要從快速設置中捕獲跟踪:

  1. 啟用開發者選項
  2. 轉到開發人員選項>快速設置開發人員磁貼
  3. 啟用WinScope 跟踪
  4. 打開快速設置
  5. 點擊Winscope 跟踪以啟用跟踪。
  6. 在設備上運行窗口轉換。
  7. 完成後,打開快速設置並點擊Winscope 跟踪以禁用跟踪。

跟踪被寫入/data/misc/wmtrace/wm_trace.winscope/data/misc/wmtrace/layers_trace.winscope 。跟踪也包含在錯誤報告中。

adb

通過adb捕獲跟踪時,分別捕獲 WindowManager 和 SurfaceFlinger 跟踪。

WindowManager 跟踪

要捕獲 WindowManager 跟踪:

  1. 啟用跟踪:
    adb shell cmd window tracing start
  2. 禁用跟踪:
    adb shell cmd window tracing stop
  3. 獲取跟踪文件:
    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 跟踪:

  1. 啟用跟踪:
    adb shell su root service call SurfaceFlinger 1025 i32 1
  2. 禁用跟踪:
    adb shell su root service call SurfaceFlinger 1025 i32 0
  3. 獲取跟踪文件:
    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

交易

要捕獲交易:

  1. 啟用跟踪:
    adb shell su root service call SurfaceFlinger 1020 i32 1
  2. 禁用跟踪:
    adb shell su root service call SurfaceFlinger 1020 i32 0
  3. 獲取跟踪文件:
    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 應用程序。從源代碼構建應用程序或從預構建目錄打開它。

  1. 從 Android 源代碼庫下載預構建的工件:
    curl 'https://android.googlesource.com/platform/prebuilts/misc/+/master/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
  2. 在 Web 瀏覽器中打開下載的工件。
  3. WinScope 打開後,選擇打開文件以加載跟踪文件。

使用 WinScope

在 WinScope 中打開跟踪文件後,您可以通過多種方式分析跟踪。

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