Отслеживание переходов окон с помощью Winscope

Winscope — это веб-инструмент, который позволяет пользователям записывать, воспроизводить и анализировать состояния нескольких системных служб во время и после анимации и переходов. Winscope записывает все соответствующие состояния системных служб в файл трассировки. Используя пользовательский интерфейс Winscope с файлом трассировки, вы можете проверять состояние этих служб для каждого кадра анимации, с записью экрана или без нее, путем воспроизведения, пошагового выполнения и отладки переходов.

Системные службы, создающие трассировки, которые можно загрузить в Winscope, следующие:

  • ПоверхностьФлингер
  • Оконный менеджер
  • WMShell
  • IME
  • пусковая установка

Запустите средство просмотра трассировки Winscope.

Трассировка Winscope является частью услуг платформы. В этом разделе описываются шаги, необходимые для загрузки, сборки и запуска средства просмотра трассировки Winscope.

Выполните следующие действия, чтобы настроить компьютер для запуска трассировщика Winscope:

  1. Загрузите исходный код Android .
  2. Перейдите в папку Winscope:

    cd development/tools/winscope
    
  3. Установите зависимости, используя:

    npm install
    

    Чтобы просмотреть список доступных команд, запустите: npm run

  4. Создайте все производственные и тестовые цели, используя:

    npm run build:prod
    
  5. Запустите Winscope, используя:

    npm run start
    

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

Вы можете захватывать трассировки на устройстве с помощью Winscope или команд Android Debug Bridge (adb) .

Зафиксируйте следы на устройстве

Сохраняйте следы на устройстве для сбора данных при регистрации ошибок, связанных с анимацией. Все трассировки пользовательского интерфейса записываются с помощью этого метода, поскольку конфигурацию нельзя настроить.

На вашем устройстве Android:

  1. Включите параметры разработчика .
  2. Выберите «Отслеживание системы» в разделе «Параметры разработчика» .
  3. Включите сбор трассировок Winscope .
  4. В разделе «Разное» :
    1. Включите Прикреплять записи к отчетам об ошибках .
    2. Включите «Показать плитку быстрых настроек» .
  5. Перейдите туда, где вам нужно воспроизвести ошибку.
  6. Чтобы начать захват, откройте «Быстрые настройки» и выберите «Запись трассировки» :

    quick_setting_winscope

    Рис. 1. Меню быстрых настроек с функцией Record Trace.

  7. Выполняйте только те шаги, которые необходимы для воспроизведения ошибки.

  8. Чтобы остановить захват, откройте «Быстрые настройки» и выберите «Остановить отслеживание» .

  9. Поделитесь записанным журналом, используя один из перечисленных вариантов, например Gmail, Drive или BetterBug.

Захват следов через Winscope

Вы можете захватывать трассировки с помощью Winscope для локальной разработки и отладки. Winscope использует adb , который поддерживает подключение устройств через USB или Wi-Fi.

В Винскопе:

  1. На экране «Собрать следы » нажмите «Прокси-сервер ADB» :

    capture_traces_winscope

    Рисунок 2. Захват трассировок в Winscope.

  2. Запустите прокси-сервер Winscope ADB Connect для захвата трассировок прямо из браузера.

  3. Запустите команду:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Чтобы начать захват, на экране «Сбор трассировок» выберите цели и конфигурацию и нажмите «Начать трассировку» :

    collect_traces_winscope

    Рисунок 3. Сбор трассировок в Winscope.

  5. Чтобы остановить захват, нажмите «Завершить трассировку» :

    end_trace_winscope

    Рисунок 4. Завершение трассировки в Winscope.

Когда инструмент загружает трассировки в пользовательский интерфейс Winscope, на экране появляются сообщения Fetching and Parsing Proto Files .

Создайте дамп состояния с помощью Winscope

Чтобы сделать дамп состояния с помощью Winscope, на экране «Сбор трассировок» выберите вкладку «Дамп» и нажмите «Дамп состояния» :

dump-winscope

Рисунок 5. Состояние дампа в Winscope.

Захват следов с помощью команд adb

Запустите adb root перед выполнением команд adb shell для каждой из следующих трассировок. В конце трассировки файлы трассировки доступны в /data/misc/wmtrace . Чтобы скопировать файл или каталог и его подкаталоги с устройства, см. раздел Копирование файлов на устройство и с него . См. adb для получения дополнительной информации.

Трассировки 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
    

Протолог

Следующие команды используются для системы ProtoLog .

В процессе system_server :

  • Запускаем Протолог:

    adb shell cmd window logging start
    
  • Остановить Протолог:

    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...]
    

В WMSell:

  • Запускаем Протолог:

    adb shell dumpsys activity service SystemUIService WMShell
    

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

Для трассировки переходов используются следующие команды:

В процессе 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. Информацию о конфигурации см. в разделе Конфигурация трассировки .

См. следующий пример конфигурации для трассировки слоев 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 для захвата используется трассировка 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 \

Создать дамп состояния с помощью adb

Winscope считывает снимки состояний WindowManager и SurfaceFlinger из отчетов об ошибках. В отчетах об ошибках состояния сохраняются в виде отдельных файлов прототипов в папке proto . Чтобы сгенерировать дампы состояния с помощью adb, выполните следующие команды.

Для оконного менеджера:

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

Для SurfaceFlinger:

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

Анализировать следы

Для отладки временных и недопустимых состояний, вызывающих проблемы с анимацией, Winscope объединяет различные файлы трассировки, обеспечивает поиск и визуализацию по кадрам и временным шкалам, а также представляет сообщения protobuf в согласованном виде. Анализ трассировок в Winscope помогает определить точный уровень, структуру и состояние возникновения ошибки.

Используйте Винскоп

После захвата трассировок проанализируйте их в Winscope:

  1. Загрузите сохраненные трассировки, используя панель справа. Вы можете удалить загруженные трассировки или загрузить дополнительные трассировки.

    upload_traces_winscope

    Рисунок 6. Загрузка трассировок в Winscope.

  2. Нажмите «Просмотреть трассировки», чтобы визуализировать загруженные трассировки. Вкладки для каждой трассы появляются на верхней панели окна. Если загруженный файл содержит соответствующие трассировки, на экран накладывается плавающее изображение трассировки записи экрана.

    view_traces_winscope

    Рисунок 7. Просмотр трассировок в Winscope.

    Используйте пользовательский интерфейс на самой верхней панели окна, чтобы переименовать имя_редактирования и загрузите загруженную трассировкуdownload_trace или загрузить новый.

  3. Перемещайтесь по трассировкам во времени, используя ползунок времени на нижней панели окна. Для дополнительной навигации по времени используйте следующие функции, как показано на рисунке 8:

    • Чтобы перейти к определенному времени или событию, используйте курсор (ползунок времени) или левую кнопку мыши.стрелка_left_time и правильнострелка_right_time стрелки в поле отображения времени (левый нижний угол) или стрелки влево и вправо на клавиатуре.
    • Чтобы отобразить выбранные кривые с цветовой кодировкой на временной шкале, используйте раскрывающееся меню (слева от ползунка времени). По умолчанию на временной шкале отображаются три последние трассы, просмотренные с помощью вкладок трассировок.
    • Для детального просмотра всех загруженных трасс используйте увеличение масштаба.Zoom_in_time или уменьшить масштабZoom_out_time инструмент (под ползунком времени) или прокрутите клавиатуру. Используйте кнопку сброса, чтобы сбросить уровень масштабирования.
    • Для расширенного представления распределения трасс во времени щелкните стрелку вверх.arrow_up_time (правый нижний угол).

    time_nav_winscope

    Рисунок 8. Навигация по времени в Winscope.

    В расширенном представлении (рис. 9) выберите и увеличьте масштаб определенных временных интервалов для лучшего изучения:

    expand_time_winscope

    Рисунок 9. Расширенная временная шкала в Winscope.

  4. Для проверки следов можно просмотреть состояние устройства с помощью записи экрана. Чтобы изучить конкретную трассу, щелкните соответствующую вкладку трассировки на верхней панели инструмента.

    • Для трассы Surface Flinger три панели отображают разные виды трассы в заданный период времени, как показано на рисунке 10:sf_trace

      Рисунок 10. Трассировка Surface Flinger в Winscope.

      • Представление слоев : трехмерное представление слоев в виде прямоугольных наложений. Следующие элементы пользовательского интерфейса настраивают прямоугольники для отображения графических элементов с точки зрения их положения, размера, преобразования и z-порядка:

        • Ползунок «Поворот» (слева вверху в представлении «Слои») поворачивает многослойные прямоугольники, чтобы просмотреть их под выбранными углами.
        • Ползунок «Интервал» (вверху справа в представлении «Слои») регулирует расстояние между слоями для создания выбранного составного вида.
        • Инструменты масштабирования (в правом верхнем углу представления «Слои») позволяют увеличить масштаб.Zoom_in_time и уменьшить масштабZoom_out_time в слои для лучшего контроля.
        • Кнопка сбросасброс_сф (вверху справа от представления «Слои») восстанавливает исходные настройки камеры.
        • Перетащите прямоугольники, чтобы облегчить масштабирование.
      • Представление иерархии : полная иерархия слоев.

        • Только видимый (вверху справа от представления «Иерархия»), если этот флажок установлен, невидимые слои скрываются из иерархии, чтобы облегчить визуализацию элементов на экране.
        • Плоский (вверху справа от представления «Иерархия»), если этот флажок установлен, иерархия отображается в виде плоского списка слоев.
        • Показать разницу (вверху слева от представления иерархии) выбирается только при смене состояний. Если этот флажок установлен, инструмент сравнивает текущее состояние с предыдущим. Новый элемент выделяется зеленым цветом, удаленный элемент — красным, а измененный элемент — синим.
      • Просмотр свойств : свойства выбранного слоя. Верхняя панель представления «Свойства» содержит информацию только о ключевых свойствах, таких как «Видимость» , «Геометрия» и «Буфер» . Нижняя панель представления «Свойства» содержит протодамп всех свойств.

        • Флажок «Показать разницу» (в левом верхнем углу представления «Свойства») ведет себя так же, как и в представлении «Иерархия» .
        • Показывать значения по умолчанию (в левом верхнем углу представления «Свойства»), если этот флажок установлен, в дампе прототипа отображаются значения прототипа по умолчанию. По умолчанию эти значения не указаны в дампе прототипа. Значения прото по умолчанию берутся из определения поля прото. Если для поля прото не установлено значение по умолчанию, отличное от нуля, отображаются следующие значения прото по умолчанию:
          • Строки: ноль
          • Числа: 0
          • Логические значения: Ложь
          • Объекты: Нуль

      Выбор между тремя представлениями и запись экрана синхронизированы, то есть все трассировки синхронно обновляются при переходе к другому моменту времени. Чтобы просмотреть свойства слоя, выберите слой, щелкнув его в представлении «Иерархия» или щелкнув соответствующий прямоугольник в представлении «Свойства». Фиолетовый прямоугольник указывает на то, что к этому слою прикреплена трассировка вида. При двойном щелчке по фиолетовому слою пользовательский интерфейс переходит на соответствующую вкладку трассировки представления.

    • Для трассы Диспетчера окон три панели отображают разные виды трассы в определенный период времени, как показано на рисунке 11:

      • Вид Windows : 3D-вид слоев.
      • Представление иерархии : полная иерархия слоев.
      • Представление свойств содержит протодамп всех свойств.

      Выбор между тремя представлениями и запись экрана синхронизированы, то есть все трассировки синхронно обновляются при переходе к другому моменту времени.

      wm_trace

      Рисунок 11. Трассировка оконного менеджера в Winscope.

    • Для трассировок транзакций транзакции между Surface Flinger и диспетчером окон представлены в формате таблицы, в которой возможен поиск по отображаемым идентификаторам, типу и тексту, а также представление свойств, в котором показан дамп прототипа. Выбор между двумя видами и запись экрана синхронизируются:

      transaction_trace

      Рисунок 12. Трассировка транзакций в Winscope.

    • Для трассировок ProtoLog информация представлена ​​в виде таблицы, в которой возможен поиск по тегам, исходным файлам и тексту:

      protolog_trace

      Рисунок 13. Трассировка ProtoLog в Winscope.

    • Для трассировок переходов отображается список переходов с идентификатором, типом, временем отправки, продолжительностью и статусом, а также свойствами выбранного перехода:

      transitions_trace

      Рисунок 14. Трассировка переходов в Winscope.

,

Winscope — это веб-инструмент, который позволяет пользователям записывать, воспроизводить и анализировать состояния нескольких системных служб во время и после анимации и переходов. Winscope записывает все соответствующие состояния системных служб в файл трассировки. Используя пользовательский интерфейс Winscope с файлом трассировки, вы можете проверять состояние этих служб для каждого кадра анимации, с записью экрана или без нее, путем воспроизведения, пошагового выполнения и отладки переходов.

Системные службы, создающие трассировки, которые можно загрузить в Winscope, следующие:

  • ПоверхностьФлингер
  • Оконный менеджер
  • WMShell
  • IME
  • пусковая установка

Запустите программу просмотра трассировки Winscope.

Трассировка Winscope является частью услуг платформы. В этом разделе описываются шаги, необходимые для загрузки, сборки и запуска средства просмотра трассировки Winscope.

Выполните следующие действия, чтобы настроить компьютер для запуска трассировщика Winscope:

  1. Загрузите исходный код Android .
  2. Перейдите в папку Winscope:

    cd development/tools/winscope
    
  3. Установите зависимости, используя:

    npm install
    

    Чтобы просмотреть список доступных команд, выполните: npm run

  4. Создайте все производственные и тестовые цели, используя:

    npm run build:prod
    
  5. Запустите Winscope, используя:

    npm run start
    

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

Вы можете захватывать трассировки на устройстве с помощью Winscope или команд Android Debug Bridge (adb) .

Зафиксируйте следы на устройстве

Сохраняйте следы на устройстве для сбора данных при регистрации ошибок, связанных с анимацией. Все трассировки пользовательского интерфейса записываются с помощью этого метода, поскольку конфигурацию нельзя настроить.

На вашем устройстве Android:

  1. Включите параметры разработчика .
  2. Выберите «Отслеживание системы» в разделе «Параметры разработчика» .
  3. Включите сбор трассировок Winscope .
  4. В разделе «Разное» :
    1. Включите Прикреплять записи к отчетам об ошибках .
    2. Включите «Показать плитку быстрых настроек» .
  5. Перейдите туда, где вам нужно воспроизвести ошибку.
  6. Чтобы начать захват, откройте «Быстрые настройки» и выберите «Запись трассировки» :

    quick_setting_winscope

    Рис. 1. Меню быстрых настроек с функцией Record Trace.

  7. Выполняйте только те шаги, которые необходимы для воспроизведения ошибки.

  8. Чтобы остановить захват, откройте «Быстрые настройки» и выберите «Остановить отслеживание» .

  9. Поделитесь записанным журналом, используя один из перечисленных вариантов, например Gmail, Drive или BetterBug.

Захват следов через Winscope

Вы можете захватывать трассировки с помощью Winscope для локальной разработки и отладки. Winscope использует adb , который поддерживает подключение устройств через USB или Wi-Fi.

В Винскопе:

  1. На экране «Собрать следы » нажмите «Прокси-сервер ADB» :

    capture_traces_winscope

    Рисунок 2. Захват трассировок в Winscope.

  2. Запустите прокси-сервер Winscope ADB Connect для захвата трассировок прямо из браузера.

  3. Запустите команду:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Чтобы начать захват, на экране «Сбор трассировок» выберите цели и конфигурацию и нажмите «Начать трассировку» :

    collect_traces_winscope

    Рисунок 3. Сбор трассировок в Winscope.

  5. Чтобы остановить захват, нажмите «Завершить трассировку» :

    end_trace_winscope

    Рисунок 4. Завершение трассировки в Winscope.

Когда инструмент загружает трассировки в пользовательский интерфейс Winscope, на экране появляются сообщения Fetching and Parsing Proto Files .

Создайте дамп состояния с помощью Winscope

Чтобы сделать дамп состояния с помощью Winscope, на экране «Сбор трассировок» выберите вкладку «Дамп» и нажмите «Дамп состояния» :

dump-winscope

Рисунок 5. Состояние дампа в Winscope.

Захват следов с помощью команд adb

Запустите adb root перед выполнением команд adb shell для каждой из следующих трассировок. В конце трассировки файлы трассировки доступны в /data/misc/wmtrace . Чтобы скопировать файл или каталог и его подкаталоги с устройства, см. раздел Копирование файлов на устройство и с него . См. adb для получения дополнительной информации.

Трассировки 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
    

Протолог

Следующие команды используются для системы ProtoLog .

В процессе system_server :

  • Запускаем Протолог:

    adb shell cmd window logging start
    
  • Остановить Протолог:

    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...]
    

В WMSell:

  • Запускаем Протолог:

    adb shell dumpsys activity service SystemUIService WMShell
    

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

Для трассировки переходов используются следующие команды:

В процессе 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. Информацию о конфигурации см. в разделе Конфигурация трассировки .

См. следующий пример конфигурации для трассировки слоев 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 для захвата используется трассировка 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 \

Создать дамп состояния с помощью adb

Winscope считывает снимки состояний WindowManager и SurfaceFlinger из отчетов об ошибках. В отчетах об ошибках состояния сохраняются в виде отдельных файлов прототипов в папке proto . Чтобы создать дампы состояния с помощью adb, выполните следующие команды.

Для оконного менеджера:

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

Для SurfaceFlinger:

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

Анализировать следы

Для отладки переходных и недопустимых состояний, вызывающих проблемы с анимацией, Winscope объединяет различные файлы трассировки, обеспечивает поиск и визуализацию по кадрам и временным шкалам, а также представляет сообщения protobuf в согласованном виде. Анализ трассировок в Winscope помогает определить точный уровень, структуру и состояние возникновения ошибки.

Используйте Винскоп

После захвата трассировок проанализируйте их в Winscope:

  1. Загрузите сохраненные трассировки, используя панель справа. Вы можете удалить загруженные трассировки или загрузить дополнительные трассировки.

    upload_traces_winscope

    Рисунок 6. Загрузка трассировок в Winscope.

  2. Нажмите «Просмотреть трассировки», чтобы визуализировать загруженные трассировки. Вкладки для каждой трассы появляются на верхней панели окна. Если загруженный файл содержит соответствующие трассировки, на экран накладывается плавающее изображение трассировки записи экрана.

    view_traces_winscope

    Рисунок 7. Просмотр трассировок в Winscope.

    Используйте пользовательский интерфейс на самой верхней панели окна, чтобы переименовать имя_редактирования и загрузите загруженную трассировкуdownload_trace или загрузить новый.

  3. Перемещайтесь по трассировкам во времени, используя ползунок времени на нижней панели окна. Для дополнительной навигации по времени используйте следующие функции, как показано на рисунке 8:

    • Чтобы перейти к определенному времени или событию, используйте курсор (ползунок времени) или левую кнопку мыши.стрелка_left_time и правильнострелка_right_time стрелки в поле отображения времени (левый нижний угол) или стрелки влево и вправо на клавиатуре.
    • Чтобы отобразить выбранные кривые с цветовой кодировкой на временной шкале, используйте раскрывающееся меню (слева от ползунка времени). По умолчанию на временной шкале отображаются три последние трассы, просмотренные с помощью вкладок трассировок.
    • Для детального просмотра всех загруженных трасс используйте увеличение масштаба.Zoom_in_time или уменьшить масштабZoom_out_time инструмент (под ползунком времени) или прокрутите клавиатуру. Используйте кнопку сброса, чтобы сбросить уровень масштабирования.
    • Для расширенного просмотра распределения трасс во времени щелкните стрелку вверх.arrow_up_time (правый нижний угол).

    time_nav_winscope

    Рисунок 8. Навигация по времени в Winscope.

    В расширенном представлении (рис. 9) выберите и увеличьте масштаб определенных временных интервалов для лучшего изучения:

    expand_time_winscope

    Рисунок 9. Расширенная временная шкала в Winscope.

  4. Для проверки следов можно просмотреть состояние устройства с помощью записи экрана. Чтобы изучить конкретную трассу, щелкните соответствующую вкладку трассировки на верхней панели инструмента.

    • Для трассы Surface Flinger три панели отображают разные виды трассы в заданный период времени, как показано на рисунке 10:sf_trace

      Рисунок 10. Трассировка Surface Flinger в Winscope.

      • Представление слоев : трехмерное представление слоев в виде прямоугольных наложений. Следующие элементы пользовательского интерфейса настраивают прямоугольники для отображения графических элементов с точки зрения их положения, размера, преобразования и z-порядка:

        • Ползунок «Поворот» (слева вверху в представлении «Слои») поворачивает многослойные прямоугольники, чтобы просмотреть их под выбранными углами.
        • Ползунок «Интервал» (вверху справа в представлении «Слои») регулирует расстояние между слоями для создания выбранного составного вида.
        • Инструменты масштабирования (вверху справа в представлении «Слои») позволяют увеличить масштаб.Zoom_in_time и уменьшить масштабZoom_out_time в слои для лучшего контроля.
        • Кнопка сбросасброс_сф (вверху справа от представления «Слои») восстанавливает исходные настройки камеры.
        • Перетащите прямоугольники, чтобы облегчить масштабирование.
      • Представление иерархии : полная иерархия слоев.

        • Только видимый (вверху справа от представления «Иерархия»), если этот флажок установлен, невидимые слои скрываются из иерархии, чтобы облегчить визуализацию элементов на экране.
        • Плоский (вверху справа от представления «Иерархия»), если этот флажок установлен, иерархия отображается в виде плоского списка слоев.
        • Показать разницу (вверху слева от представления иерархии) выбирается только при смене состояний. Если этот флажок установлен, инструмент сравнивает текущее состояние с предыдущим. Новый элемент выделяется зеленым цветом, удаленный элемент — красным, а измененный элемент — синим.
      • Просмотр свойств : свойства выбранного слоя. Верхняя панель представления «Свойства» содержит информацию только о ключевых свойствах, таких как «Видимость» , «Геометрия» и «Буфер» . Нижняя панель представления «Свойства» содержит протодамп всех свойств.

        • Флажок «Показать разницу» (в левом верхнем углу представления «Свойства») ведет себя так же, как и в представлении «Иерархия» .
        • Показывать значения по умолчанию (в левом верхнем углу представления «Свойства»), если этот флажок установлен, в дампе прототипа отображаются значения прототипа по умолчанию. По умолчанию эти значения не указаны в дампе прототипа. Значения прото по умолчанию берутся из определения поля прото. Если для поля прото не установлено значение по умолчанию, отличное от нуля, отображаются следующие значения прото по умолчанию:
          • Строки: ноль
          • Числа: 0
          • Логические значения: Ложь
          • Объекты: Нуль

      Выбор между тремя представлениями и запись экрана синхронизированы, то есть все трассировки синхронно обновляются при переходе к другому моменту времени. Чтобы просмотреть свойства слоя, выберите слой, щелкнув его в представлении «Иерархия» или щелкнув соответствующий прямоугольник в представлении «Свойства». Фиолетовый прямоугольник указывает на то, что к этому слою прикреплена трассировка вида. При двойном щелчке по фиолетовому слою пользовательский интерфейс переходит на соответствующую вкладку трассировки представления.

    • Для трассы Диспетчера окон три панели отображают разные виды трассы в определенный период времени, как показано на рисунке 11:

      • Вид Windows : трехмерное представление слоев.
      • Представление иерархии : полная иерархия слоев.
      • Представление свойств содержит протодамп всех свойств.

      Выбор между тремя представлениями и запись экрана синхронизированы, то есть все трассировки синхронно обновляются при переходе к другому моменту времени.

      wm_trace

      Рисунок 11. Трассировка оконного менеджера в Winscope.

    • Для трассировок транзакций транзакции между Surface Flinger и диспетчером окон представлены в формате таблицы, в которой возможен поиск по отображаемым идентификаторам, типу и тексту, а также представление свойств, в котором показан дамп прототипа. Выбор между двумя видами и запись экрана синхронизируются:

      transaction_trace

      Рисунок 12. Трассировка транзакций в Winscope.

    • Для трассировок ProtoLog информация представлена ​​в виде таблицы, в которой возможен поиск по тегам, исходным файлам и тексту:

      protolog_trace

      Рисунок 13. Трассировка ProtoLog в Winscope.

    • Для трассировок переходов отображается список переходов с идентификатором, типом, временем отправки, продолжительностью и статусом, а также свойствами выбранного перехода:

      transitions_trace

      Рисунок 14. Трассировка переходов в Winscope.