Вы можете собирать трассировки Winscope с помощью командной строки adb в отладочных сборках (то есть, в сборках userdebug и eng ). Перед сбором трассировок Winscope с помощью adb выполните adb root .
Начиная с Android 15, трассировки Winscope интегрированы в Perfetto и собираются с помощью командной строки Perfetto. Каждая трассировка Winscope представляет собой источник данных Perfetto со своей собственной конфигурацией. Вы можете включать конфигурации по отдельности или в рамках одной сессии трассировки.
В Android 14 и более ранних версиях каждая трассировка Winscope имеет свою собственную команду, и вы можете собирать данные по каждой из них независимо. Дополнительную информацию см. в разделе «Захват трассировок в Android 14 и более ранних версиях» .
Менеджер окон
Для этого типа трассировки используйте имя источника данных android.windowmanager .
Параметры конфигурации
Уровень детализации лога (
log_level): Задает уровень детализации логов. Поддерживаемые значения:-
LOG_LEVEL_VERBOSE: Регистрирует все элементы с максимальным объемом информации. -
LOG_LEVEL_DEBUG: Регистрирует все элементы, но не записывает все данные конфигурации. -
LOG_LEVEL_CRITICAL: Регистрирует только видимые элементы с минимальными накладными расходами на производительность.
-
Частота записи в лог (
log_frequency) : Определяет частоту, с которой элементы записываются в лог:-
LOG_FREQUENCY_FRAME: Создает снимки состояния трассировки при фиксации кадра. -
LOG_FREQUENCY_TRANSACTION: Создает снимки состояния каждый раз, когда транзакция фиксируется. -
LOG_FREQUENCY_SINGLE_DUMP: Создает снимки состояния отдельных устройств при запуске источника данных.
-
Подробную информацию о значениях конфигурации см. в разделе WindowManager .
Пример
В следующем примере показан тип трассировки WindowManager для adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.windowmanager"
windowmanager_config: {
log_level: LOG_LEVEL_VERBOSE
log_frequency: LOG_FREQUENCY_TRANSACTION
}
}
}
EOF
ProtoLog
Для этого типа трассировки используйте имя источника данных android.protolog .
Параметры конфигурации
Режим трассировки ( tracing_mode ) : Определяет используемую конфигурацию логирования:
-
DEFAULT: Отслеживает только группы и уровни логирования, указанные вgroup_overrides. -
ENABLE_ALL: Отслеживает все группы и уровни журналов, если иное не указано вgroup_overrides.
Минимальный уровень логирования ( default_log_from_level ) : Если задано, отслеживаются все сообщения с уровнем логирования выше этого уровня, если не указано иное групповое переопределение. Например, это используется для включения логирования всех предупреждений и ошибок без необходимости включения всех логов. Поддерживаемые значения:
-
PROTOLOG_LEVEL_DEBUG -
PROTOLOG_LEVEL_VERBOSE -
PROTOLOG_LEVEL_INFO -
PROTOLOG_LEVEL_WARN -
PROTOLOG_LEVEL_ERROR -
PROTOLOG_LEVEL_WTF
Групповые настройки ( group_overrides ) : Включает ручную настройку уровня логирования для каждой группы ProtoLog. Каждая группа содержит:
-
name: Имя группы ProtoLog, используемое в исходном коде Android. -
log_from: Аналогичноdefault_log_from_level, но указывается только для текущей группы. collect_stacktrace: Если установлено значениеtrue, собирает трассировку стека для каждого сообщения ProtoLog в группе, для которой выполняется трассировка.
Пример
В следующем примере показан тип трассировки ProtoLog для adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.protolog"
protolog_config: {
tracing_mode: DEFAULT
default_log_from_level: PROTOLOG_LEVEL_WARN
group_overrides: {
group_name: "WM_SHELL_STARTING_WINDOW"
log_from: PROTOLOG_LEVEL_DEBUG
collect_stacktrace: true
}
}
}
}
EOF
Вход
Для этого типа трассировки используйте имя источника данных android.input.inputevent .
Параметры конфигурации
Режим трассировки ( trace_mode ) : Определяет, следует ли начинать трассировку входных данных с использованием правил, обеспечивающих конфиденциальность, или записывать все входные события:
-
TRACE_MODE_TRACE_ALL: Записывает все входные события, обрабатываемые системой, независимо от контекста, в котором они были обработаны. -
TRACE_MODE_USE_RULES: Использует правила трассировки, определенные в этом файле конфигурации, для указания того, какие события следует отслеживать. Дополнительную информацию о задании правил трассировки см. вandroid_input_event_config.proto.
Пример
Ниже приведён пример типа входной трассировки для adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.input.inputevent"
android_input_event_config: {
mode: TRACE_MODE_TRACE_ALL
}
}
}
EOF
SurfaceFlinger (слои)
Для этого типа трассировки используйте имя источника данных android.surfaceflinger.layers .
Параметры конфигурации
Режим трассировки ( mode ) : Определяет частоту регистрации элементов:
-
MODE_ACTIVE: Создает снимки слоев трассировки. Снимок делается каждый раз при изменении слоя. -
MODE_GENERATED: Создает снимки слоев на основе транзакций, хранящихся во внутреннем кольцевом буфере SurfaceFlinger. Создание снимков слоя происходит при сбросе этого источника данных. -
MODE_DUMP: Создает снимок одного слоя. -
MODE_GENERATED_BUGREPORT_ONLY: АналогичноMODE_GENERATED, но запускает генерацию снимков слоев только при получении отчета об ошибке, а не при отправке трассировки.
Флаги трассировки ( trace_flags ) :
-
TRACE_FLAG_INPUT: Если поверхность содержит входные данные, отслеживает особенности входного окна. -
TRACE_FLAG_COMPOSITION: Определяет тип композиции и видимую область. TRACE_FLAG_EXTRA: Отслеживает дополнительные метаданные поверхности, включая слои, находящиеся за пределами видимой области экрана.TRACE_FLAG_HWC: Отслеживает дополнительные неструктурированные метаданные компоновщика оборудования.TRACE_FLAG_BUFFERS: Настраивает SurfaceFlinger для отслеживания всех изменений буфера на поверхности. По умолчанию SurfaceFlinger отслеживает новое состояние только при изменении геометрии.TRACE_FLAG_VIRTUAL_DISPLAYS: Включает виртуальные слои отображения в трассировку.
Пример
В следующем примере показан тип трассировки SurfaceFlinger для adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
EOF
Подробную информацию о значении различных параметров конфигурации см. в документации SurfaceFlinger .
Переходы оболочек
Для этого типа трассировки используйте имя источника данных com.android.wm.shell.transition .
Параметры конфигурации
Для этого типа трассировки отсутствуют параметры конфигурации.
Пример
В следующем примере показан тип трассировки перехода оболочки для adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "com.android.wm.shell.transition"
}
}
EOF
SurfaceFlinger (транзакции)
Для этого типа трассировки используйте имя источника данных android.surfaceflinger.transactions .
Параметры конфигурации
Режим трассировки ( mode ) : Определяет частоту регистрации элементов:
MODE_CONTINUOUS: SurfaceFlinger записывает данные в свой внутренний кольцевой буфер транзакций каждый раз, когда происходит сброс источника данных. Кольцевой буфер содержит начальное состояние SurfaceFlinger и последние транзакции.MODE_ACTIVE: SurfaceFlinger записывает начальное состояние, а затем каждую входящую транзакцию до тех пор, пока источник данных не будет остановлен.
Пример
В следующем примере показан тип трассировки транзакций SurfaceFlinger для adb.
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
EOF
ИМЕ
Для этого типа трассировки используйте имя источника данных android.inputmethod .
Параметры конфигурации
Для этого типа трассировки отсутствуют параметры конфигурации.
Пример
В следующем примере показан тип трассировки IME для adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.inputmethod"
}
}
EOF
ViewCapture
Для этого типа трассировки используйте имя источника данных android.viewcapture .
Параметры конфигурации
Для этого типа трассировки отсутствуют параметры конфигурации.
Пример
В следующем примере показан тип трассировки ViewCapture для adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.viewcapture"
}
}
EOF
Полный пример
Perfetto позволяет собирать данные из нескольких источников в рамках одной конфигурации. Вы можете собрать все трассировки Winscope с помощью одной команды:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.windowmanager"
windowmanager_config: {
log_level: LOG_LEVEL_VERBOSE
log_frequency: LOG_FREQUENCY_TRANSACTION
}
}
}
data_sources: {
config {
name: "android.protolog"
protolog_config: {
tracing_mode: ENABLE_ALL
}
}
}
data_sources: {
config {
name: "android.input.inputevent"
android_input_event_config: {
mode: TRACE_MODE_TRACE_ALL
}
}
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
data_sources: {
config {
name: "com.android.wm.shell.transition"
}
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
data_sources: {
config {
name: "android.inputmethod"
}
}
data_sources: {
config {
name: "android.viewcapture"
}
}
EOF
Захват трассировок в Android 14 и более ранних версиях.
Перед выполнением команд adb shell для каждой из следующих трассировок запустите adb root . По завершении трассировки файлы трассировки будут доступны в /data/misc/wmtrace . Чтобы скопировать файл или каталог и его подкаталоги с устройства, см. раздел «Копирование файлов на устройство и с устройства» .
Трассировка WindowManager
Для захвата трассировки WindowManager:
Включить трассировку:
adb shell wm tracing startОтключить трассировку:
adb shell wm tracing stopСохранение данных журнала в файл во время выполнения трассировки:
adb shell wm tracing save-for-bugreportЗаписывать трассировку один раз за кадр:
adb shell wm tracing frameРегистрируйте каждую транзакцию:
adb shell wm tracing transactionУстановите максимальный размер файла журнала (в КБ):
adb shell wm tracing sizeВывести статус трассировки:
adb shell wm tracing statusУстановите уровень логирования на
critical(только видимые окна с уменьшенной информацией),trim(все окна с уменьшенной информацией) илиall(все окна и информация):adb shell wm tracing level
Дампы WindowManager
Для захвата дампов WindowManager:
adb exec-out dumpsys window --proto > window_dump.winscope
ProtoLog
Для работы с системой ProtoLog используются следующие команды.
В процессе system_server :
Запуск ProtoLog:
adb shell cmd window logging startОстановить ProtoLog:
adb shell cmd window logging stopВключите ProtoLog для указанных групп журналов:
adb shell cmd window logging enable [group...]Отключите ProtoLog для указанных групп журналов:
adb shell cmd window logging disable [group...]Включить ведение журнала Logcat для заданных групп журналов:
adb shell cmd window logging enable-text [group...]Отключить ведение журнала Logcat для заданных групп журналов:
adb shell cmd window logging disable-text [group...]
В WMShell:
Запуск ProtoLog:
adb shell dumpsys activity service SystemUIService WMShell
Трассировки SurfaceFlinger (слои)
Трассировка слоев SurfaceFlinger использует трассировку Perfetto для захвата данных. См. раздел «Конфигурация трассировки» для получения информации о настройке.
В следующем примере показана конфигурация трассировки слоев SurfaceFlinger:
unique_session_name: "surfaceflinger_layers_active"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
Следующая команда, в качестве примера, генерирует трассировку для слоев SurfaceFlinger:
adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Вывод данных SurfaceFlinger (слои)
Для захвата дампов SurfaceFlinger выполните следующую команду:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
Переходы оболочек
Следующие команды используются для трассировки переходов.
В процессе system_server используйте следующие команды:
Начать трассировку:
adb shell cmd window shell tracing startОстановить отслеживание:
adb shell cmd window shell tracing stopЗапустите трассировку в WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing startОстановить трассировку в WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
ИМЕ
Для трассировки редактора методов ввода (IME) используются следующие команды:
- Запуск трассировки IME для клиентов метода ввода (IM), службы метода ввода (IMS) и службы управления методом ввода (IMMS):
adb shell ime tracing start
Начните отслеживание клиентов IME, IMS и IMMS:
adb shell ime tracing stop
SurfaceFlinger (транзакции)
Трассировка транзакций SurfaceFlinger использует трассировку Perfetto для захвата данных. См. раздел «Конфигурация трассировки» для получения информации о настройке.
В следующем примере показана конфигурация Perfetto для активной трассировки SurfaceFlinger:
unique_session_name: "surfaceflinger_transactions_active"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
write_into_file: true
file_write_period_ms: 100
В следующем примере показана конфигурация Perfetto для непрерывной трассировки SurfaceFlinger:
unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_CONTINUOUS
}
}
}
Следующая команда, в качестве примера, генерирует трассировку для транзакций SurfaceFlinger:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \