WinScope предоставляет инфраструктуру и инструменты для записи и анализа состояний WindowManager и SurfaceFlinger во время и после перехода между окнами. WinScope записывает все соответствующие состояния системных служб в файл трассировки, который можно использовать для повторного воспроизведения и пошагового прохождения переходов.
Захват следов
Захват трассировки с помощью быстрых настроек или adb
на устройствах, на которых запущены сборки userdebug или eng.
Быстрые настройки
Чтобы захватить трассировки из быстрых настроек :
- Включите параметры разработчика .
- Перейдите в раздел «Параметры разработчика » > « Плитки разработчика быстрых настроек ».
- Включите трассировку WinScope .
- Откройте быстрые настройки .
- Нажмите Winscope Trace , чтобы включить трассировку.
- Запуск оконных переходов на устройстве.
- После того, как вы закончите, откройте « Быстрые настройки » и нажмите «Трассировка 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]
- Установите максимальный размер буфера (в КБ):
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:
- Установите максимальный размер буфера (в КБ):
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. Создайте приложение из исходного кода или откройте его из готового каталога.
- Загрузите готовые артефакты из исходного репозитория Android:
curl 'https://android.googlesource.com/platform/prebuilts/misc/+/master/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
. - Откройте загруженные артефакты в веб-браузере.
- После открытия WinScope выберите ОТКРЫТЬ ФАЙЛ , чтобы загрузить файл трассировки.
Использование WinScope
После открытия файла трассировки в WinScope вы можете проанализировать трассировку несколькими способами.

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