Отслеживание переходов окон с помощью 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.