Отладка анимаций

Одной из самых сложных проблем для разработчиков приложений является обеспечение плавной анимации без сбоев и рывков. Это особенно сложно отладить, когда система также выполняет ресурсоемкие фоновые задачи. Не существует простого способа определить, вызваны ли какие-либо сбои вашим приложением или системой. Однако существует инструмент профилирования, который может помочь вам определить возможный источник плохого поведения.

Рендеринг на ChromeOS

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

Затем средство рендеринга не может начать рендеринг следующего кадра, что вызывает еще больше проблем. Этот сценарий знаком разработчикам мобильных устройств Android; когда приложение работает на ChromeOS, контекст становится еще сложнее.

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

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

Когда ОС работает очень интенсивно, графический процессор может быть перегружен. Между моментом рендеринга кадра и его появлением на экране может возникнуть задержка. В зависимости от оборудования система может использовать четырехкратную буферизацию для компенсации. Даже при более глубокой буферизации графический конвейер может давать сбои.

Графический трассировщик ARC

В ChromeOS есть инструмент профилирования, который показывает, как буферы проходят через систему, когда происходит замена памяти, насколько загружен ЦП/ГП и что ваше приложение делает в данный момент времени, как показано на следующем изображении:

Настройка профилировщика

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

Прежде чем использовать профилировщик, заполните свое приложение трассировками. Добавить Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>); в ваш код везде, где вы хотите включить трассировку. Используйте Event , которое начинается с префикса customTrace . Префикс не отображается в сообщении трассировки.

Чтобы настроить профилировщик, выполните следующие действия:

  1. Включите режим разработчика.
  2. Включите настройки Chrome и включите инструмент визуализации графических буферов ARC .
  3. Перейдите по адресу chrome://arc-graphics-tracing .

Запустите профилировщик

  1. Выберите остановку на джанк .
  2. Запустите приложение для Android.
  3. Когда приложение Android активно и находится в фокусе, нажмите Control + Shift + G.

Когда происходит какой-то рывок, всплывает окно браузера. Используйте клавиши W и S для масштабирования и уменьшения временной шкалы.