Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

跟踪窗口過渡

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

捕捉痕跡

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

快速設定

要從“快速設置”捕獲跟踪:

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

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

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.pb wm_trace.pb

您可以選擇更改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.pb layers_trace.pb

您可以選擇更改SurfaceFlinger跟踪的各種設置的默認日誌配置:

  • 設置最大緩衝區大小(以KB為單位):
    adb shell su root service call SurfaceFlinger 1029 i32 size-value
  • 配置日誌條目的詳細級別:
    adb shell su root service call SurfaceFlinger 1033 i32 flags

生成狀態轉儲

WinScope從錯誤報告中讀取WindowManager和SurfaceFlinger狀態的快照。 bug報告存儲狀態作為內部獨立的原文件proto文件夾。要使用adb生成狀態轉儲,請運行以下命令。

窗口管理器

adb exec-out dumpsys window --proto > window_dump.pb

SurfaceFlinger

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.pb

分析痕跡

要分析跟踪文件,請使用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圖標標記。
  • 屬性-顯示層次結構中所選條目的狀態信息。