Отслеживание оконных переходов

WinScope предоставляет инфраструктуру и инструменты для записи и анализа состояний WindowManager и SurfaceFlinger во время и после перехода между окнами. WinScope записывает все соответствующие состояния системных служб в файл трассировки, который можно использовать для повторного воспроизведения и пошагового прохождения переходов.

Захват следов

Захват трассировки с помощью быстрых настроек или adb на устройствах, на которых запущены сборки userdebug или eng.

Быстрые настройки

Чтобы захватить трассировки из быстрых настроек :

  1. Включите параметры разработчика .
  2. Перейдите в раздел «Параметры разработчика » > « Плитки разработчика быстрых настроек ».
  3. Включите трассировку WinScope .
  4. Откройте быстрые настройки .
  5. Нажмите Winscope Trace , чтобы включить трассировку.
  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]
  • Установите максимальный размер буфера (в КБ):
    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:

  • Установите максимальный размер буфера (в КБ):
    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. Создайте приложение из исходного кода или откройте его из готового каталога.

  1. Загрузите готовые артефакты из исходного репозитория Android:
    curl 'https://android.googlesource.com/platform/prebuilts/misc/+/master/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
    .
  2. Откройте загруженные артефакты в веб-браузере.
  3. После открытия WinScope выберите ОТКРЫТЬ ФАЙЛ , чтобы загрузить файл трассировки.

Использование WinScope

После открытия файла трассировки в WinScope вы можете проанализировать трассировку несколькими способами.

Снимок экрана WinScope
Рис. 1. Анализ трассировки в WinScope
  • Временная шкала — показывает последовательность событий в трассировке. Используйте клавиши со стрелками или щелкните каждую запись для перемещения по временной шкале.
  • Экран — обеспечивает визуальное представление каждого видимого окна на экране. Щелкните окно, чтобы выбрать исходное окно в иерархии.
  • Запись экрана — показывает экран устройства, синхронизированный с трассировкой. Перемещается вместе с временной шкалой.
  • Иерархия — представляет каждое окно, известное системе. Некоторые окна не содержат буферов, но существуют для установки политик для дочерних окон. Видимые окна отмечены значком V
  • Свойства — показывает информацию о состоянии для выбранной записи в иерархии.