Вы можете собирать трассировки 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
ПротоЛог
 Для этого типа трассировки используйте имя источника данных 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
IME
 Для этого типа трассировки используйте имя источника данных 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 root перед выполнением команд adb shell для каждой из следующих трассировок. По завершении трассировки файлы трассировки будут доступны в /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 используются следующие команды.
 В процессе 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) используются следующие команды:
-  Запустить трассировку 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 \
